2626_CTX_SENSITIVE_FILE = frozenset ({"url_path" , "request_body" , "unknown" })
2727_CTX_CMS_PROBING = frozenset ({"url_path" , "request_body" , "unknown" })
2828_CTX_RECON = frozenset ({"url_path" , "unknown" })
29+ _CTX_PROTO_POLLUTION = frozenset ({"query_param" , "request_body" , "unknown" })
30+ _CTX_CODE_INJECTION = frozenset ({"query_param" , "request_body" , "unknown" })
2931_CTX_ALL = frozenset ({"query_param" , "header" , "url_path" , "request_body" , "unknown" })
3032
3133
4749 "sensitive_file" ,
4850 "cms_probing" ,
4951 "recon" ,
52+ "proto_pollution" ,
53+ "code_injection" ,
5054 }
5155)
5256
6771 "sensitive_file" : _CTX_SENSITIVE_FILE ,
6872 "cms_probing" : _CTX_CMS_PROBING ,
6973 "recon" : _CTX_RECON ,
74+ "proto_pollution" : _CTX_PROTO_POLLUTION ,
75+ "code_injection" : _CTX_CODE_INJECTION ,
7076}
7177
7278
@@ -122,6 +128,19 @@ class SusPatternsManager:
122128 _CTX_SQLI ,
123129 "sqli" ,
124130 ),
131+ (r"\w/\*(?!!)[^*]*\*/\w" , _CTX_SQLI , "sqli" ),
132+ (r"(?i)(?:OR|AND)\s+'[\w\d]*'='[\w\d]*'?" , _CTX_SQLI , "sqli" ),
133+ (
134+ r"(?i)(?:^|;)\s*(?:DROP|TRUNCATE|ALTER)\s+(?:TABLE|DATABASE|SCHEMA)\b" ,
135+ _CTX_SQLI ,
136+ "sqli" ,
137+ ),
138+ (
139+ r"(?i);\s*(?:INSERT\s+INTO|UPDATE\s+\w+\s+SET|DELETE\s+FROM)\b" ,
140+ _CTX_SQLI ,
141+ "sqli" ,
142+ ),
143+ (r"(?i)\bORDER\s+BY\s+\d+\b" , _CTX_SQLI , "sqli" ),
125144 (r"(?:\.\.\/|\.\.\\)(?:\.\.\/|\.\.\\)+" , _CTX_DIR_TRAVERSAL , "dir_traversal" ),
126145 (
127146 r"(?:/etc/(?:passwd|shadow|group|hosts|motd|issue|mysql/my.cnf|ssh/"
@@ -162,6 +181,16 @@ class SusPatternsManager:
162181 _CTX_CMD_INJECTION ,
163182 "cmd_injection" ,
164183 ),
184+ (
185+ r"[;|&]\s*(?:ls|cat|rm|id|whoami|uname|wget|curl|nc|netcat|socat|bash|sh|python|perl)\b" ,
186+ _CTX_CMD_INJECTION ,
187+ "cmd_injection" ,
188+ ),
189+ (
190+ r"(?i)\b(?:nc|netcat|ncat)\s+-[a-z]*e\b|/dev/tcp/\d" ,
191+ _CTX_CMD_INJECTION ,
192+ "cmd_injection" ,
193+ ),
165194 (
166195 r"(?:php|data|zip|rar|file|glob|expect|input|phpinfo|zlib|phar|ssh2|"
167196 r"rar|ogg|expect)://[^\s]+" ,
@@ -194,6 +223,11 @@ class SusPatternsManager:
194223 "nosql" ,
195224 ),
196225 (r"(?:\{\s*\$[a-zA-Z]+\s*:\s*(?:\{|\[))" , _CTX_NOSQL , "nosql" ),
226+ (
227+ r'"\$(?:where|gt|gte|lt|lte|ne|eq|regex|in|nin|all|size|exists|type|mod|options|expr|jsonSchema)"\s*:' ,
228+ _CTX_NOSQL ,
229+ "nosql" ,
230+ ),
197231 (
198232 r"(?i)filename=[\"'].*?\.(?:php\d*|phar|phtml|exe|jsp|asp|aspx|sh|"
199233 r"bash|rb|py|pl|cgi|com|bat|cmd|vbs|vbe|js|ws|wsf|msi|hta)[\"\']" ,
@@ -216,6 +250,12 @@ class SusPatternsManager:
216250 _CTX_TEMPLATE ,
217251 "template" ,
218252 ),
253+ (r"<%[=#]?[^%]*%>" , _CTX_TEMPLATE , "template" ),
254+ (
255+ r"\$\{[^}]*(?:@[\w.]+@|\b\w+\s*\(|\d+\s*[*/%+\-]\s*\d+)[^}]*\}" ,
256+ _CTX_TEMPLATE ,
257+ "template" ,
258+ ),
219259 (
220260 r"[\r\n]\s*(?:HTTP\/[0-9.]+|Location:|Set-Cookie:)" ,
221261 _CTX_HTTP_SPLIT ,
@@ -334,6 +374,16 @@ class SusPatternsManager:
334374 (r"(?:^|/)autodiscover/" , _CTX_RECON , "recon" ),
335375 (r"^/dns-query(?:\?|$)" , _CTX_RECON , "recon" ),
336376 (r"(?:^|/)\.git/(?:refs|index|HEAD|objects|logs)(?:/|$)" , _CTX_RECON , "recon" ),
377+ (
378+ r"(?:__proto__|constructor)\s*(?:\[\s*[\"']prototype[\"']\s*\]|\.\s*prototype)|[\"']__proto__[\"']\s*:" ,
379+ _CTX_PROTO_POLLUTION ,
380+ "proto_pollution" ,
381+ ),
382+ (
383+ r"System\.Diagnostics\.Process\.Start\s*\(|System\.Reflection\.|Assembly\.Load\s*\(" ,
384+ _CTX_CODE_INJECTION ,
385+ "code_injection" ,
386+ ),
337387 ]
338388
339389 patterns : list [str ] = [p [0 ] for p in _pattern_definitions ]
0 commit comments