SSH會話劫持實現端口轉發

SSH會話劫持實現端口轉發

在進行滲透測試時,我們有時候會碰到搭建的測試環境、產品服務器、DMZ或者其他類似的機器群的情況,這時我們完全可以把它們看作跳板。這些系統被設計成對外交互的接口,這時候我們考慮對其他域里的用戶進行SSH會話劫持是個不錯的選擇。

那么如果你擁有了某一個跳板的控制權限,想要通過另一個域的用戶對遠程域進行訪問會怎么辦呢?當然,這時候你是沒有密碼、密鑰的,你不能拋棄二進制手段,而且SSH登錄使用的是雙因子認證。這下怎么辦?讓我們擼起袖子,練練命令行的功夫吧。

這篇文章涵蓋了SSH會話劫持的兩個方法。我們不需要認證,就可以直接實現動態端口轉發。當我們需要劫持會話時,需要完成以下兩個條件:

1.創建會話
2.存在一個活躍的SSH會話

我們的最終目標是通過另一個用戶的活躍會話,創建一個通道來獲取遠程SSH主機的訪問權限。

建立SSH會話劫持

為了劫持一個新近創建的會話,我們可以利用一項叫SSH復用的技術。黑客可以利用它在某用戶的原始socket里創建自己的會話,不用再次進行認證。這個名為ControlMaster的技術在OpenSSH4里面提出過,著名黑客H D Moore和Val Smith的文章里也曾提到。我本人在某次交流會中,也談到過這種攻擊手法–The Poor Man’s Rootkit。這篇文章里我講展示兩種強制建立master socket的方法,然后會演示如何將端口轉發給它們,第一個方法與ControlMaster有關

SSH客戶端上的ControlMaster配置:

打開ControlMaster之后,一個ssh連接在后臺運行,創建一個本地套接字(controlpath就是這個套接字的名字),以后本地再有
ssh需要連接到遠端同樣的主機的時候,直接使用這個已經創建好的socket文件進行連接,不用再創建連接了,同理,也不需要再進行用戶身份驗證。

最常見的對ControlMaster的socket的利用方式,就是對計算機里SSH客戶端的配置做特殊的調整。

SSH會話劫持實現端口轉發

這些配置能讓所有新的會話建立持久性的中間人master socket。我在控制socket的命令中,使用了%h代表目標主機,%h可以是任何字符串。

SSH會話劫持實現端口轉發

連接socket:
這個socket可以被用來在以后創建會話。即使原主人退出了會話,我們再次創建會話時也不需要認證。

SSH會話劫持實現端口轉發

增加一個動態通道:
你得知道,我們的最終目標是到達其他域。下面的命令能讓我們在現有的master socket之上,建立一個動態的通道。

SSH會話劫持實現端口轉發

結束后移除socket:
如果我們只是簡單地退出復用的會話,是不會關閉master socket的。想要真正地關閉它,你需要發送一個退出請求。

SSH會話劫持實現端口轉發

利用SHELL指令使用SSH ControlMaster

另一個利用這類劫持技術的方法,我以前并沒有公布過:master socket可以通過SSH客戶端選項的flag進行創建。因為這個原因,我們可以使用shell指令截獲某用戶的通過SSH客戶端發出的指令,從而注入我們自己的ControlMaster參數。

ssh () 
{ 
    /usr/bin/ssh -o "ControlMaster=auto" -o "ControlPath=/tmp/%r@%h:%p" -o "ControlPersist=yes" "$@";
}

這個截獲函數會創建相應的socket,與使用ssh_config創建的效果類似。

SSH會話劫持實現端口轉發

本次攻擊流程圖:

SSH會話劫持實現端口轉發

利用SSH ControlMaster的socket和相應的socket選項,我們可以劫持SSH會話,注入實現端口轉發。這些都不需要任何認證,現在讓我們繼續看另一個方法

劫持活躍SSH會話

普通用戶可以創建screen會話,使用screen非常簡易.只需在SHELL鍵入screen命令,便可打開一個screen session。然而隨便這樣創建出來的screen會話,用來控制通往其他有權限的機器的SSH連接,這是不太符合安全邏輯的。大多數用戶沒有意識到這些會話可能會被劫持,然后被用于端口轉發。
找出screen會話的方法:
尋找screen會話的方法,當然要在/var/run/screen目錄下翻找。當然,你也可以使用不完整的screen -r命令進行枚舉,猜出某個用戶來。


SSH會話劫持實現端口轉發

繞過screen pts/tty的限制:
取得另一個域用戶的screen會話權限沒有看起來那么簡單,不是su命令就行了,許多黑客就困在這里。我們使用su切換到與screen會話對應的用戶,可能會發現屏幕上出現以下的錯誤信息:

“Cannot open your terminal '/dev/pts/#' - please check.”
“Must be connected to a terminal.”

SSH會話劫持實現端口轉發

其中一個繞過該限制的方法,即用script的二進制流繞過su過的用戶會話。

SSH會話劫持實現端口轉發

增加一個通道:

SSH中有個很少被使用的特性,即轉義sub-shell。如果你正在使用其他手段來控制通往跳板的權限,你可以利用轉碼序列向其他用戶建立的會話中增加端口轉發。按下ctrl+c回退到SSH的sub-shell,然后輸入-D:<port>會增加一個動態端口轉發。想要移除這個端口轉發,可以在輸入-KD:<port>后,再按下ctrl+c。

SSH會話劫持實現端口轉發

如果你正在使用的是原始shell里的SSH,上面給的建議不會對你有用。這是因為你的SSH客戶端在初始就會捕獲轉義字符。但是別擔心,我會教你如何繞過它。
使用screen填充創建通道:
screen有一個特性,它允許你向輸入隊列里填充一個緩沖區的內容。這里填充的文本會被認為是screen內部輸入的。所以我們可以通過它繞過外部SSH會話,輸入轉義字符。

SSH會話劫持實現端口轉發

SSH會話劫持實現端口轉發

在你小心進行填充的需要注意的是,填充的文本在screen會話回退時是可見的,但你可以通過改變回退的長度來阻止它出現。只要你把回退值改為0行,就可以清空screen,將其設置回原:

screen -S 18323.my_ssh_session -X scrollback 0
screen -S 18323.my_ssh_session -p 0 -X stuff $'~C'
screen -S 18323.my_ssh_session -p 0 -X stuff $'-D:9090\nclear\n'
screen -S 18323.my_ssh_session -X scrollback 15000

下面是一個screen會話劫持攻擊的流程圖:

SSH會話劫持實現端口轉發

解決了SSH轉義問題并利用screen的填充特性,我們才能劫持建立好的會話,并且注入產生新的通道!
通往遠程域的通道:
最后一步是綁定一個本地端口,用來連接我們在hop_1注入的通道?,F在我們就完全掌控了一個動態的通道,通往遠程域不需要認證喔。

SSH會話劫持實現端口轉發

[參考來源0xthem,由FreeBuf小編dawner翻譯整理,轉載請注明來自FreeBuf黑客與極客(FreeBuf.COM)]

原創文章,作者:stanley,如若轉載,請注明出處:http://www.www58058.com/1362

(1)
stanleystanley
上一篇 2015-03-23 15:49
下一篇 2015-03-23 17:02

相關推薦

  • 在虛擬機上使用CentOS6的兩個iso文件創建本地yum倉庫和http倉庫

    yum客戶端和服務器端都是本虛擬機 一、創建本地磁盤訪問的yum倉庫 條件和要求: a.guest虛擬機需要添加2個光驅,分別裝載CentOS6.4發行版的DVD1和DVD2 b.DVD1和DVD2的掛載目錄分別是:/media/cdrom/下的os和extras,并設置開機掛載 c.使用CentOS-Media.repo作為yum客戶端配置文件,將其他re…

    Linux干貨 2015-09-22
  • corosync + pacemaker + iscsi實現高可用mysql (上)

    一、實驗圖   二、準備實驗環境:  1)確保sql服務器之間可以基于主機名通信 [root@SQL1 ~]# vim /etc/hosts 172.16.2.13  SQL1.linux.com  SQL1 172.16.2.14  SQL2.li…

    Linux干貨 2015-07-09
  • 第七周作業

    第七周 1,創建一個10G分區,并格式化為ext4文件系統;(1) 要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl;(2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@www ~]# fdisk /dev/sda <————-fd…

    Linux干貨 2017-09-03
  • 二叉樹的應用詳解 – 數據結構

    概述: 平衡樹——特點:所有結點左右子樹深度差≤1 排序樹——特點:所有結點“左小右大字典樹——由字符串構成的二叉排序樹判定樹——特點:分支查找樹(例如12個球如何只稱3次便分出輕重)帶權樹——特點:路徑帶權值(例如長度) 最優樹——是帶權路徑長度最短的樹,又稱 Huffman樹,用途之一是通信中的壓縮編碼。 1. 二叉排序樹(二叉查找樹 Bina…

    Linux干貨 2015-04-07
  • Linux系統啟動流程

    對于linux系統的初學者來說,理解并掌握linux系統啟動流程能夠使你夠深入的理解linux系統,還可以通過系統的啟動過程來分析問題解決問題。   Linux系統的啟動流程   關于linux系統的啟動流程可以分為以下步驟:     POST(加電自檢)–>加載BIOS(Basic Inp…

    Linux干貨 2015-05-18
  • PHP數組實際占用內存大小的分析

    我們在前面的php高效寫法提到,盡量不要復制變量,特別是數組。一般來說,PHP數組的內存利用率只有 1/10, 也就是說,一個在C語言里面100M 內存的數組,在PHP里面就要1G。下面我們可以粗略的估算PHP數組占用內存的大小,首先我們測試1000個元素的整數占用的內存: <?php      &nb…

    系統運維 2015-05-28
欧美性久久久久