Sunlogin RCE漏洞分析和使用
介紹
前兩天網上曝出了關於向日葵遠控工具(Sunlogin)Windows個人版的RCE漏洞POC。因為利用簡單並且網上出現了公開的自動化掃描腳本,所以測試的人很多,也出現了一些真實攻擊。漏洞的問題主要是出現在Sunlogin客戶端的幾個對外開放的介面中,現在我對其中一部分利用進行簡要的分析。
未授權認證
分析的向日葵客戶端版本為11.0.0.33162,當SunloginCLient.exe在Windows上執行時,會連接遠程Oray的伺服器,同時也會打開一個大於40000的埠監聽外部的連接訪問(具體是否從40000往上隨即開啟埠,這個沒有調試,網上是這麼說的,我們主要看的是發生利用的程式碼部分)。
對其中一部分介面,Sunlogin統一對其進行處理。

接著會執行至函數sub_140E21528,分別對不同介面進行不同的處理。在介面/cgi-bin/rpc的Handler處理函數中可以進行未授權認證。

獲取action參數值,如果值為verify-haras,即action=verify-haras,那麼可以在沒有識別碼和驗證碼的情況下認證成功。


成功後返回一個verify_string,作為之後再次訪問時Cookie欄位中使用的CID值。

RCE
漏洞發生在介面/check處,如下圖,當參數cmd的值以ping或者nslookup開頭時可以構造命令實現遠程命令執行利用。

發送請求時需要在請求頭中指定Cookie欄位中CID的值為之前/cgi-bin/rpc返回的verify_string值(在測試時我發現該值似乎是不會變化的,也就是說該值的計算沒有時間因子參與)。下面是分別通過nslookup和ping拼接的利用請求。
nslookup拼接字元串利用:

ping拼接字元串利用:

請求中的路徑問題
windows的路徑處理問題,一些小細節:
- 因為最終調用的是
CreateProcess,參數lpApplicationName固定為0,所以可執行文件需要從lpCommandLine參數中,以空格分隔的第一個字元串作為新起進程的啟動路徑。而windows又不會一級一級得驗證目錄的有效性,所以只要在ping/nslookup後不加空格並配合多個../和目標可執行文件的路徑,從而啟動任意目標進程,以空格分隔命令參數; - Cmd.exe路徑前面必須為反斜杠
"\\",而不能是斜杠"/",不然無法找到目標文件,powershell.exe則沒有這方面限制。究其原因是因為cmd中以斜杠"/"作為命令參數的標記使用,未免路徑斜杠和其混淆,便固定反斜杠作為路徑分隔符。如果使用了"/cmd.exe",會出現"cmd.exe /cmd.exe"的情況,/c作為參數指定後面的字元串作為命令,那麼md命令會創建.exe目錄,這就是為什麼有時候第二次執行會出現"子目錄或文件 .exe 已經存在"的原因;如果使用了/cmd,沒有後綴,那麼就是"命令語法錯誤"的回顯。 - 使用反斜杠時注意轉義字元,保險起見使用雙方斜杠。
其他
1. assist介面問題:
我參考的這篇分析中提到了介面/assist,但是沒利用成功並發表了疑問。

然後我嘗試了一下,確實不行,經過分析後判斷下來這個介面恐怕是沒法用的。在/assist這個介面會用到API CreateProcessAsUser,同樣lpApplicationName為0,由lpCommandLine空格分割後的第一個字元串指定執行文件路徑。
至於為什麼說這個介面沒法利用,是因為雖然可以通過fastcode指定參數值,並作為命令執行。但是並不和/check介面中的處理方式一樣是直接執行,/assist介面處理函數是取當前進程(即當前SunloginClient.exe實例)路徑,程式執行參數為"--mod=fastcode --fastcode=<fastcode傳入的參數>",複製當前進程令牌後作為新進程的令牌啟動。整個命令行尖括弧才是我們可控的,而由於啟動的進程已經固定不變了,為Sunloginclient.exe,後面所有字元串全部作為Sunloginclient.exe的參數,因此無法利用該介面指定其他命令。

像&、|、||、&&這些符號也就是cmd.exe等shell終端中能有命令的效果,其他軟體如Sunloginclient.exe不對其進行處理,因此不能用。
2. 其他介面:
比如/fastcode介面,無需傳入參數,可以直接獲取被控端的識別碼;其他還有比如/micro-live/enable、/micro-live/enable、/sunlogin-tools等,不過簡單地測試了一下,會出現初始化失敗的問題,可能需要登錄。
客戶端執行插件功能時,大多通過指定命令行新起一個進程實現。

3. 內網外網問題
因為需要直接訪問向日葵客戶端的ip,那麼內網只能夠從內網其他機器打進去;而如果在公網,則容易被發現和攻擊。

