當前位置:
首頁 > 新聞 > 滲透基礎——埠轉發與代理

滲透基礎——埠轉發與代理

0x00 前言

在滲透測試中,經常會使用到埠轉發和代理。

埠轉發是轉發一個網路埠從一個網路節點到另一個網路節點的行為。

實際應用中需要考慮兩種情況:

·Client->Transit server->Server:Client能夠正向連接Transit server。Transit server直接轉發即可

·ClientServer: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:

nc -lvp 4444

Client:

nc -vv 192.168.111.103 4444

Client連接成功,如下圖:

、Windows系統下的埠轉發方法

·Transit server: 192.168.111.132

網路連接如下圖:

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: est
inetd.exe" action=allow

(2)編寫轉發規則

echo 0.0.0.0 7777 192.168.111.103 4444 > conf.txt

(3)啟動

rinetd.exe -c c: estconf.txt

(4)清除防火牆規則(管理員許可權)

netsh advfirewall firewall delete rule name="transit test2" dir=in program="c: est
inetd.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: estHTran.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: estHTran.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: estew_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: estew_for_win_32.exe"

三、Linux系統(Ubuntu)下的常用埠轉發方法

·Transit server: 192.168.111.102

網路連接如下圖:

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:4444iptables -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

如下圖:

測試網路連接:

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

2、使用rinetd實現埠轉發

(1)編譯安裝

wget http://www.boutell.com/rinetd/http/rinetd.tar.gztar zxvf rinetd.tar.gzcd rinetdmake

(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

四、Linux系統(CentOS)下的常用埠轉發方法

·Transit server: 192.168.111.105

網路連接如下圖:

1、使用iptables實現埠轉發

(1)開啟轉發功能

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

註:該命令立即生效,系統重啟失效

(2)安裝iptables

systemctl stop firewalld systemctl mask firewalld yum install iptables-servicessystemctl 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:4444iptables -t nat -A POSTROUTING -p tcp -d 192.168.111.103 --dport 4444 -j SNAT --to-source 192.168.111.105service iptables saveservice iptables restartservice iptables status

(4)查看轉發規則

iptables -L -t nat --line-number

如下圖:

測試網路連接:

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 埠轉發——反向連接

零、應用場景

1.建立通道

連接內網伺服器的指定埠

測試環境如下圖:

已有Transit server許可權,想要訪問Server的3389埠

Client無法正向連接到Transit server,但Transit server能夠反向連接到Client

iptables和rinetd不再適用

一、使用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

二、使用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 正向代理

零、應用場景

1.內網掃描

對內網的多個埠進行掃描

Client能夠正向連接到Transit server

測試環境如下圖:

要對Server1、Server2和Server3的埠進行掃描

Socks4代理只支持TCP協議,而Socks5代理支持TCP協議和UDP協議,更加全面,所以本文只介紹實現Socks5代理的方法

一、使用HTran

網上流傳HTran2.4支持Socks5代理,但我未找到開源代碼,此處作一個標記

二、使用EarthWorm

Transit server:

ew –s ssocksd –l 8888

Client使用代理工具連接Transit server的8888埠

三、使用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埠

四、自己使用go實現

Windows系統安裝Go:https://golang.org/dl/

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

安裝go-socks5:

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

test.go:

package mainimport 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埠

五、使用reGeorg

下載地址:https://github.com/NoneNotNull/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:

ew -s rcsocks -l 2222 -e 1111

Transit server:

ew -s rssocks -d 1.1.1.1 -e 1111

使用代理工具連接Client的2222埠

二、使用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 小結

本文對埠轉發和代理的常用工具和方法進行整理總結,劃分正向和反向連接兩個類別,分別介紹了應用場景和常用工具,可作為實際應用的參考。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

如何搭建一個開源的蜜罐環境
如何讓macOS的用戶交互安全屏障瞬間變成「馬奇諾防線」(二)

TAG:嘶吼RoarTalk |