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值(在測試時我發現該值似乎是不會變化的,也就是說該值的計算沒有時間因子參與)。下面是分別通過nslookupping拼接的利用請求。
  nslookup拼接字符串利用:

  ping拼接字符串利用:

請求中的路徑問題

  windows的路徑處理問題,一些小細節:

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

其他

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,那么內網只能夠從內網其他機器打進去;而如果在公網,則容易被發現和攻擊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM