如何在MSF中高效的使用云函數
在攻防對抗過程中,使用云函數來隱藏C2是一種常見的手法,互聯網也有很多教程來指導如何配置,但目前公開的文章中都是介紹如何在CobaltStrike中使用云函數,還沒有文章介紹如何在metasploit-framework中使用。
本文詳細介紹在metasploit-framework中云函數的使用方法及相關技巧,希望通過本文能夠對紅隊同學在紅藍對抗過程中有所幫助。
01
原始配置方法
此處使用Viper的操作方法進行說明,在metasploit-framework中參考對應配置參數即可。
配置監聽(Handler)


- 一定要選擇windows/meterpreter_reverse_https類型的監聽,不能選擇windows/meterpreter/reverse_https類型監聽。
- windows/meterpreter/reverse_https需要網絡傳輸stager,stager內容在經過云函數的轉發過程中會進行編碼轉換,導致加載失敗,而windows/meterpreter_reverse_https已經將stager內置在exe文件中。
- LPORT盡量選擇443/8443等常用的端口,確保不會被屏蔽。
效果如下:



配置云函數
- 打開API網關頁面
- https://console.cloud.tencent.com/apigateway/service?rid=1
- 新建一個API網關

- 選擇公網類型


- 點擊新建的服務,進入配置界面



- 新建一個通用api,配置如下圖


- 請求方法選擇ANY是因為meterpreter使用GET請求獲取命令,POST請求回傳結果。


- 后端域名中填寫監聽的IP地址及端口,后端路徑填寫為/


- 響應結果中選擇BINARY類型,因為在使用meterpreter進行上傳下載文件時傳輸的是二進制文件
- 配置成功的效果如下圖


- 公網域名信息需要記錄下來,后續會用到
生成配套的載荷(Payload)
- 載荷按照如下配置,點擊生成exe

- metasploit-framework中配置方法


- LHOST填寫為云函數的域名
- LPORT固定填寫為443
- 如果在監聽(Handler)中配置了LURI及證書,這里需要和監聽配置的一樣
運行上線




原理解析
上文中使用云函數上線在原理上并不復雜,可以理解為將云函數作為https的反向代理使用。


02
對抗域名封禁
相比于CDN,域前置等老派隱藏C2的方法,云函數在方便性及速度上都有優勢,所以在最近幾次HW行動中很多紅隊人員都在使用,防守方對此也格外關注。
其中防守方最常見的方法就是在HW期間直接封禁類似*.apigw.tencentcs.com這種域名,禁止解析訪問。
或者設置對應告警,一旦紅隊人員使用云函數上線,防守方馬上就能定位到哪臺機器已經失陷,然后修復漏洞。
接下來介紹如何對抗藍隊的域名封禁。
獲取云函數網關IP
- 打開https://www.ping.cn/dns,將云函數域名輸入后查詢。

- 選擇一個云函數官方服務器的IP地址,這里選擇140.143.51.244
生成配套的載荷(Payload)
- 載荷按照如下配置,點擊生成exe



- metasploit-framework中配置方法




- LHOST填寫為140.143.51.244(云函數網關)
- HttpHostHeader填寫為云函數的域名
運行上線



原理解析
這種方式上線與原始配置方法的區別在于載荷(payload)并不會訪問域名*.apigw.tencentcs.com,也不會在目標網絡產生相關的DNS記錄,也就繞過了針對域名的封禁。
因為云函數網關在轉發https請求時是根據http消息頭中Host字段進行轉發,所以我們將云函數域名直接填寫在http消息頭的host字段中,然后將http請求通過IP地址方式直接發送到云函數網關,同樣可以達到反向代理的效果。
03
獲取真實IP
云函數的缺陷
在使用云函數隱藏C2時都會遇到一個問題,就是無法獲取到目標機的網絡出口IP地址。


上圖中session 3是直接上線時的效果,可以看到我們可以通過目標主機的互聯網出口IP進行地理位置定位。
session 1是使用云函數上線時的效果,只能獲取到云函數的網關IP。
如果在HW或紅隊評估過程中,紅隊人員是通過廣撒網釣魚的方式投遞載荷,C2服務可能會收到很多來自云沙箱的Session,因為Session的IP地址固定為云函數網關IP,紅隊人員就無法確定該Session是否有效。
獲取真實IP
互聯網有很多在線接口可以查詢自己的公網ip地址,比如https://ifconfig.io/ip

通過session訪問https://ifconfig.io/ip,我們就可以獲取到session真實的ip地址。
poweshell代碼
$WebRequest = [System.Net.WebRequest]::Create("http://ifconfig.io/ip")$WebRequest.Method = "GET"$WebRequest.ContentType = "application/json"$Response = $WebRequest.GetResponse()$ResponseStream = $Response.GetResponseStream()$ReadStream = New-Object System.IO.StreamReader $ResponseStream$Data = $ReadStream.ReadToEnd()Write-Host $Data
執行效果:


自動化通知
在攻防對抗中,如果使用魚叉釣魚的方式投遞載荷,紅隊人員想要在獲取到session后第一時間得到通知,然后判斷session是不是有效的,那自動化通知的方式就必不可少。
大致的流程如下:
- 配置云函數隱藏C2,確保自己不被溯源
- 獲取到session后自動獲取真實ip
- 將session的相關信息及獲取到的真實ip通過消息通知的方式發送到手機
我們來看一下最終效果:




04
結語
攻防對抗過程中很多紅隊技術并不復雜,但是在提升技術的可用性和工程化落地方面也是很有必要且很有挑戰的一件事。希望本文對各位紅隊同學在使用云函數時有所幫助。