本文介绍如何在metasploit-framework中添加dns隧道功能及演示使用dns隧道上线meterpreter的实战效果.前言DNS隧道是一种比较古老的技术,从首次发布至今已经有20多年的时间,隐蔽且适应性强一直是DNS隧道的标签.具体到国内业界技术分析来看,最流行的DNS隧道应用就是Cobalt Strike 的DNS Beacon.Cobalt Strike官网也将DNS Beacon称为最受欢迎的功能特性 https://cobaltstrike.com/help-dns-beacon作为对比,metasploit-framework的meterpreter虽然支持更多的平台(WINDOWS/LINUX/MACOS),更多种类的传输协议(TCP/Http/Https/Ping),但是官方一直没有发布可用的DNS隧道上线的方式,如今DNS隧道这块拼图终于添加到了metasploit-framwork这幅画卷中.我们为什么要使用DNS隧道绕过网络限制通常企业中的防火墙都不会限制DNS网络流量的传输,而且为了员工上网及服务器软件更新等业务,内网的DNS服务器也会与互联网运营商的DNS服务器连接.隐蔽传输DNS隧道的网络传输隐藏在大量的DNS请求中,安全设备也会处于性能考虑不会对所有的DNS流量进行分析.且DNS协议使用UDP协议传输,没有明显的网络连接,且请求经由系统进程(如svchost.exe)发送,具有很好的隐蔽性.如果要用一句话总结:DNS隧道是在某些限制严格的网络环境中最好的解决方案也是唯一的解决方案.MSF与DNS隧道时间线2013年6月: Cobalt Strike上线了DNS Beacon功能https://blog.cobaltstrike.com/2013/06/06/dns-command-and-control-added-to-cobalt-strike/2017年11月: Alexey Sintsov和 Maxim Andreyanov首次在DEFCON RUSSIA会议上提交”Meterpreter over DNS”议题https://defcon-russia.ru/posts/streamdns/2017年12月: metasploit-framework官方仓库新建关于Dns隧道的PRhttps://github.com/rapid7/metasploit-payloads/pull/2622020年5月: metasploit-framework官方仓库PR由于一直没有更新,PR关闭.2021年6月: Viper的vipermsf修改了PR中的部分代码,适配最新的msf6,reverse_dns功能正式上线从2017到2021,5年!代码实现MSF的dns隧道正式名称为reverse_dns,具体来说是一种payload(载荷).MSF中的其他载荷分为metasploit-payload和metasploit-framework两部分代码,而reverse_dns除了metasploit-payload和metasploit-framework两部分代码外还有个dns_server.py脚本作为数据通讯桥梁,我们这里分别介绍以下这三部分代码的具体实现metasploit-payloadmetasploit-payload中的代码都在https://github.com/defcon-russia/metasploit-payloads/tree/master_update/c/meterpreter/source/server这个子工程中.工程用于生成metsrv.dll文件,meterpreter的所有传输协议都由该dll文件实现测试环境搭建及功能验证DNS隧道如果需要在互联网上进行测试,通常需要购买两个域名,并配置ns记录,其实可以通过Windows Server搭建本地的DNS服务器,图形化操作,方便调试.环境搭建准备一个Windows Server服务器,一个Windows 7(10)机器,一个Kali服务器IP地址配置如下:Windows Server : 192.168.146.20Windows 7 : 192.168.146.12Ubuntu: 192.168.146.130在Windows Server新建一个DNS服务器,配置如下图所示上图中配置表示将域名kali.lab.com指向192.168.146.130上图中配置表示将域名test.viper.com的ns服务器设置为kali.lab.com配置Windows7的IP地址上图中配置表示将Windows 7的DNS服务器设置为192.168.146.20(Windows Server)这里总结一下,如果Windows 7(192.168.146.12)访问aaaa.test.viper.com这个域名,首先请求会到Windows Server(192.168.146.20),Windows Server查看kali.lab.com的IP地址(192.168.146.130),然后将DNS请求转发到192.168.146.130的53端口.在Kali服务器(192.168.146.130)安装ViperSSH登录Kali服务器,然后执行如下命令启动dns_serverdocker exec -it viper-c bash /root/viper/Tools/dns_server –nsip 192.168.146.130 –domain test.viper.com 如果提示socket.error: [Errno 98] Address already in use请执行service systemd-resolved stop 等命令关闭53端口上运行的服务参数配置登录Viper后新建监听,配置如下图所示在dns_server命令行中应观察到如下输出点击生成载荷,上传到Windows 7 中并执行测试效果session上线及dns_server的输出样例执行ps等meterpreter等内置命令执行操作系统shell命令load kiwi抓取密码实战环境搭建及功能验证本地测试毕竟是理想环境,我们需要在互联网中实际测试reverse_dns的速度及稳定性究竟如何.环境搭建准备一台VPS,两个域名,一台测试PC机VPS使用了阿里云的一台轻量服务器,两个域名都在godaddy中购买.假设VPS的外网IP地址为47.243.123.123域名A为:aaa.club域名B为:bbb.website域名A在godaddy中进行如下设置域名B在godaddy中进行如下设置然后在VPS 47.243.123.123中安装ViperSSH登录VPS服务器,启动dns_serverdocker exec -it viper-c bash /root/viper/STATICFILES/Tools/dns_server –nsip 47.243.123.123 –domain bbb.website 如果提示socket.error: [Errno 98] Address already in use请执行service systemd-resolved stop 等命令关闭53端口上运行的服务参数配置登录Viper后新建监听,配置如下图所示dns_server应该有如下输出点击生成载荷,上传到Windows 7 中并执行测试效果session上线及dns_server的输出样例执行ps等meterpreter等内置命令load kiwi抓取密码(大概用时20秒)参考内容Viper安装https://www.yuque.com/vipersec/help/olg1uagodaddy 域名管理https://dcc.godaddy.com/domains/?ref=cardreverse_dns代码大部分代码都来源于如下两个仓库https://github.com/defcon-russia/metasploit-frameworkhttps://github.com/defcon-russia/metasploit-payloads因为defcon-russia中的代码是基于MSF5版本开发,而当前MSF6版本相对于MSF5版本在Meterpreter进行了大量重构,需要进行部分适配工作.修改metasploit-payloads中server_transport_windns.c文件,主要适配新的Transplort协议修改metasploit-framework中msf_autoload.rb,MSF6中使用了新的自动load模块功能.具体适配代码的细节可以参考如下仓库:https://github.com/FunnyWolf/vipermsf本文由happy原创发布转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/255625安全客 – 有思想的安全新媒体
本文出自快速备案,转载时请注明出处及相应链接。