Productivity
ctf-web▌
ljagiello/ctf-skills · updated Apr 8, 2026
$npx skills add https://github.com/ljagiello/ctf-skills --skill ctf-web
summary
Web exploitation techniques for CTF challenges covering injection, authentication, access control, and client-side attacks.
- ›Covers 20+ attack categories: SQLi, XSS, SSTI, SSRF, XXE, command injection, path traversal, JWT/OAuth/SAML, prototype pollution, deserialization, file upload RCE, and race conditions
- ›Includes quick-reference payloads, filter bypasses, and multi-stage exploitation chains with real CTF examples (HTB, Pragyan, Nullcon)
- ›Supporting markdown files detail server-side
skill.md
CTF Web Exploitation
Use this skill as a routing and execution guide for web-heavy challenges. Keep the first pass short: map the app, confirm the trust boundary, and only then dive into the detailed technique notes.
Prerequisites
Python packages (all platforms):
pip install sqlmap flask-unsign requests
Linux (apt):
apt install hashcat jq curl
macOS (Homebrew):
brew install hashcat jq curl
Go tools (all platforms, requires Go):
go install github.com/ffuf/ffuf/v2@latest
Manual install:
- ysoserial — GitHub, requires Java (Java deserialization payloads)
Additional Resources
- sql-injection.md - SQL injection techniques: auth bypass, UNION extraction, filter bypasses, second-order SQLi, truncation, race-assisted leaks, INSERT ON DUPLICATE KEY UPDATE password overwrite, innodb_table_stats WAF bypass
- server-side.md - SSTI, SSRF, XXE, command injection, PHP quirks, GraphQL injection, XML injection, Vue.js template injection via constructor chaining
- server-side-exec.md - Direct code execution paths, upload-to-RCE, deserialization-adjacent execution, LaTeX injection, header and API abuses
- server-side-exec-2.md - More execution chains: SQLi fragmentation, path parser tricks, polyglot uploads, wrapper abuse, filename injection, BMP pixel webshell with filename truncation
- server-side-deser.md - Java/Python/PHP deserialization and race-condition playbooks, PHP SoapClient CRLF SSRF via deserialization
- server-side-advanced.md - Advanced SSRF, traversal, archive, parser, framework, and modern app-server issues, Nginx alias traversal
- server-side-advanced-2.md - Docker API SSRF, Castor/XML, Apache expression reads, parser discrepancies, Windows path tricks, rogue MySQL server file read
- client-side.md - XSS, CSRF, cache poisoning, DOM tricks, admin bot abuse, request smuggling, paywall bypass
- client-side-advanced.md - CSP bypasses, Unicode tricks, XSSI, CSS exfiltration, browser normalization quirks, postMessage null origin bypass
- auth-and-access.md - Auth/authz bypasses, hidden endpoints, IDOR, redirect chains, subdomain takeover, AI chatbot jailbreaks
- auth-jwt.md - JWT/JWE manipulation, weak secrets, header injection, key confusion, replay
- auth-infra.md - OAuth/OIDC, SAML, CORS, CI/CD secrets, IdP abuse, login poisoning
- node-and-prototype.md - Prototype pollution, JS sandbox escape, Node.js attack chains
- web3.md - Solidity and Web3 challenge notes
- cves.md - CVE-driven techniques you can match against challenge banners, headers, dependency leaks, or version strings
- field-notes.md - Long-form exploit notes: quick references for SQLi, XSS, LFI, JWT, SSTI, SSRF, command injection, XXE, deserialization, race conditions, auth bypass, and multi-stage chains
When to Pivot
- If the target is a native binary, custom VM, or firmware image, switch to
/ctf-reversefirst. - If the HTTP bug only gives you code execution and the hard part becomes memory corruption or seccomp escape, switch to
/ctf-pwn. - If the "web" challenge really turns on JWT math, custom MACs, or crypto primitives, switch to
/ctf-crypto. - If the web challenge involves analyzing logs, PCAPs, or recovering artifacts from a web server, switch to
/ctf-forensics. - If the challenge requires gathering intelligence from public web sources, DNS records, or social media before exploitation, switch to
/ctf-osint.
First-Pass Workflow
- Identify the real boundary: browser only, backend only, mixed app, or auth flow.
- Capture one normal request/response pair for every major feature before fuzzing.
- Enumerate hidden functionality from JS bundles, response headers, routes, and alternate methods.
- Classify the likely bug family: injection, authz, parser mismatch, upload, trust proxy, state machine, or client-side execution.
- Build the smallest proof first: leak, bypass, or primitive. Save full exploit chaining for later.
Quick Start Commands
# Recon
curl -sI https://target.com
ffuf -u https://target.com/FUZZ -w wordlist.txt
curl -s https://target.com/robots.txt
# SQLi quick test
sqlmap -u "https://target.com/page?id=1" --batch --dbs
# JWT decode (no verification)
echo '<token>' | cut -d. -f2 | base64 -d 2>/dev/null | jq .
# Cookie decode (Flask)
flask-unsign --decode --cookie '<cookie>'
flask-unsign --unsign --cookie '<cookie>' --wordlist rockyou.txt
# SSTI probes
curl "https://target.com/page?name={{7*7}}"
curl "https://target.com/page?name={{config}}"
# Request inspection
curl -v -X POST https://target.com/api -H "Content-Type: application/json" -d '{}'
First Questions to Answer
- Is the flag likely in the browser, an API response, a local file, a database row, or an internal service?
- Does the app trust user-controlled data in templates, redirects, file paths, headers, serialized objects, or background jobs?
- Are there multiple parsers disagreeing with each other: proxy vs app, URL parser vs fetcher, sanitizer vs browser, serializer vs filter?
- Can you turn the bug into a smaller primitive first: read one file, forge one token, call one internal endpoint, trigger one bot visit?
High-Value Recon Checks
- Read the HTML, inline scripts, and bundled JS before guessing the API surface.
- Compare what the UI submits with what the backend accepts; optional JSON fields often unlock hidden paths.
- Check obvious metadata and helper paths early:
/robots.txt,/sitemap.xml,/.well-known/,/admin,/debug,/.git/,/.env. - Try alternate verbs and content types on interesting routes:
GET,POST,PUT,PATCH,TRACE, JSON, form, multipart, XML. - Treat file upload, PDF/export, webhook, OAuth callback, and admin bot features as likely exploit multipliers.
Fast Pattern Map
- SQL errors, odd filtering, or state-dependent DB behavior: start with sql-injection.md.
- Templating, file reads, SSRF, command execution, XML, or parser bugs: start with server-side.md and server-side-exec.md.
- XSS, CSP bypass, admin bot, client routing, DOM issues, or scriptless exfiltration: start with client-side.md.
- Session forgery, hidden admin routes, JWT, OAuth, SAML, or weak trust boundaries: start with auth-and-access.md, auth-jwt.md, and auth-infra.md.
- Node.js apps, prototype pollution, VM sandboxes, or SSRF into internal services: add node-and-prototype.md.
- Smart contract frontends or blockchain-integrated apps: add web3.md.
Common Chain Shapes
- Recon -> hidden route -> auth bypass -> internal file read -> token or flag
- XSS or HTML injection -> admin bot -> privileged action -> secret leak
- Traversal or upload -> config/source leak -> secret recovery -> session forgery
- SSRF -> metadata or internal API -> credential leak -> code execution
- SQLi or NoSQL injection -> credential bypass -> second-stage template or upload abuse
Deep-Dive Notes
Use field-notes.md once you have confirmed the challenge is truly web-heavy and you need the long exploit catalog.
- Recon, SQLi, XSS, traversal, JWT, SSTI, SSRF, XXE, and command injection quick notes
- Deserialization, race conditions, file upload to RCE, and multi-stage chain examples
- Node, OAuth/SAML, CI/CD, Web3, bot abuse, CSP bypasses, and modern browser tricks
- CVE-shaped playbooks and older challenge patterns that still show up in modern CTFs
Common Flag Locations
- Files:
/flag.txt,/flag,/app/flag.txt,/home/*/flag* - Environment:
/proc/self/environ, process command line, debug config dumps - Database: tables named
flag,flags,secret, or seeded challenge content - HTTP: custom headers, archived responses, hidden routes, admin exports
- Browser: hidden DOM nodes,
data-*attributes, inline state objects, source maps