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 端口转发——正向连接

零、应用场景

1.流量转发的跳板

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

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

如下图中的(2)



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

2.建立通道

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

Client能够正向连接到Transit server

一、测试环境

· Client: 192.168.111.136

· Server: 192.168.111.103

网络连接如下图:



使用nc测试网络连接

Server:

Client:

Client连接成功,如下图:



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

· Transit server: 192.168.111.132

网络连接如下图:



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

(1)添加转发规则

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

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

测试网络连接:

Server:

Client:

Client连接成功

(3)查看端口转发规则

(4)清除端口转发规则

(5)清除防火墙规则

2、使用rinetd实现端口转发

仅需要压缩包中的rinetd.exe

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

(2)编写转发规则

(3)启动

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

3、使用HTran实现端口转发

注:lcx同其功能类似

源码来源于互联网,我在github做了备份,备份地址:https://raw.githubusercontent.com/3gstudent/test/master/HTran.cpp

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

(2)开启转发功能

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

4、使用EarthWorm实现端口转发

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

(2)开启转发功能

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

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

· Transit server: 192.168.111.102

网络连接如下图:



1、使用iptables实现端口转发

(1)开启转发功能

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

(2)添加转发规则

(3)查看转发规则

如下图:



测试网络连接:

Server:

Client:

Client连接成功

(4)清除规则

(5)保存规则

(6)恢复规则

2、使用rinetd实现端口转发

(1)编译安装

(2)编写转发规则

(3)启动

(4)结束进程

3、使用HTran实现端口转发

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

需要使用gcc重新编译

(1)开启转发功能

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

4、使用EarthWorm实现端口转发

未开源

(1)开启转发功能

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

· Transit server: 192.168.111.105

网络连接如下图:



1、使用iptables实现端口转发

(1)开启转发功能

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

(2)安装iptables

(3)添加转发规则

(4)查看转发规则

如下图:



测试网络连接:

Server:

Client:

Client连接成功

(4)清除规则

2、使用rinetd实现端口转发

同Ubuntu,此处省略

3、使用HTran实现端口转发

同Ubuntu,此处省略

4、使用EarthWorm实现端口转发

同Ubuntu,此处省略

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

零、应用场景

1.建立通道

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

测试环境如下图:



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

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

iptables和rinetd不再适用

一、使用HTran

支持Windows和Linux

Client:

Transit server:

Client:

二、使用EarthWorm

支持Windows和Linux

Client:

Transit server:

Client:

0x04 正向代理

零、应用场景

1.内网扫描

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

Client能够正向连接到Transit server

测试环境如下图:



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

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

一、使用HTran

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

二、使用EarthWorm

Transit server:

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

三、使用goproxy

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

Transit server:

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

四、自己使用go实现

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

安装go-socks5:

test.go:

编译

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

五、使用reGeorg

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

注:

· Windows下连接socks代理的工具可使用sockscap64

· Linux下连接socks代理的工具可使用proxychains

0x05 反向代理

零、应用场景

1.内网扫描

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

测试环境如下图:



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

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

一、使用EarthWorm

Client:

Transit server:

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

二、使用rsocks

Go语言编写,支持Windows和Linux

Client:

Transit server:

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

0x06 小结

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