寫在前面
近期冰蠍更新了內網穿透模塊中的一些功能,有不少朋友不知道參數怎么填,希望能出一個使用指導手冊,就借這個機會寫一個“說明書”(文中有大量演示動圖,請耐心等待加載)。
基本信息
由於冰蠍采用了會話加密,所以客戶端首次和服務端通信會有一個協商的過程(v3.0之后的版本不存在密鑰協商過程),成功建立連接后,會把服務器側的一些基本信息,顯示在這個Tab頁。
命令執行
這里的命令執行提供非交互式的命令執行,常規功能,不再贅述。
虛擬終端
虛擬終端提供一個交互式的真實終端,相當於把服務器側的Shell給搬到了客戶端,在這個Shell里可以執行各種需要交互式的命令,如ssh、mysql:

也可以正常使用vi、vim等命令:

或者top命令:

當然,你也可以直接在里面使用python:

上面是linux環境,windows環境也一樣,可以直接使用python,也可以直接使用powershell,如下圖:

最后,說明一下,虛擬終端和命令執行不同的是,虛擬終端使用完畢需要點擊“停止”按鈕來關閉服務器側的shell進程。
文件管理
常規功能,不再展開描述。
內網穿透
內網穿透模塊目前提供了多個穿透方案:
- 基於VPS中轉的端口映射;
- 基於HTTP隧道的端口映射;
- 基於VPS的socks代理映射;
- 基於HTTP隧道的socks代理映射;
- 反向DMZ映射;
下面分別予以介紹。
基於VPS中轉的端口映射
該功能可以直接將目標內網中的某個正在監聽的端口映射至VPS,由於是通過VPS中轉,所以需要10.211.55.11這台靶機允許出網,以如下網絡拓撲為例:

攻擊者已在10.211.55.11上上傳webshell,想要訪問目標內網中10.211.55.9的3389端口,只需要在冰蠍中把10.211.55.9的3389端口轉發至VPS(8.8.8.8)上即可,具體操作如下:
首先在vps上使用portmap或者lcx同時監聽兩個端口:

然后在冰蠍中填上對應的參數:

開啟后,VPS上的2222端口會提示收到來自目標網絡的鏈接:

然后鏈接VPS的3388端口,即可訪問目標內網10.10.0.102的3389端口:

基於HTTP隧道的端口映射
如果目標靶機不能出網,冰蠍同樣可以復用HTTP端口進行端口映射,把目標端口映射至本機,如下圖:

開啟后,攻擊者本機會開啟一個2222端口,如下圖:

直接連接127.0.0.1:2222端口即可連接10.211.55.9的3389端口。
基於VPS的socks代理映射
上文都是基於單端口的映射,如果想要訪問內網多台機器的多個服務,基於單端口的映射就會需要映射多次,比較麻煩。同樣冰蠍提供了兩種socks代理的映射。首先介紹基於VPS的socks代理映射,當然前提也是靶機能出網。還是以上文的網絡拓撲為例:

首先明確一下目標:我想在10.211.55.11上開設一個socks5代理服務,由於代理服務開在目標內網,我還需要把代理服務端口映射至VPS(8.8.8.8)。
還是需要先在VPS上使用portmap做如下監聽:

然后冰蠍做如下配置:

開啟后,VPS的2222端口會收到來自靶機的連接,

這時候我們的VPS(8.8.8.8)已經在3388端口上開啟了一個socks5的服務端口,然后本地使用socks5代理客戶端做一下配置,此處我使用系統自帶的proxychains做示例,配置如下:

這時候,通過proxychains即可訪問到目標內網,比如我們想訪問10.211.55.11的web服務,邊可以直接proxychains curl http://10.211.55.11/test.txt:

基於HTTP隧道的socks代理映射
當靶機無法外連時,就需要通過HTTP隧道把內網的socks服務端口轉發出來,冰蠍做如下配置:

開啟后,攻擊者本機會監聽2222端口,並在此端口上開啟Socks5代理服務,修改proxychains的配置文件,設置socks服務器為127.0.0.1:2222:

使用proxychains訪問10.211.55.9和10.211.55.11的web服務,如下:

反向DMZ映射
反向DMZ映射是將攻擊者本地網絡(或者公網VPS)中的某個監聽端口映射至目標網絡中,適用於目標網絡不出網,但是又需要目標網絡回連的情況,此處列舉如下四種場景:
-
已拿到10.211.55.11的webshell,最終目標為10.211.55.9,可以通過某漏洞實現在10.211.55.9上的RCE。10.211.55.11和10.211.55.9都不能出網,但是我又想使用CobaltStrike來操作這台機器,這時候就可以把CobaltStrike服務器(例如8.8.8.8)的監聽端口(例如5538)映射至10.211.55.11上,然后CobaltStrike木馬的回連地址設置為10.211.55.11:5538。木馬運行后,會回連10.211.55.11:5538,冰蠍會把10.211.55.11:5538的流量轉發至真正的CobaltStrike服務器(8.8.8.8)。
網絡拓撲如下:

-
攻擊者機器處於內網,地址為192.168.0.1,CobaltStrike服務器部署在192.168.0.100。已拿到目標網絡10.211.55.11的webshell,最終目標為10.211.55.9,可以通過某漏洞實現在10.211.55.9上的RCE。10.211.55.11和10.211.55.9都不能出網,但是我又想使用CobaltStrike來操作這台機器,這時候就可以把CobaltStrike服務器(例如192.168.0.100)的監聽端口(例如5538)映射至10.211.55.11上,然后CobaltStrike木馬的回連地址設置為10.211.55.11:5538。木馬運行后,會回連10.211.55.11:5538,冰蠍會把10.211.55.11:5538的流量轉發至真正的CobaltStrike服務器(192.168.0.100)。
網絡拓撲如下:

-
已拿到10.211.55.11的webshell,最終目標為10.211.55.9,10.211.55.11和10.211.55.9都不能出網,10.211.55.9存在ms17-010漏洞,漏洞exp需要反彈shell,這時候就可以在VPS(8.8.8.8)上監聽4444端口,然后把4444端口映射至10.211.55.11:4444,然后ms17-010的exp回連地址設置為10.211.55.11:4444,即可讓exp回連至8.8.8.8:4444。
-
攻擊者機器處於內網,地址為192.168.0.1,已拿到10.211.55.11的webshell,最終目標為10.211.55.9,10.211.55.11和10.211.55.9都不能出網,10.211.55.9存在ms17-010漏洞,漏洞exp需要反彈shell,這時候就可以在攻擊者本地(192.168.0.1)上監聽4444端口,然后把4444端口映射至10.211.55.11:4444,然后ms17-010的exp回連地址設置為10.211.55.11:4444,即可讓exp回連至192.168.0.1:4444。
接下來我們以第1種場景為例,來做一下演示:
首先在VPS上啟動CobaltStrike Server,如下圖:

然后在冰蠍中做如下配置:

“監聽IP地址中”填寫CobaltStrike服務器的外網IP地址,開啟。此時可以看到webshell所在機器已經開始監聽5538端口:

然后我們配置一個cs木馬,回連地址設置為10.211.55.11,生成artifact.exe,通過psexec在10.211.55.9上執行,成功上線:


整個過程中,10.211.55.9和10.211.55.11沒有與外網新建TCP連接。
反彈Shell
冰蠍在v1.0版本即提供了一鍵反彈shell和反彈meterpreter的功能,在v3.0中新增了一鍵反彈CobaltStrike。
普通Shell
反彈至公網VPS
冰蠍做如下配置:

IP地址中填入VPS公網地址,然后在VPS上nc監聽9090端口(當然也可以使用msfconsole來代替nc,msfconsole更穩定一些,功能也更豐富):

當然這是目標能出網的情況下,如果目標不能出網是不是就不能反彈shell至公網VPS了呢?答案是也可以反彈。只需要勾選“目標不出網”復選框,即可:

冰蠍后台會通過HTTPS隧道技術將shell反彈至公網VPS:

反彈shell會話已經建立,可以看到10.211.55.11上並沒有到VPS的網絡連接:

反彈至本地
當然如果你沒有VPS,也可以直接將shell反彈至本地,冰蠍會通過復用HTTP信道將shell反彈至本地機器,IP地址只要填寫127.0.0.1即可,如下:

來張動圖:

當“IP地址”為127.0.0.1時,是否勾選“目標不出網”復選框沒有區別。
反彈至本地局域網
當目標不出網時,可以降shell反彈至攻擊者本機所在局域網中的其他機器,IP地址直接填內網地址(如192.168.0.100)即可,需要勾選“目標不出網”復選框。
Metepreter
反彈至公網VPS
Metepreter的反彈和Shell類似,此處不再贅述,參數配置如下,其中msfconsole中相關的命令冰蠍已在提示框中給出示例,建議直接復制,避免寫錯payload導致上線異常:

反彈至本地
參數配置如下:

反彈至本地局域網
當目標不出網時,可以降Metepreter反彈至攻擊者本機所在局域網中的其他機器,IP地址直接填內網地址(如192.168.0.100)即可,需要勾選“目標不出網”復選框。
CobaltStrike
冰蠍支持Java和Aspx版本的CobaltStrike一鍵上線功能,采用windows/beacon_https/reverse_https上線方式。 因為冰蠍采用注入JVM進程方式來植入代碼,如果需要退出CobaltStrike會話,需先將CobaltStrike會話遷移至其他進程再退出,避免JVM進程停止。同樣,CobaltStrike的一鍵上線也提供了兩種方式,目標出網的情況下,可以直接上線至公網VPS,目標不出網的情況下,可以上線至攻擊者本機CS Server或者攻擊者本地局域網中的CobaltStrike Server。
上線至公網VPS
如需將目標上線至部署於VPS的CobaltStrike Server,“連接信息”中的“IP地址”直接填VPS的IP地址,如下:

成功上線:

上線至本地
如果CobaltStrike Server搭建在本機,直接在“連接信息”中的“IP地址”欄填入“127.0.0.1”即可上線至本地。
上線至本地局域網
當目標不出網時,可以降CobaltStrike上線至攻擊者本機所在局域網中的其他機器,IP地址直接填內網地址(如192.168.0.100)即可,需要勾選“目標不出網”復選框。
數據庫管理
數據庫管理屬於常規功能,目前支持SQL Server、MySQL、Oracle,當服務器環境為Java或者C#時,如果缺少對應的數據庫管理庫,冰蠍會自動上傳並加載對應的庫文件。
另外,如果數據庫連接密碼中有特殊字符(如@符號),用URL編碼一下即可(@編碼之后為40%)。
自定義代碼
冰蠍提供asp、c#、php、Java的自定義代碼執行功能,文本框支持語法高亮,c#和Java會把輸入的源代碼自動編譯並執行。

平行空間
該模塊正在進行不同環境的適配,預計在v3.0正式版中啟用。
擴展功能
該模塊正在進行不同環境的適配,預計在v3.0正式版中啟用。
備忘錄
備忘錄模塊提供對當前shell的一些臨時文本信息進行存儲。直接輸入內容即可,冰蠍會自動保存。
更新信息
該模塊展示冰蠍的更新日志、使用交流群二維碼等,同時會不定期發布server端的一些免殺版本。
內存馬注入
冰蠍采用基於Agent技術的Java內存馬注入功能,目前支持Tomcat、Weblogic、Jboss。其中Tomcat和Jboss對內存馬注入路徑沒有任何限制。Weblogic的內存馬注入路徑需要在真實存在的應用名稱的路徑下,比如http://xxx.com:7001/console/memshell,console即為應用名稱不能直接注入到http://xxx.com:7001/memshell。
另外,冰蠍還提供了內存馬防檢測功能,該功能會阻止其他Agent注入進當前JVM進程。當然注入內存馬的時候如果開啟該功能,冰蠍后續也無法再次注入內存馬。
小結
最初,我只是重寫了幾個版本的一句話木馬(因為在冰蠍之前沒有真正實現eval效果的Java一句話木馬),同時提出了一套理論,用來繞過流量型防護設備,順便寫了個demo用來驗證上述理論的效果。所以冰蠍這個客戶端只是理論的一個衍生品,不過后來用的小伙伴比較多,我就繼續把這個客戶端更新了下去。因此我希望大家不要太關注工具本身,而是能更多的去在理論上做一些創新。
