渗透基础——端口转发与代理

发布于 2024-09-26 06:18:13 字数 13031 浏览 15 评论 0

0x00 前言

在渗透测试中,经常会使用到端口转发和代理。

端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为。

实际应用中需要考虑两种情况:

  • Client->Transit server->Server:Client 能够正向连接 Transit server。Transit server 直接转发即可
  • Client<-Transit server->Server:Client 无法正向连接 Transit server,但 Transit server 能够反向连接 Client。

如果 Client 要对 Server 的多个端口进行扫描(或是多个 Server 的多个端口),逐个配置转发规则很不现实。

为了提高效率,这里可以使用代理,配置一次规则即可。

本文将对常用方法和工具进行整理总结,分门别类,区分正向和反向连接,区分转发和代理,分析其中的联系和区别,并给出应用场景,以作参考。

0x01 简介

本文将要介绍以下内容:

  • 针对 Windows 系统和 Linux 系统(Ubuntu 和 CentOS) 下的方法
  • 端口转发——正向连接的方法
  • 端口转发——反向连接的方法
  • 正向代理的方法
  • 反向代理的方法
  • 以上方法的应用场景

注:

Go 语言支持跨平台编译,所以本文更侧重于介绍 Go 语言实现的工具

0x02 端口转发——正向连接

0、应用场景

1.流量转发的跳板

用于隐藏真实的服务器地址

CIA Hive Beacon Infrastructure 中端口转发使用的是 Linux 的 iptables

如下图中的(2)

Alt text

注:

中转服务器的搭建可参考之前的文章 《CIA Hive Beacon Infrastructure 复现 1——使用 Apache mod_rewrite 实现 http 流量分发》《CIA Hive Beacon Infrastructure 复现 2——使用 Apache mod_rewrite 实现 https 流量分发》

2.建立通道

连接内网服务器的指定端口,Client 能够正向连接到 Transit server

1、测试环境

  • Client: 192.168.111.136
  • Server: 192.168.111.103

网络连接如下图

Alt text

使用 nc 测试网络连接

Server:

nc -lvp 4444

Client:

nc -vv 192.168.111.103 4444

Client 连接成功,如下图

Alt text

2、Windows 系统下的端口转发方法

Transit server: 192.168.111.132

网络连接如下图

Alt text

1、使用 netsh 实现端口转发(需要管理员权限)

(1) 添加转发规则

netsh interface portproxy add v4tov4 listenaddress=192.168.111.132 listenport=7777 connectaddress=192.168.111.103  connectport=4444

(2) 添加防火墙入站规则

netsh advfirewall firewall add rule name="transit test" protocol=TCP dir=in localport=7777 action=allow

注:

默认配置允许出站并阻挡入站通信,所以此处仅需要添加入站规则

测试网络连接:

Server:

nc -lvp 4444

Client:

nc -vv 192.168.111.132 7777

Client 连接成功

(3) 查看端口转发规则

netsh interface portproxy show all

(4) 清除端口转发规则

netsh interface portproxy delete v4tov4 listenaddress=192.168.111.132 listenport=7777

(5) 清除防火墙规则

netsh advfirewall firewall delete rule name="transit test"

2、使用 rinetd 实现端口转发

下载地址:https://boutell.com/rinetd/http/rinetd.zip

仅需要压缩包中的 rinetd.exe

(1) 为 rinetd.exe 添加防火墙规则(管理员权限)

netsh advfirewall firewall add rule name="transit test2" dir=in program="c:\test\rinetd.exe" action=allow

(2) 编写转发规则

echo 0.0.0.0 7777 192.168.111.103 4444 > conf.txt

(3) 启动

rinetd.exe -c c:\test\conf.txt

(4) 清除防火墙规则(管理员权限)

netsh advfirewall firewall delete rule name="transit test2" dir=in program="c:\test\rinetd.exe"

3、使用 HTran 实现端口转发

注:

lcx 同其功能类似

源码来源于互联网,我在 github 做了备份,备份地址:

..//test/master/HTran.cpp

(1) 为 HTran.exe 添加防火墙规则(管理员权限)

netsh advfirewall firewall add rule name="transit test3" dir=in program="c:\test\HTran.exe" action=allow

(2) 开启转发功能

HTran.exe -tran 7777 192.168.111.103 4444

(3) 清除防火墙规则(管理员权限)

netsh advfirewall firewall delete rule name="transit test3" dir=in program="c:\test\HTran.exe"

4、使用 EarthWorm 实现端口转发

下载地址:https://github.com/rootkiter/EarthWorm

(1) 为 ew_for_win_32.exe 添加防火墙规则(管理员权限)

netsh advfirewall firewall add rule name="transit test4" dir=in program="c:\test\ew_for_win_32.exe" action=allow

(2) 开启转发功能

ew_for_win_32.exe -s lcx_tran -l 7777 -f 192.168.111.103 -g 4444

(3) 清除防火墙规则(管理员权限)

netsh advfirewall firewall delete rule name="transit test4" dir=in program="c:\test\ew_for_win_32.exe"

3、Linux 系统(Ubuntu) 下的常用端口转发方法

Transit server: 192.168.111.102

网络连接如下图

Alt text

1、使用 iptables 实现端口转发

(1) 开启转发功能

echo 1 >/proc/sys/net/ipv4/ip_forward

注:该命令立即生效,重启失效

(2) 添加转发规则

iptables -t nat -A PREROUTING -p tcp -d 192.168.111.102 --dport 8888 -j DNAT --to-destination 192.168.111.103:4444
iptables -t nat -A POSTROUTING -p tcp -d 192.168.111.103 --dport 4444 -j SNAT --to-source 192.168.111.102

(3) 查看转发规则

iptables -L -t nat --line-number

如下图

Alt text

测试网络连接:

Server:

nc -lvp 4444

Client:

nc -vv 192.168.111.102 8888

Client 连接成功

(4) 清除规则

iptables -F -t nat

(5) 保存规则

iptables-save > /etc/iptables.up.rules

(6) 恢复规则

iptables-restore < /etc/iptables.up.rules

2、使用 rinetd 实现端口转发

(1) 编译安装

wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
tar zxvf rinetd.tar.gz
cd rinetd
make

(2) 编写转发规则

echo 0.0.0.0 8888 192.168.111.103 4444 > /etc/rinetd.conf

(3) 启动

./rinetd.exe

(4) 结束进程

pkill -9 rinetd

3、使用 HTran 实现端口转发

Linux 版 HTran(lcx) 的源码参考如下地址:https://github.com/windworst/LCX

需要使用 gcc 重新编译

(1) 开启转发功能

./lcx -tran 8888 192.168.111.103 4444

注:

go 语言编写的 HTran(lcx),优点是跨平台,支持 Windows 和 Linux

下载地址:https://github.com/cw1997/NATBypass

4、使用 EarthWorm 实现端口转发

下载地址:https://github.com/rootkiter/EarthWorm

未开源

(1) 开启转发功能

./ew_for_linux -s lcx_tran -l 8888 -f 192.168.111.103 -g 4444

4、Linux 系统(CentOS) 下的常用端口转发方法

Transit server: 192.168.111.105

网络连接如下图

Alt text

1、使用 iptables 实现端口转发

(1) 开启转发功能

echo 1 >/proc/sys/net/ipv4/ip_forward

注:

该命令立即生效,系统重启失效

(2) 安装 iptables

systemctl stop firewalld  
systemctl mask firewalld  
yum install iptables-services
systemctl enable iptables

(3) 添加转发规则

iptables -t nat -A PREROUTING -p tcp -d 192.168.111.105 --dport 8888 -j DNAT --to-destination 192.168.111.103:4444
iptables -t nat -A POSTROUTING -p tcp -d 192.168.111.103 --dport 4444 -j SNAT --to-source 192.168.111.105
service iptables save
service iptables restart
service iptables status

(4) 查看转发规则

iptables -L -t nat --line-number

如下图

Alt text

测试网络连接:

Server:

nc -lvp 4444

Client:

nc -vv 192.168.111.105 8888

Client 连接成功

(4) 清除规则

iptables -F -t nat

2、使用 rinetd 实现端口转发

同 Ubuntu,此处省略

3、使用 HTran 实现端口转发

同 Ubuntu,此处省略

4、使用 EarthWorm 实现端口转发

同 Ubuntu,此处省略

0x03 端口转发——反向连接

0、应用场景

1.建立通道

连接内网服务器的指定端口

测试环境如下图

Alt text

已有 Transit server 权限,想要访问 Server 的 3389 端口

Client 无法正向连接到 Transit server,但 Transit server 能够反向连接到 Client

iptables 和 rinetd 不再适用

1、使用 HTran

支持 Windows 和 Linux

Client:

HTran -listen 1111 2222

Transit server:

HTran -slave 1.1.1.1 1111 10.0.0.2 3389

Client:

nc -vv 127.0.0.1 2222

2、使用 EarthWorm

支持 Windows 和 Linux

Client:

ew -s lcx_listen -l 2222 -e 1111

Transit server:

ew -s lcx_slave -d 1.1.1.1 -e 1111 -f 10.0.0.2 -g 3389

Client:

nc -vv 127.0.0.1 2222

0x04 正向代理

0、应用场景

1.内网扫描

对内网的多个端口进行扫描

Client 能够正向连接到 Transit server

测试环境如下图

Alt text

要对 Server1、Server2 和 Server3 的端口进行扫描

Socks4 代理只支持 TCP 协议,而 Socks5 代理支持 TCP 协议和 UDP 协议,更加全面,所以本文只介绍实现 Socks5 代理的方法

1、使用 HTran

网上流传 HTran2.4 支持 Socks5 代理,但我未找到开源代码,此处作一个标记

2、使用 EarthWorm

Transit server:

ew –s ssocksd –l 8888

Client 使用代理工具连接 Transit server 的 8888 端口

3、使用 goproxy

go 实现的高性能 http,https,websocket,tcp,udp,socks5,ss 代理服务器,支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP 端口映射、SSH 中转

下载地址:https://github.com/snail007/goproxy/

Transit server:

proxy socks -t tcp -p "0.0.0.0:8888"

Client 使用代理工具连接 Transit server 的 8888 端口

4、自己使用 go 实现

Windows 系统安装 Go:https://golang.org/dl/

安装 git:http://git-scm.com/downloads

安装 go-socks5:

go get github.com/armon/go-socks5
go build

test.go:

package main
import socks5 "github.com/armon/go-socks5"
func main() {
        conf := &socks5.Config{}
        server, err := socks5.New(conf)
        if err != nil {
          panic(err)
        }
        if err := server.ListenAndServe("tcp", "0.0.0.0:8888"); err != nil {
          panic(err)
        }
}

编译

go build test.go

Client 使用代理工具连接 Transit server 的 8888 端口

5、使用 reGeorg

下载地址:https://github.com/NoneNotNull/reGeorg

针对 web 服务器,支持(aspx|ashx|jsp|php)

注:

  • Windows 下连接 socks 代理的工具可使用 sockscap64
  • Linux 下连接 socks 代理的工具可使用 proxychains

0x05 反向代理

0、应用场景

1.内网扫描

对内网的多个端口进行扫描

测试环境如下图

Alt text

Client 无法正向连接到 Transit server,但 Transit server 能够反向连接到 Client

要对 Server1、Server2 和 Server3 的端口进行扫描

1、使用 EarthWorm

Client:

ew -s rcsocks -l 2222 -e 1111

Transit server:

ew -s rssocks -d 1.1.1.1 -e 1111

使用代理工具连接 Client 的 2222 端口

2、使用 rsocks

下载地址:https://github.com/brimstone/rsocks

Go 语言编写,支持 Windows 和 Linux

Client:

rsocks -listen :1111 -socks 127.0.0.1:2222

Transit server:

rsocks -connect 1.1.1.1:1111

使用代理工具连接 Client 的 2222 端口

0x06 小结

本文对端口转发和代理的常用工具和方法进行整理总结,划分正向和反向连接两个类别,分别介绍了应用场景和常用工具,可作为实际应用的参考。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

歌入人心

暂无简介

文章
评论
27 人气
更多

推荐作者

hncloud

文章 0 评论 0

13545243122

文章 0 评论 0

探春

文章 0 评论 0

樱桃奶球

文章 0 评论 0

LR

文章 0 评论 0

J.smile

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文