
Go로 작성된 빠른 HTTP 다운그레이드 스머글링 스캐너입니다.
SmuggleFuzz는 설정 가능하고 빠른 HTTP 다운그레이드 스머글링 스캐너입니다. 사용자 정의 가능한 가젯 목록을 제공하여 실패한 스머글링 공격의 원인에 대한 더 깊은 통찰력을 제공합니다. 저는 수많은 HTTP 다운그레이드 기반 스머글링 취약점이 아직 발견되지 않았다고 확신합니다. 불행히도 많은 사람들이 피상적인 스캔 후 탐색을 중단합니다. SmuggleFuzz를 사용하면 다른 사람이 놓칠 수 있는 스머글링 취약점을 발견할 수 있습니다.
자세한 내용은 https://moopinger.github.io/blog/smugglefuzz/fuzzing/smuggling/2024/01/31/SmuggleFuzz.html를 참조하세요.
릴리스 페이지에서 사본을 다운로드하세요: https://github.com/Moopinger/smugglefuzz/releases
go install github.com/moopinger/smugglefuzz@latest
다른 방법:
git clone https://github.com/moopinger/smugglefuzz.git
cd smugglefuzz
go build .
./smugglefuzz
SmuggleFuzz에는 세 가지 명령어가 있습니다:
Usage:
smugglefuzz scan [flags]
예시:
smugglefuzz scan -u https://example.com/ --confirm
smugglefuzz scan -u https://example.com/ --filter TIMEOUT --confirm
smugglefuzz scan -u https://example.com/ -w wordlist.txt -t 10 --confirm --filter TIMEOUT
smugglefuzz scan --dc -u https://example.com/ -w wordlist.txt -x PUT --confirm
// 여러 타겟? -u 대신 -f를 사용하고 타겟이 포함된 파일을 제공하세요:
smugglefuzz scan -f multiple_targets.txt --confirm -t 10
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt --confirm -s ./save-success.txt --filter TIMEOUT
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt -H "Cookie: date=...; session=...;" -s ./save-success.txt -x PUT --filter TIMEOUT
Flags:
-c, --confirm 타임아웃 발생 시 타겟에 확인 요청을 보내려면 이 플래그를 활성화하세요. 타겟이 취약한지 확인하는 데 도움이 됩니다.
-d, --data string 전송할 HTTP/2 데이터 프레임입니다. 예: 99\r\n (기본값 "99\r\n")
--dc 출력에서 색상을 비활성화합니다. 출력을 파일로 저장할 때 유용합니다.
-f, --file string URL 형식의 여러 타겟이 포함된 파일입니다. 한 줄에 하나의 타겟.
--filter string 문자열 또는 프레임 유형 등으로 응답을 필터링합니다. 예: 405, 200, 502, TIMEOUT, RST, GOAWAY 등.
-H, --header string 사용자 정의 헤더를 삽입합니다. 일반 헤더 형식으로 제공해야 합니다: "Cookie: date=...; session=...;"
-h, --help scan 명령어 도움말
-i, --interval int 타임아웃 간격(초)입니다. (기본값 5)
-x, --method string 사용할 HTTP 요청 메서드입니다. (기본값 "POST")
-s, --save-success string 요청이 성공한 것으로 확인되면(--confirm 플래그 사용) 파일에 저장됩니다. 많은 타겟을 다룰 때 유용합니다.
-t, --threads int 실행할 스레드 수입니다. Smugglefuzz는 빠르게 실행될 수 있으므로 원하는 수를 설정하세요. 하지만 너무 많으면 WAF에 문제를 일으킬 수 있습니다. (기본값 4)
-u, --url string 스캔할 타겟 URL입니다.
-w, --wordlist string 사용할 가젯의 사용자 정의 목록을 제공합니다. 제공되지 않으면 기본 목록이 사용됩니다.
Usage:
smugglefuzz request [flags]
예시:
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13"
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -x PUT
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -H "Cookie: date=...; session=...;" --data "223\r\n"
Flags:
-a, --attack string 'scan' 모드의 워드리스트처럼 세미콜론과 공백(; )으로 구분된 공격 헤더입니다.
-d, --data string 전송할 HTTP/2 데이터 프레임 내용입니다. (기본값 "99\r\n")
--dc 출력에서 색상을 비활성화합니다.
-H, --header string 사용자 정의 헤더를 삽입합니다. 예: "Cookie: values"
-h, --help request 명령어 도움말
-i, --interval int 탐지 타임아웃 간격(초)입니다. (기본값 5)
-x, --method string 사용할 메서드입니다. (기본값 "POST")
-u, --url string 요청을 제출할 타겟 URL입니다.
이 명령어는 기본 스머글 가젯을 출력합니다. 현재 내장 확인은 H2.CL 및 H2.TE에 대해서만 작동합니다. 그러나 타임아웃(–filter TIMEOUT) 또는 자신의 도메인에서 OAST를 통해 H2.0 공격을 탐지하는 것은 여전히 가능합니다. (아래 의사 헤더 섹션 참조)
SmuggleFuzz는 사용자 정의 워드리스트를 통해 요청을 완전히 제어할 수 있도록 합니다. 이러한 목록은 최적의 요청 처리를 위해 따라야 할 기본 구조를 가지고 있습니다. 예를 들어, 헤더와 해당 값은 일반적인 콜론 대신 세미콜론과 공백(; )으로 구분되어 스머글링 요청에 콜론 값을 포함하기 쉽게 합니다. 이는 다양한 변형과 창의적인 접근을 가능하게 합니다. 자신만의 페이로드를 만드는 방법에 대한 자세한 지침은 James Kettle의 HTTP/2 연구를 참조하세요.
이 도구는 125개의 스머글링 가젯이 포함된 즉시 사용 가능한 목록을 제공하지만, 항상 확장할 여지가 있습니다. 이러한 가젯은 'output' 명령어를 사용하여 표시할 수 있으며, 쿼리 구조에 대한 통찰력을 제공합니다. 사용자는 'w' 플래그를 사용하여 사용자 정의 워드리스트로 스캔을 실행할 수 있습니다. 목록은 캐리지 리턴 및 줄 바꿈을 '%0d%0a' 또는 '\r\n'으로 표현하는 등 인쇄할 수 없는 바이트 값에 대해 URL 인코딩(%00)을 지원합니다. 제공된 목록은 포괄적이지만, 자신만의 가젯을 제작하면 성공률을 크게 높일 수 있습니다.
H2C 지원이 필요하신가요? SmuggleFuzz의 "experimental-h2c" 브랜치를 확인하세요.
의사 헤더는 완전히 지원되며 ":name" 구문을 사용하여 사용자 정의할 수 있습니다:
:authority:scheme:method이러한 헤더는 H2.0 공격 벡터를 테스트할 때 특히 유용합니다. 예를 들어, OAST 기반 방법을 사용한 H2.0 스머글링 테스트에서 다음과 같은 워드리스트 항목이 효과적일 수 있습니다:
v0.1.8부터 [HOSTNAME]을 플레이스홀더로 사용할 수 있습니다. SmuggleFuzz는 런타임에 이를 호스트 이름으로 대체합니다.
:authority; [HOSTNAME]\r\n\r\nGET / HTTP/1.1\r\nHost: uniqid.oastify.com\r\nX-HEADER:%20또는
:authority; [HOSTNAME]\r\n\r\nGET https://uniqid.oastify.com/ HTTP/1.1\r\nHost: [HOSTNAME]\r\nX-HEADER:%20SmuggleFuzz에서 사용하는 탐지 방법은 Albinowax의 HTTP/1 스머글링 연구 및 defparam의 Smuggler에서 사용된 방법과 유사하지만, HTTP/2에 맞게 조정되었습니다. 다행히 이러한 공격은 다운그레이드를 포함하므로, H2.CL 및 H2.TE 탐지 모두에 동일한 요청 본문/DATA 페이로드를 사용할 수 있습니다.
워드리스트에 대한 중요한 지침은 성공적으로 스머글된 헤더가 확인 공격을 위해 다음 값을 포함해야 한다는 것입니다:
CL: 13
TE: chunked
각 요청에는 값이 "99\r\n"인 "Body"/DATA-프레임이 포함됩니다. TE 헤더가 스머글되면 서버가 성공적으로 스머글한 경우 청크된 콘텐츠 길이가 153(0x99)으로 해석되어 타임아웃이 발생합니다. 마찬가지로 콘텐츠 길이가 13인 CL 헤더를 스머글해도 길이가 충족되지 않아 타임아웃이 발생합니다.
확인 요청은 타임아웃을 유발한 동일한 쿼리를 다시 제출하지만, 데이터는 "3\r\nABC\r\n0\r\n\r\n"입니다. 이는 청크된 TE와 13의 CL을 모두 충족시켜 성공적인 응답을 유도하고 잠재적으로 스머글링 취약점을 나타냅니다.