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
下一篇 2015-03-23

相關推薦

  • keepalived實現高可用LVS

    前言 vrrp介紹:  vrrp(Virtual Router Redundancy Protocol)虛擬路由冗余協議;就是把多個路由器或多個網關設備加入到組中,然后在這一組中虛擬出一個路由器,此虛擬路由器有真是的IP和MAC地址,客戶端將網關指向此虛擬路由器的IP;客戶端向此虛擬路由器的IP和MAC地址發起請求時,由活動路由器負責響應;當活動路…

    Linux干貨 2015-07-23
  • 精解局域網訪問及共享(三)

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/155109    上一節中的2種情況都是默認的簡單共享,下面我們著重分析一下高級共享方式下的各種訪問情況。畢竟這種方式用的很普遍,而且在權限…

    Linux干貨 2015-03-25
  • 集中管理利器-puppet快速入門-中

    集中管理利器-puppet快速入門-中 6.    嘗試啟動master puppet 啟動master puppet,并確認8140端口已被監聽:  #puppet返回成功,但不一定能成功啟動,puppet這個功能希望能改進… 7.    目錄結構 /etc/puppet/  …

    Linux干貨 2015-05-04
  • mysql or條件可以使用索引而避免全表

    在某些情況下,or條件可以避免全表掃描的。 1 .where 語句里面如果帶有or條件, myisam表能用到索引, innodb不行。 1)myisam表:  CREATE TABLE IF NOT EXISTS `a` (   `id` int(1)&nb…

    Linux干貨 2015-04-13
  • OpenSSH的應用和利用OpenSSL創建私有CA簽證給httpd服務器開起https

    一、OpenSSH     OpenSSH與SSH協議是遠程登錄的首選連接工具。它加密所有流量,以消除竊聽,連接劫持和其它攻擊。OpenSSH常常被誤認以為與OpenSSL有關系,但實際上這兩個項目的有不同的目的,不同的發展團隊,名稱相近只是因為兩者有同樣的軟件發展目標──提供開放源代碼的加密通訊軟件。  &…

    Linux干貨 2016-04-24
  • VMware虛擬機三種連網原理簡介

    一、前言         虛擬機(Virtual Machine),在計算機科學中的體系結構里,是指一種特殊的軟件,可以在計算機平臺和終端用戶之間創建一種環境,而終端用戶則是基于這個軟件所創建的環境來操作系統軟件。虛擬機根據它們運用和與直接機器的相關性分為兩大類。系統虛擬機和程序虛擬機,系…

    Linux干貨 2015-08-03
欧美性久久久久