원문 캡처 · stuff.sigvaldason.com
원문 캡처 · stuff.sigvaldason.com

구형 PHP를 업데이트하기 전 적용한 PHP2Shell 임시 조치가 작동하는지 확인하는 절차다. 아파치 설정을 검사하고 재시작한 뒤, 외부 요청과 웹에서 읽은 PHP 설정값을 점검한다.

sh
sudo apache2ctl configtest sudo systemctl restart apache2

mod_php를 사용할 때는 reload만으로는 이전 설정을 유지하는 기존 워커가 남으므로 restart해야 한다.

다른 컴퓨터에서 아래 요청을 각각 보내면 모두 403이 반환돼야 한다. 해당 URL이 HTTPS로만 리디렉션되는 경우에는 301도 가능하다.

sh
curl -s -o /dev/null -w '%{http_code}\n' -F x=1 https://example.com/
curl -s -o /dev/null -w '%{http_code}\n' -F x=1 http://example.com/
curl -s -o /dev/null -w '%{http_code}\n' -F x=1 -H 'Host: bogus' http://SERVER_IP/
curl -sk -o /dev/null -w '%{http_code}\n' -F x=1 -H 'Host: bogus' https://SERVER_IP/

200이 반환되면 요청이 여전히 서버에 도달한다는 뜻이다. 마지막 두 요청은 놓쳤을 수 있는 기본 가상 호스트를 확인한다.

PHP 설정은 php -i가 아니라 웹 요청으로 확인해야 한다. CLI는 다른 설정 파일을 읽기 때문이다. 아래 내용을 담은 임시 파일을 만들어 웹에서 불러온 뒤 삭제한다.

php
<?php echo ini_get('memory_limit'), ' ', ini_get('session.upload_progress.enabled');

예상 결과는 -1 다음에 빈 값 또는 0이 나오는 것이다.