近期冰蝎更新了内网穿透模块中的一些功能,有不少朋友不知道参数怎么填,希望能出一个使用指导手册,刚好今天下班赶上五一放假,就借这个机会写一个“说明书”(文中有大量演示动图,请耐心等待加载)。
由于冰蝎采用了会话加密,所以客户端首次和服务端通信会有一个协商的过程(v3.0之后的版本不存在密钥协商过程),成功建立连接后,会把服务器侧的一些基本信息,显示在这个Tab页。
这里的命令执行提供非交互式的命令执行,常规功能,不再赘述。
虚拟终端提供一个交互式的真实终端,相当于把服务器侧的Shell给搬到了客户端,在这个Shell里可以执行各种需要交互式的命令,如ssh、mysql:
也可以正常使用vi、vim等命令:
或者top命令:
当然,你也可以直接在里面使用python:
上面是linux环境,windows环境也一样,可以直接使用python,也可以直接使用powershell,如下图:
最后,说明一下,虚拟终端和命令执行不同的是,虚拟终端使用完毕需要点击“停止”按钮来关闭服务器侧的shell进程。
常规功能,不再展开描述。
内网穿透模块目前提供了多个穿透方案:
1.基于VPS中转的端口映射;2.基于HTTP隧道的端口映射;3.基于VPS的socks代理映射;4.基于HTTP隧道的socks代理映射;5.反向DMZ映射;
下面分别予以介绍。
该功能可以直接将目标内网中的某个正在监听的端口映射至VPS,由于是通过VPS中转,所以需要10.211.55.11这台靶机允许出网,以如下网络拓扑为例:
攻击者已在10.211.55.11上上传webshell,想要访问目标内网中10.211.55.9的3389端口,只需要在冰蝎中把10.211.55.9的3389端口转发至VPS(8.8.8.8)上即可,具体操作如下:
首先在vps上使用portmap或者lcx同时监听两个端口:
然后在冰蝎中填上对应的参数:
开启后,VPS上的2222端口会提示收到来自目标网络的链接:
然后链接VPS的3388端口,即可访问目标内网10.10.0.102的3389端口:
如果目标靶机不能出网,冰蝎同样可以复用HTTP端口进行端口映射,把目标端口映射至本机,如下图:
开启后,攻击者本机会开启一个2222端口,如下图:
直接连接127.0.0.1:2222端口即可连接10.211.55.9的3389端口。
上文都是基于单端口的映射,如果想要访问内网多台机器的多个服务,基于单端口的映射就会需要映射多次,比较麻烦。同样冰蝎提供了两种socks代理的映射。首先介绍基于VPS的socks代理映射,当然前提也是靶机能出网。还是以上文的网络拓扑为例:
首先明确一下目标:我想在10.211.55.11上开设一个socks5代理服务,由于代理服务开在目标内网,我还需要把代理服务端口映射至VPS(8.8.8.8)。
还是需要先在VPS上使用portmap做如下监听:
然后冰蝎做如下配置:
开启后,VPS的2222端口会收到来自靶机的连接,
这时候我们的VPS(8.8.8.8)已经在3388端口上开启了一个socks5的服务端口,然后本地使用socks5代理客户端做一下配置,此处我使用系统自带的proxychains做示例,配置如下:
这时候,通过proxychains即可访问到目标内网,比如我们想访问10.211.55.11的web服务,边可以直接proxychains curl http://10.211.55.11/test.txt:
当靶机无法外连时,就需要通过HTTP隧道把内网的socks服务端口转发出来,冰蝎做如下配置:
开启后,攻击者本机会监听2222端口,并在此端口上开启Socks5代理服务,修改proxychains的配置文件,设置socks服务器为127.0.0.1:2222:
使用proxychains访问10.211.55.9和10.211.55.11的web服务,如下:
反向DMZ映射是将攻击者本地网络(或者公网VPS)中的某个监听端口映射至目标网络中,适用于目标网络不出网,但是又需要目标网络回连的情况,此处列举如下四种场景:
1.已拿到10.211.55.11的webshell,最终目标为10.211.55.9,可以通过某漏洞实现在10.211.55.9上的RCE。10.211.55.11和10.211.55.9都不能出网,但是我又想使用CobaltStrike来操作这台机器,这时候就可以把CobaltStrike服务器(例如8.8.8.8)的监听端口(例如5538)映射至10.211.55.11上,然后CobaltStrike木马的回连地址设置为10.211.55.11:5538。木马运行后,会回连10.211.55.11:5538,冰蝎会把10.211.55.11:5538的流量转发至真正的CobaltStrike服务器(8.8.8.8)。
网络拓扑如下:
2. 攻击者机器处于内网,地址为192.168.0.1,CobaltStrike服务器部署在192.168.0.100。已拿到目标网络10.211.55.11的webshell,最终目标为10.211.55.9,可以通过某漏洞实现在10.211.55.9上的RCE。10.211.55.11和10.211.55.9都不能出网,但是我又想使用CobaltStrike来操作这台机器,这时候就可以把CobaltStrike服务器(例如192.168.0.100)的监听端口(例如5538)映射至10.211.55.11上,然后CobaltStrike木马的回连地址设置为10.211.55.11:5538。木马运行后,会回连10.211.55.11:5538,冰蝎会把10.211.55.11:5538的流量转发至真正的CobaltStrike服务器(192.168.0.100)。
网络拓扑如下:
3. 已拿到10.211.55.11的webshell,最终目标为10.211.55.9,10.211.55.11和10.211.55.9都不能出网,10.211.55.9存在ms17-010漏洞,漏洞exp需要反弹shell,这时候就可以在VPS(8.8.8.8)上监听4444端口,然后把4444端口映射至10.211.55.11:4444,然后ms17-010的exp回连地址设置为10.211.55.11:4444,即可让exp回连至8.8.8.8:4444。
4. 攻击者机器处于内网,地址为192.168.0.1,已拿到10.211.55.11的webshell,最终目标为10.211.55.9,10.211.55.11和10.211.55.9都不能出网,10.211.55.9存在ms17-010漏洞,漏洞exp需要反弹shell,这时候就可以在攻击者本地(192.168.0.1)上监听4444端口,然后把4444端口映射至10.211.55.11:4444,然后ms17-010的exp回连地址设置为10.211.55.11:4444,即可让exp回连至192.168.0.1:4444。
接下来我们以第1种场景为例,来做一下演示:
首先在VPS上启动CobaltStrike Server,如下图:
然后在冰蝎中做如下配置:
“监听IP地址中”填写CobaltStrike服务器的外网IP地址,开启。此时可以看到webshell所在机器已经开始监听5538端口:
然后我们配置一个cs木马,回连地址设置为10.211.55.11,生成artifact.exe,通过psexec在10.211.55.9上执行,成功上线:
整个过程中,10.211.55.9和10.211.55.11没有与外网新建TCP连接。
冰蝎在v1.0版本即提供了一键反弹shell和反弹meterpreter的功能,在v3.0中新增了一键反弹CobaltStrike。
冰蝎做如下配置:
IP地址中填入VPS公网地址,然后在VPS上nc监听9090端口(当然也可以使用msfconsole来代替nc,msfconsole更稳定一些,功能也更丰富):
当然这是目标能出网的情况下,如果目标不能出网是不是就不能反弹shell至公网VPS了呢?答案是也可以反弹。只需要勾选“目标不出网”复选框,即可:
冰蝎后台会通过HTTPS隧道技术将shell反弹至公网VPS:
反弹shell会话已经建立,可以看到10.211.55.11上并没有到VPS的网络连接:
当然如果你没有VPS,也可以直接将shell反弹至本地,冰蝎会通过复用HTTP信道将shell反弹至本地机器,IP地址只要填写127.0.0.1即可,如下:
来张动图:
当“IP地址”为127.0.0.1时,是否勾选“目标不出网”复选框没有区别。
当目标不出网时,可以降shell反弹至攻击者本机所在局域网中的其他机器,IP地址直接填内网地址(如192.168.0.100)即可,需要勾选“目标不出网”复选框。
Metepreter的反弹和Shell类似,此处不再赘述,参数配置如下,其中msfconsole中相关的命令冰蝎已在提示框中给出示例,建议直接复制,避免写错payload导致上线异常:
参数配置如下:
当目标不出网时,可以降Metepreter反弹至攻击者本机所在局域网中的其他机器,IP地址直接填内网地址(如192.168.0.100)即可,需要勾选“目标不出网”复选框。
冰蝎支持Java和Aspx版本的CobaltStrike一键上线功能,采用windows/beacon_https/reverse_https上线方式。因为冰蝎采用注入JVM进程方式来植入代码,如果需要退出CobaltStrike会话,需先将CobaltStrike会话迁移至其他进程再退出,避免JVM进程停止。同样,CobaltStrike的一键上线也提供了两种方式,目标出网的情况下,可以直接上线至公网VPS,目标不出网的情况下,可以上线至攻击者本机CS Server或者攻击者本地局域网中的CobaltStrike Server。
如需将目标上线至部署于VPS的CobaltStrike Server,“连接信息”中的“IP地址”直接填VPS的IP地址,如下:
成功上线:
如果CobaltStrike Server搭建在本机,直接在“连接信息”中的“IP地址”栏填入“127.0.0.1”即可上线至本地。
当目标不出网时,可以降CobaltStrike上线至攻击者本机所在局域网中的其他机器,IP地址直接填内网地址(如192.168.0.100)即可,需要勾选“目标不出网”复选框。
数据库管理属于常规功能,目前支持SQL Server、MySQL、Oracle,当服务器环境为Java或者C#时,如果缺少对应的数据库管理库,冰蝎会自动上传并加载对应的库文件。
另外,如果数据库连接密码中有特殊字符(如@符号),用URL编码一下即可(@编码之后为40%)。
冰蝎提供asp、c#、php、Java的自定义代码执行功能,文本框支持语法高亮,c#和Java会把输入的源代码自动编译并执行。
该模块正在进行不同环境的适配,预计在v3.0正式版中启用。
该模块正在进行不同环境的适配,预计在v3.0正式版中启用。
备忘录模块提供对当前shell的一些临时文本信息进行存储。直接输入内容即可,冰蝎会自动保存。
该模块展示冰蝎的更新日志、使用交流群二维码等,同时会不定期发布server端的一些免杀版本。
冰蝎采用基于Agent技术的Java内存马注入功能,目前支持Tomcat、Weblogic、Jboss。其中Tomcat和Jboss对内存马注入路径没有任何限制。Weblogic的内存马注入路径需要在真实存在的应用名称的路径下,比如http://xxx.com:7001/console/memshell,console即为应用名称不能直接注入到http://xxx.com:7001/memshell。
另外,冰蝎还提供了内存马防检测功能,该功能会阻止其他Agent注入进当前JVM进程。当然注入内存马的时候如果开启该功能,冰蝎后续也无法再次注入内存马。
最初,我只是重写了几个版本的一句话木马(因为在冰蝎之前没有真正实现eval效果的Java一句话木马),同时提出了一套理论,用来绕过流量型防护设备,顺便写了个demo用来验证上述理论的效果。所以冰蝎这个客户端只是理论的一个衍生品,不过后来用的小伙伴比较多,我就继续把这个客户端更新了下去,希望大家不要太关注工具本身,而是能更多的去在理论上做一些创新。最后祝大家五一玩的开心。