먼저, 예상되는 공격자가 무엇을하려고하는지 모르겠습니다. 어쩌면 이상한 세션 ID 공격에 취약한 PHP 스크립트 또는 PHP 버전이있을 수 있습니다. 그래도 걱정할 필요가 없습니다.
서버가 예상대로 동작했습니다. Apache가 URL로 전달되는 URL을 해석하는 방식으로 인해 특정 상황에서 200이 예상되는 코드입니다.
첫째, http://allrequestsallowed.com
더 일반적인 'Host :'헤더로 처리됩니다 ( 이것이 RFC에 지정되어 있다고 생각하지 않으며 다른 서버가 내가 잘못한 방식으로 해석하지 않을 수 있습니다 . 5.1 절의 RFC 2616에 지정되어 있습니다. 2, 클라이언트가 그 형식을 거의 사용하지 않는 것 같지만 실례합니다. 잠시 전에 작성한 HTTP 서버 구현을 수정해야합니다 ...).
아마도 'allrequestsallowed.com'이라는 사이트가 없을 것입니다. 아파치가 Host:
인식하지 못하는 호스트 이름에 대한 헤더 (또는 이와 동등한)를 받으면 어떻게됩니까 ? 첫 번째 가상 호스트를 기본값으로 선택합니다. 이것은 Apache에 대해 잘 정의되고 문서화 된 동작입니다. 따라서 이름이 무엇이든 첫 번째 가상 호스트가 무엇이든 (또는 가상 호스트가없는 경우 기본 서버 구성 만) 인수됩니다.
이제 나머지 URL은 경로 /
, 및 GET 매개 변수 ( ?PHPSESSID...
비트) 의 두 부분으로 구성됩니다 .
이제 경로 /
는 거의 모든 웹 서버에 존재해야합니다. 대부분 의 경우이 스크립트 index.html
는 index.php
스크립트 와 유사 하거나 스크립트에 매핑 되지만이 중 어느 것도 무시할 수 있습니다.
정적 HTML 파일에 매핑되면 파일의 내용이 반환되므로 매개 변수가 무시됩니다. (고급 구성 지시문이 설정되어 있지 않으며 거의 확실하지 않다고 가정합니다.)
반면에 일종의 스크립트 인 경우 해당 PHPSESSID
변수가 스크립트로 전달됩니다. 스크립트가 실제로 해당 변수를 사용 하는 경우 (이 경우 PHP의 내장 세션 처리를 사용하는 PHP 스크립트 만 가능) 내용에 따라 동작이 달라집니다.
그러나 /
세션을 사용하여 PHP 스크립트에 매핑 하더라도 아무 일도 일어나지 않습니다. 어쨌든 세션 ID가 존재하지 않으며 무시되거나 스크립트에 오류가 표시됩니다.
드물게 세션 ID가 존재하는 경우에도 침입자는 다른 사람의 세션을 납치 할 수 있습니다. 그것은 나쁘지만 실제로는 보안 허점이 아닙니다. 공격자는 공격자가 세션 ID 정보를 어디에서나 얻을 수 있습니다 (HTTPS를 사용하지 않는 경우 무선 네트워크 감지는 좋은 후보입니다). 실제로는 원래 세션을 할 수 없었던 사용자는 할 수 없었습니다.
편집 : 또한 SESSIONID 내의 '% 5C'는 백 슬래시 문자로 매핑됩니다. 이것은 Windows 호스트에 대한 디렉토리 탐색 공격에 대한 테스트 인 것 같습니다.
curl -v http://allrequestsallowed.com/?PHPSESSID=5gh6ncjh00043YVMWTW_B%5CFAP -x www.example.com:80
. 기본 설정은 우분투 시스템에서 의미있는 내용이없는 "Nginx에 오신 것을 환영합니다"페이지를 반환하는 것 같습니다. 따라서 200 응답이지만 간단한 포괄 페이지입니다. 실제로 다른 곳이나 그와 비슷한 요청을 프록시하지는 않습니다.