SQL注入漏洞-利用DNS进行盲注

在windows下面,可以通过网络路径(NUC)来访问其他主机的资源。其格式如下:

\\servername\sharename,其中servername是服务器名。sharename是共享资源的名称。

其中servername可以是主机IP或者域名

当servername是域名的时候,会通过DNS 把域名把dns解析为IP地址。

DNS 服务器:win2003,IP:10.1.1.31添加一条主机记录baidu.com  10.1.1.31

子域名test 委托到10.1.1.251

Web 服务器:存在web 服务,存在SQL 盲注,IP:10.1.1.251,设置DNS 为10.1.1.31

攻击机:IP:10.1.1.251,本地监听53 端口


在渗透测试中,我们经常会遇到存在盲注的注入点,这种注入点如果想获取数据来证明漏洞真实存在,就需要花费大量的时间,特别是延时注入,利用dns 来进行盲注,可以节省大量时间。

我们首先在本地测试一下

首先把自己攻击机的DNS 改为本机IP ,即10.1.1.251

SQL注入漏洞-利用DNS进行盲注_第1张图片

SQL注入漏洞-利用DNS进行盲注_第2张图片

在攻击机的C:\Program Files\sqlmap\lib\request目录下面,存在一个dns.py,我们利用它来监听本地的53端口。这个时候,我们发起任何dns请求,dns.py都会输出我们请求的域名。

SQL注入漏洞-利用DNS进行盲注_第3张图片

SQL注入漏洞-利用DNS进行盲注_第4张图片

可以看到,dns 请求已经被记录了下来,再变换一下

在windows 下面,可以通过UNC 路径访问其他主机上的资源

其格式如下:

\\servername\sharename,其中servername是服务器名。sharename是共享资源的名称。

其中servername 可以是主机IP或者域名

我们试试把servername 写成域名试试看,看是否会发起dns 请求把域名解析成IP

SQL注入漏洞-利用DNS进行盲注_第5张图片

 可以看到,DNS请求同样被记录了下来

讲完这些,然后来讲讲mysql的load_file()函数

Mysql的load_file()函数同样可以像windows主机访问共享一样,来获取远程文件。

在攻击机安装了wamp,点击桌面的wamp图标运行,mysql安装在c:\wamp\bin\mysql\mysql5.6.12,进入该目录,在cmd执行mysql -u root -p,然后回车 进入mysql终端

然后我们进行查询,并利用load_file()函数来读取远程文件。

SQL注入漏洞-利用DNS进行盲注_第6张图片

可以看到,我们利用load_file来访问远程文件一样发起了dns请求,本次实验利用的就是这个特点。

再变换一下,毕竟我们要获取数据,所以我们总不能写死。

SQL注入漏洞-利用DNS进行盲注_第7张图片

在这里利用concat 聚合函数,把字符串连接起来,再进行查询,同样可以发起dns 请求,而且,我们只需要修改我们获取数据的语句就行了


讲完了理论,是时候来讲讲到底怎么利用它获取数据了,不然一切都是徒劳的…

在web服务器上有一个test.php ,关键代码如下

直接通过$_GET 来获取用户输入的值,没有进行任何过滤,但是这里只是执行了语句,所以只能盲注。

延时注入得慢慢猜,太浪费时间,如果利用load_file() 函数来访问远程的访问,如果我们能知道他的dns 请求记录,我们不就可以拿到数据了吗?

那么问题来了,刚才我们是在本机测试的,也就是相当于我们把服务器的dns 改为了我们自己的dns 服务器,问题是我们怎么可能有权限修改别人的dns 呢,如果都能修改dns 了,想来权限不会太低了吧…

其实还是有办法的。。。

如果我们能得到域名的dns 解析记录,不就可以得到它的解析请求了吗?

所以要利用这个dns 进行盲注获取数据,首先你得有个域名…

本次实验假设你是 heetian.com 这个域名的拥有者,你可以控制域名的解析…

我在DNS服务器上把 test 子域委托到我有权限的主机上,在本次试验中也就是攻击机。

SQL注入漏洞-利用DNS进行盲注_第8张图片

也就是当请求 .test.heetian.com的解析请求都会解析到攻击机,然后我们在攻击机监听53 端口就好了

然后就开始注入了,看到底能不能得到数据!

直接打开注入点,构造好注入语句,试试再说

SQL注入漏洞-利用DNS进行盲注_第9张图片

可以看到,我们已经正确地获得了数据,当然,我们获取的数据中可能包含字符,这个时候可能就解析出错了,那么怎么解决呢

就是编码,直接hex 一下就好了,比如

SQL注入漏洞-利用DNS进行盲注_第10张图片

SQL注入漏洞-利用DNS进行盲注_第11张图片

然后把前面的字符串hex 解码一下

SQL注入漏洞-利用DNS进行盲注_第12张图片

 可以看到,解码后就是我们的结果

你可能感兴趣的:(SQL注入,sql)