6

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

 3 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E5%9F%BA%E7%A1%80-%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E4%B8%8E%E4%BB%A3%E7%90%86/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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做了备份,备份地址:

https://raw.githubusercontent.com/3gstudent/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 小结


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


LEAVE A REPLY


Recommend

  • 34
    • www.freebuf.com 5 years ago
    • Cache

    内网渗透之端口转发与代理

    内网渗透之端口转发与代理

  • 26
    • www.tuicool.com 4 years ago
    • Cache

    SSH 端口转发教程

    SSH 端口转发教程 对于开发者来说,ssh 是一个必备的工具,用来登录服务器。 但是,它还有一大用途,就是作为加密通信的中介,充当两台服务器之间的通信加密跳板。这个功能称为端口转发(port forwarding),又称 ssh...

  • 50
    • www.tuicool.com 4 years ago
    • Cache

    charles 端口转发

    本文参考: charles 端口转发 端口转发 端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方...

  • 45
    • www.tuicool.com 4 years ago
    • Cache

    ssh端口转发的三种方式

    ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim)。有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场。 这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透,自然而然的想到了ssh的端口转...

  • 32
    • www.tlanyan.me 4 years ago
    • Cache

    ssh端口转发的三种方式 - tlanyan

    ssh端口转发的三种方式ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim)。有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场。这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透,自...

  • 21

    iox English | 中文 Tool for port forward & intranet proxy, just like lcx / ew , but bett...

  • 8

    0x00 前言 在上篇文章《渗透基础——端口转发与代理》提到了使用go语...

  • 7
    • abcdxyzk.github.io 3 years ago
    • Cache

    SSH端口转发 及 SSH代理

    SSH端口转发 及 SSH代理 2015-04-09 23:06:00 SSH端口转发 假设A、B为内网机,C为可登录公网机。那么A连B过程为: 假设 A、B、C 的ssh端口分别为portA、portB、portC。 1. 远程转发-R, 远...

  • 313

    Cloudflare 自定义源站端口、代理、端口转发 2019-03-25 约 1724 字 预计阅读 4 分钟   Cloudflare CDN 如何实现自定义源站端口、代理...

  • 2

    反向代理和端口转发以及靶场渗透 作者:美迪慧尔 2022-09-16 10:00:31 反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK