출처 : http://swbae.egloos.com/1889501


Windows 환경에서 APM_Setup을 이용해 사이트를 운용할 때 다음과 같이 PHP MitM 공격이 가능함에 주의해야 한다.
전제조건 : 공격용 파일 업로드

개념설명: http://www.secforce.co.uk/media/presentations/OWASP_Abusing_PHP_sockets.pdf
  - SO_REUSEADDR 취약점 이용 (http://swbae.egloos.com/1412385)

실제 공격 데모: http://www.secforce.co.uk/media/demos/PHP_socket_hijacking_demo.html

파일 업로드 취약점을 이용해 서버에 스니퍼를 설치하게 되면, 이후의 모든 리퀘스트를 모니터링할 수 있게 된다.


위의 그림은 스니퍼를 실행시킨 후, 다른 PC의 사용자가 서버에 접속했을 때 index.html 페이지를 스니핑해서 보여주는 화면이다.

취약점 원인: Windows용 Apache가 SO_REUSEADDR를 사용해 소켓을 바인딩하기 때문이다. 최신버전인 Apache 2.2.11에서도 해당 소스는 여전히 SO_REUSEADDR를 사용하고 있는데, 주석의 내용으로 보아 이는 개발자의 의도로 보인다(즉, 버그가 아니라 사양이다).



헷갈리지 말아야 할 점: PHP의 취약점이 아니다. 예제를 위해 PHP 프로그램을 올린 것일 뿐, Perl, Python, Ruby 등 다른 언어를 이용해서도 가능하다. APM_Setup의 취약점도 아니다.

대처방안: Apache 프로젝트에서 Windows 환경에서 Apache를 컴파일할 때, SO_EXCLUSIVEADDRUSE를 사용하도록 소스를 변경해줘야 할 부분이다. 그러나, 주석의 내용으로 보아 수정될 확률은 희박하다. 우리 입장에선 파일 업로드 취약점을 최대한 제거하는 것 외엔 뾰족한 방법이 없을 듯 하다.

참고: 해당 취약점은 SO_REUSEADDR를 사용하는 모든 서버 프로그램에 공통된 취약점이다. 다만 특성 상 웹 서버나 WAS 서버에 대해 공격하기가 더 쉬울 뿐이다.

주의사항: 예제 코드는 때때로 서버에 DoS 상태를 유발하므로 실무에서 PT 용도로 사용하지 않는 것이 좋다.