本文へ移動
cccskills
無料GitHub で公開

hunt-smuggling

HTTP request smuggling / desync hunting - CL.TE, TE.CL, TE.TE, CL.0, and HTTP/2 downgrade. Timing-based detection, differential confirmation, no-blind-claims. Wiki-first, FIND schema output.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md6.4 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Hunt: HTTP Request Smuggling

Assumes hunt-core for the scope gate, two-account rule, confirmation gate, enumeration limits, stop conditions, wiki protocol, FIND output, and Deadends. Do not re-derive any of that here.

Wiki

qmd_query "HTTP request smuggling desync CL.TE TE.CL TE.TE CL.0 HTTP/2 downgrade" via wiki-search MCP

Hub: [[web-moc]] (live web index). Primary page: [[http-request-smuggling]]. Payload arsenal: wiki/payloads/smuggling.md. Anchors: [[reverse-proxy-attacks]].

Attack surface signals

Smuggling needs a front-end that parses headers differently from the back-end: a CDN/WAF/LB in front of an origin, HTTP/1.1 keep-alive reused across users, or an HTTP/2 edge that downgrades to HTTP/1.1. Odds rise wherever both Transfer-Encoding and Content-Length are honored somewhere in the chain.

Rank before probing. Not all front-end/back-end pairs are equally likely:

  • HTTP/2 edge downgrading to HTTP/1.1 origin - H2.CL / H2.TE re-open a surface a hardened H1 front-end closes; highest yield on modern stacks.
  • Multiple hops in the chain - CDN -> WAF -> LB -> origin; each added parser is another chance for two of them to disagree.
  • Mismatched server software front vs back - e.g. a normalising proxy in front of a lenient app server, or vice versa.
  • Connection reuse to the back-end - a poisoned prefix only reaches a victim if the back-end pools/keep-alives the connection across requests.
  • Endpoints behind the edge auth/path filter - a desync that bypasses a front-end control is worth more than one that does not reach anything privileged.

Methodology

  1. Detect (timing, safe): send a deliberately malformed TE/CL and watch for a back-end read timeout.
# CL.TE probe (front-end uses CL, back-end uses TE) - delays if vulnerable
POST / HTTP/1.1
Content-Length: 4
Transfer-Encoding: chunked

1
A
0

# TE.CL probe (front-end TE, back-end CL)
Transfer-Encoding: chunked  +  Content-Length: 6 ; body: "0\r\n\r\nX"
  1. Confirm (differential): smuggle a prefix that prepends to the victim's request, then issue a normal request and observe the poisoned response (e.g. your G prepended to their path -> 404 on GET ...). See the confirmation gate below - a timing delay alone is never the finding.
  2. TE.TE: obfuscate the header so one server ignores it (Transfer-Encoding: xchunked, Transfer-Encoding, Transfer-Encoding:\tchunked, double TE).
  3. HTTP/2: test H2.CL / H2.TE (smuggle via H2 that downgrades to H1), and H2 request splitting via CRLF in header values.
  4. CL.0 / H2.0: back-end ignores body -> smuggle a full second request.
  5. Exploit: capture other users' requests (steal session cookies/headers), bypass front-end auth/path controls, cache-poison via smuggled response, escalate a reflected issue to stored.
  6. Distill when confirmed - reusable obfuscation or H2-desync variant, GENERIC, no client host: python3 scripts/wiki-stage.py --kind technique --slug <slug> --target-page techniques/web/http-request-smuggling.md

Drive it through Burp for operator visibility. Use Burp Repeater "Send group in sequence (single connection)" for the differential and the HTTP Request Smuggler extension for the sweep; push each load-bearing smuggled request into Repeater rather than leaving it in a curl loop.

Confirmation gate

NOT confirmation: a single slow response or timing noise alone; a back-end read timeout by itself; a malformed request the front-end simply rejects; a delay you have not reproduced. A single timing observation is a signal to investigate, never proof of a desync.

IS confirmation: a reliable differential - a smuggled prefix that changes the next request's response (your own follow-up, or a captured victim request), reproduced on a clean connection; or a consistent timing delta reproduced across several runs and matched to a specific desync variant; or a DNS/HTTP hit to your unique Burp Collaborator / interactsh subdomain fired by a Collaborator-pointed smuggled request.

Blind / OOB desync. When you plant a Collaborator-pointed smuggled request, append a row to targets/<eng>/oob.md: | <token> | <sink url+param> | smuggling | <date> | waiting | | (columns: token | sink | class | planted | status | source; token = your unique Burp Collaborator / interactsh label). The recon-capture hook auto-correlates the incoming callback to flip the row to HIT and SessionStart surfaces HITs; a HIT row is the gate to scaffold the FIND. Do NOT claim a blind smuggling desync without the captured differential or a HIT row.

Chaining

A confirmed desync is a delivery primitive, not the endpoint. Chain it:

  • Smuggled response -> cache poisoning. Poison a shared cache with a smuggled response so it serves to every user; hand off to hunt-cache.
  • Request hijack. Capture the next user's full request (session cookie, auth header, CSRF token) by smuggling a prefix that appends their request to a body you read back.
  • Front-end control bypass -> stored. Smuggle past an edge auth/path filter to reach an internal endpoint, or escalate a reflected issue to stored via a poisoned response.

Evasion

If the direct CL/TE probe is normalised clean, the desync is often still there behind obfuscation - work the TE.TE variants (step 3) and the HTTP/2 downgrade (step 4), which re-opens the surface a hardened HTTP/1.1 front-end closes. Header casing, line-folding, and bare-CR/LF tricks beyond those live in wiki/payloads/smuggling.md.

Severity

ImpactTypical
Captured victim requests (session cookie / auth header) at scalecritical
Admin session theftcritical
Front-end auth / path-control bypasshigh
Cache poisoning via smuggled responsehigh
Reflected escalated to stored via poisoninghigh

Rated on demonstrated impact per hunt-core. A desync you can trigger but cannot yet show capturing a victim request or poisoning a response is a mechanism, not the severity ceiling.

Deadends

Append: - [ ] smuggling on <host> -- CL.TE/TE.CL/TE.TE/CL.0/H2 all clean
              (single normalising front-end, no timing delta or differential after a full sweep)

Record which variants you swept, not just that it failed. The next pass needs to know the boundary.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

arsenal

無料

Wiki-first "what do I use" lookup - pick the automated TOOL (wiki/tools/), then the PAYLOAD/technique (wiki/payloads/ + wiki/cheatsheets/), for a surface/service/vuln-class BEFORE hand-rolling or working from memory. Use for "tool for <service>", "automated tools for web/<service>", "what should I run on <surface>", "which tool for <X>", "payloads for <X>", "payload arsenal", "cheatsheet for <X>", "how do I exploit <tech/class>", "exploit/attack chain for <X>", "arsenal", any SSRF/XSS/SQLi/SSTI/LFI/JWT/XXE/IDOR/NoSQL/deserialization/CSRF/CORS/CRLF/GraphQL/smuggling/web-cache/OAuth/SAML/MFA/crypto/LDAP/XPath/WebAuthn/file-upload/IMDS/prompt-injection/Modbus ask, plus "privesc arsenal", "CVE arsenal", "default creds", "nuclei templates", "sqlmap/hydra/nmap/bloodhound", "password attacks".

日本語の概要は準備中です。原文の説明を表示しています。

Encod3d-Sec/TORCH3302026年9月1日 更新

Autonomous bug-bounty campaign driver. Runs a full programme end to end with no operator approvals - the deterministic driver (scripts/campaign.py) owns pass state, generates the killchain board from recon, and prints the exact next action (including which Skill and tool to run) every turn. Use when starting or resuming a bug-bounty engagement, "run the bb workflow", "hunt this program", "9-pass campaign", or when handed a *.scope wildcard to test for TIER1 findings. Single agent, refuter-verified, wiki-first, tool-first.

日本語の概要は準備中です。原文の説明を表示しています。

Encod3d-Sec/TORCH3302026年9月1日 更新

Health check for the bb/pt/ctf workflow driver subsystem - verifies everything is in place so every machine runs the same. Checks vault-content consistency (scripts present, JSON valid, routing wired, all 69 tool pages carry phase:, the tool index resolves, the hook edits are in place) AND per-machine wiring (the three workflow skills symlinked, hooks registered, imports work), then runs a live init->board->next smoke test. Use when setting up the workflow on a new machine, after a vault sync, when the driver misbehaves, or on "bb-health", "campaign health", "is the workflow set up", "check hooks and scripts", "why is the board not working".

日本語の概要は準備中です。原文の説明を表示しています。

Encod3d-Sec/TORCH3302026年9月1日 更新

Bring up a REAL, visible, interactive chromium on the Kali VM that the operator logs into (Smart-ID / Mobile-ID / any manual auth or MFA/CAPTCHA), while the agent drives and observes it live through the chrome-devtools MCP (navigate, DOM snapshot, network capture, screenshots, console, evaluate). Use whenever a target needs a MANUAL login the agent cannot complete headlessly, when you need to capture an authenticated session / the real API calls a page makes, or to confirm/screenshot a DOM-XSS. Triggers - "open a browser", "log in manually", "smart-id / mobile-id / national id login", "mfa / 2fa login", "solve the captcha", "drive the browser", "capture the authenticated session / network".

日本語の概要は準備中です。原文の説明を表示しています。

Encod3d-Sec/TORCH3302026年9月1日 更新

OFFLINE FALLBACK for the claude-md-management plugin - prefer that plugin when it is installed. Audit and improve CLAUDE.md files - scan for CLAUDE.md files, evaluate quality against templates, output a report, then make targeted updates. Invoke explicitly (/claude-md-improver) when the plugin is unavailable.

日本語の概要は準備中です。原文の説明を表示しています。

Encod3d-Sec/TORCH3302026年9月1日 更新

coverage

無料

Show per-asset vuln-class coverage gaps for the active engagement so nothing in scope is skipped. Use when asked "coverage", "what haven't we tested", "test gaps", "are we thorough", or before calling an engagement done.

日本語の概要は準備中です。原文の説明を表示しています。

Encod3d-Sec/TORCH3302026年9月1日 更新

Encod3d-Sec のスキルをすべて見る

このスキルの問題を報告する