顧名思義,這是一個 Windows 服務上面的漏洞。找到符合沒有加上引號的路徑很常見,但是真正能夠運用的機率不一定很多,因為前提是還需要注意相關路徑的寫入以及讀取權限。

  • 使用前提:檔案的路徑中有空格
  • 而且檔案沒有用引號括起來
  • 對於該檔案的前一個目錄具有寫入的權限

達成這兩個前提就有機會可以實作 Unquoted Services Path 相關的漏洞應用,但通常在 XP 以後的作業系統,預設普通使用者沒有 C:\ 的寫入權限,所以大多數狀況都不適用;而使用者也須要具備對於該 Services 的開啟與關閉權限。

  • 先備知識,觀察權限AccessChk
  • Services 權限accesschk.exe /accepteula -ucqv {services_name}
  • 資料夾權限- accesschk -uwdq "C:\Program Files (x86)"

觀察

wmic

  • 輸入 wmic service get name,pathname可以觀察到所有服務的名稱與檔案名稱
  • 輸入 wmic service get pathname,startname- 可以觀察到程式名稱與執行者名稱(startname)
  • 在此, startname 若為 LocalSystem 則代表有 system 權限

Winpeas

  • Winpeas 也有這種相關提示No quotes and Space detectd

實作與解釋

假設我們看到一個 Path 如下所述
C:\Program Files (x86)\meow\meowmeow 8.7\meoewww.exe

  • 我們可以發現路徑依序為Program Files (x86)Windows 會先嘗試解釋為 Program.exe 再解釋 Program Files (x86)``meow``meowmeow 8.7- Windows 會先嘗試解釋為 meowmeow.exe 再解釋 meowmeow 8.7``meoewww.exe

在這段路徑中,我們觀察路徑的空白會發現,有兩個可以利用的點,分別是路徑中有空白的Program Files (x86)以及meowmeow 8.7

透過截斷漏洞,我們假如建立一個檔案 C:\Program.exe,則會被優先執行。

而假如我們沒有C:\的寫入權限,而剛好有C:\Program Files (x86)\meow\ 的寫入權限的話,我們也可以對meowmeow 8.7這個檔案下手,建立一個C:\Program Files (x86)\meow\meowmeow.exe對系統進行誤導。

惡意檔案(如Revrese shell)在指定的位置與名稱建立完畢後,把服務重啟即可自動運行。

  • 關閉服務指令sc stop {services_name}開啟服務指令- sc start {services_name}

Reference