
HTTP Request Smuggling 취약점을 시간 지연 분석을 통해 탐지하는 CLI 도구로, 자동화된 보안 테스트를 위해 CL.TE 및 TE.CL 페이로드가 내장되어 있습니다.
HTTP 요청 스머글링은 공격자가 모호한 HTTP 요청을 밀반입하여 보안 제어를 우회하고 무단 액세스 권한을 획득하여 악의적인 활동을 수행하는 높은 심각도의 취약점입니다. 이 취약점은 2005년 watchfire에 의해 발견되었고, 이후 2019년 8월 James Kettle - (albinowax)에 의해 재발견되어 DEF CON 27과 Black-Hat USA에서 발표되었습니다. 이 취약점에 대해 더 자세히 알고 싶다면 Portswigger 웹사이트에 있는 그의 잘 정리된 연구 블로그를 참조하세요. 따라서 이 보안 도구의 아이디어는 주어진 호스트에 대해 HRS 취약점을 탐지하는 것입니다. 탐지는 주어진 변형(permutes)을 사용한 시간 지연 기법을 기반으로 이루어집니다. 이 도구에 대해 더 알고 싶다면 이 도구에 대한 제 블로그 게시물을 읽어보시기를 적극 권장합니다.
이 도구는 파이썬으로 작성되었으며, 이 도구를 사용하려면 로컬 컴퓨터에 파이썬 3.x 버전이 설치되어 있어야 합니다. 입력으로 단일 URL 또는 텍스트 파일에 제공해야 하는 URL 목록을 받습니다. HRS 취약점 탐지 기법에 따라 도구에는 약 37개의 변형(permutes)과 CL.TE 및 TE.CL에 대한 탐지 페이로드가 내장되어 있습니다. 주어진 각 호스트에 대해 이러한 페이로드를 사용하여 공격 요청 객체를 생성하고 각 요청에 대한 응답을 받은 후 경과 시간을 계산하여 취약점 여부를 판단합니다. 그러나 대부분의 경우 위양성(false positive)일 가능성이 있으므로 취약점을 확인하려면 burp-suite turbo intruder를 사용하여 페이로드를 시도해 볼 수 있습니다.
대상을 스캔하기 전에 몇 가지 법적 면책 조항을 아는 것이 매우 중요합니다. 대상 스캔 전에 적절한 권한이 있어야 하며, 그렇지 않으면 이 도구를 사용하여 승인되지 않은 대상을 스캔하지 않는 것이 좋습니다. 취약점 탐지를 위해 (--retry) 옵션을 사용하여 여러 번의 페이로드를 전송하기 때문입니다. 이는 문제가 발생할 경우 백엔드 소켓이 페이로드에 오염될 가능성이 있으며, 해당 웹사이트의 실제 방문자가 웹사이트의 실제 콘텐츠 대신 오염된 페이로드를 보게 될 수 있음을 의미합니다. 따라서 대상 웹사이트를 스캔하기 전에 적절한 예방 조치를 취할 것을 적극 권장합니다. 그렇지 않으면 법적 문제에 직면할 수 있습니다.
git clone https://github.com/anshumanpattnaik/http-request-smuggling.git
cd http-request-smuggling
pip3 install -r requirements.txt
usage: smuggle.py [-h] [-u URL] [-urls URLS] [-t TIMEOUT] [-m METHOD]
[-r RETRY]
HTTP Request Smuggling vulnerability detection tool
optional arguments:
-h, --help show this help message and exit
-u URL, --url URL set the target url
-urls URLS, --urls URLS
set list of target urls, i.e (urls.txt)
-t TIMEOUT, --timeout TIMEOUT
set socket timeout, default - 10
-m METHOD, --method METHOD
set HTTP Methods, i.e (GET or POST), default - POST
-r RETRY, --retry RETRY
set the retry count to re-execute the payload, default
- 2
python3 smuggle.py -u <URL>
python3 smuggle.py -urls <URLs.txt>
탐지 페이로드를 변경하여 더 정확하게 만들고 싶다면 payloads.json 파일의 detection 배열에서 페이로드를 업데이트할 수 있습니다.
"detection": [
{
"type": "CL.TE",
"payload": "\r\n1\r\nZ\r\nQ\r\n\r\n",
"content_length": 5
},
{
"type": "TE.CL",
"payload": "\r\n0\r\n\r\n\r\nG",
"content_length": 6
}
]
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.