from:DNS: More than just names
0x00 前言
此文章讲得所有内容都是用的DNS本身设计的功能,但是没有想到可被利用的地方。
讨论的范围仅是利用DNS本身攻击。
所以不会讨论下面的DNS攻击,如:
DNS污染 DNS错误配置(域传送等) DNSSec
等等
0x01 DNS是如何工作的
0x02 协议
DNS 类型
有很多不同的记录类型,但是我们这次只关注A,AAAA,CNAME,MX和TXT记录。
A :: 获取一个IP地址
AAAA :: 获取一个IPv6地址
MX :: 邮箱服务器
也有,
CNAME – 别名 TXT – 文本数据
别忘了: NB/NBSTAT – NetBIOS
数据包结构:
如果name是以一对“1”bit开头的,剩下的14bit说明实际域名所在位置相对DNS起始表示字段的偏移。
例如:如果name是“C0 0F”则表示 “使用出现偏移量为0x0F的名字。
详细解释可以参考:http://blog.csdn.net/twelvelee/article/details/6714115
当然,这可能指向自身,造成DNS客户机/服务器 无限循环。
反向DNS
工作原理相同,但是有PTR的记录类型(特殊方法格式化ip地址)。
最终你可以甚至为任何你想要的。
这让我疑惑,什么是可信的?
侦查与DNS
当遇到只能走dns的数据,其他的都被防火墙挡住的时候:
我拥有skullseclabs.org域名,所有的请求都通过*.skullseclabs.org转到我的DNS服务器。
XSS
当你插入的js代码在浏览者的浏览器中执行的时候,你如何知道呢?
如果user-agent内容会被插入执行,
<img src='http://ab12.skullseclabs.org/img.jpg'>
然后查看我的DNS服务器 :
证明html代码被执行。
为什么我们关心呢?
因为,数据包看起来完全是正常的。 我们没有直接连接服务器,因此防火墙是不会知道的。
最后我们可以知道是或否有服务器想要连接,不需要成功连接,甚至不需要服务器尝试连接。我们还可以做什么呢?
想要知道谁给你发邮件?
非常简单用 [email protected]
结论?可能什么都没有,或许能找到一个反垃圾邮件。
SQL 注射
两个可以执行DNS查询的SQL语句
XXE 漏洞
Google曾经给在他服务器上找到XXE漏洞的人支付了1W刀。
XXE能够让你读取系统的本地文件:
同时也可以请求远程服务器
我们就有了一种探测XXE漏洞的一种方式:
即使存在防火墙,或者服务器限制严格一些文件不能读取,你仍然能够探测到XXE漏洞。
通过DNS直接获取数据不太可能,但是用来检测是否有漏洞是个很有效的办法。
shell注入
使用这种方法,很容易检测到shell的注入,适用与不同的平台上。
插入一个DNS查询:
(适用于Windows,Linux,BSD)
有人想起来这个周的ShellShock吗?
Attack over DNS
安全性就是边界。
受信任的数据在一边,不受信任的数据在了另外一边。
当你做了DNS查询,你又考虑到结果不可信吗?
看看下面代码有安全问题吗?
把TXT记录改成如下,最终导致SQL注入:
下面有一篇详细的DNS注入的writeup
PlaidCTF writeup for Web-300 – whatscat (SQL Injection via DNS)
下面是一个有效的CNAME,MX,TXT,PTR等记录(双引号和空格不允许)
<script/src='http://javaop.com/test-js.js'></script>
显然TXT记录可以做更多的事情。
在2010年的时候我测试三个访问最多的域名查询系统的时候全部都有这个漏洞
现在其中的一个仍然有此问题。
DNS隧道
如何传送数据呢?
来回的通信:
实际的过程:
作者自己还解决的一些压缩等问题,最后给出自己写的工具地址: