Windows User Privileges

Cơ bản Windows Privilege

Về cơ bản cơ chế kiểm soát quyền trong windows sẽ như hình sau

Mỗi security principal trong windows đều sẽ có 1 SID, khi 1 subject (ví dụ user) muốn truy cập một object nào đó (ví dụ file) thì subject sẽ cung cấp Access Token (bao gồm Usersid, groupsid, priv, và một số thông tin khác) hệ điều hành sẽ dùng Access Token để so sánh với ACEs trong object để quyết định xem subject này access hay denied

Enum

wmic qfe # check updates
wmic product get name # check app installed
query user # get user logged in
pipelist.exe /accepteula # list namepipe
gci \\.\pipe\ # list namepipe in powershell
accesschk.exe /accepteula \\.\Pipe\lsass -v # view namepipe permission

SeImpersonate and SeAssignPrimaryToken

SeImpersonate là một quyền mặc định enable đối với Local Admin và Local Service Account. Vai trò của priv này cho phép user có thể impersonate security context của user khác. Tính năng này nhằm hỗ trợ việc 1 user nào đó khi truy cập web hoặc db muốn truy cập tài nguyên của user đó, mà không muốn thêm nhiều quyền cho service account thì SeImpersonate được dùng để impersonate user đó và truy cập tài nguyên (SeAssignPrimaryToken cũng có tác dụng tương tự). Bởi vì điều này mà thường các user service như IIS hay MSSQL đều có priv này.

Để lợi dụng quyền này thì ta sẽ dùng các exploit liên quan đến Potato family

Tuy nhiên JuicyPotato sẽ không work với Windows Server 2019 và Windows 10 build 1809 trở lên. Ta có thể dùng PrintSpoofer RoguePotato để thay thế

Cụ thể cơ chế có thể tham khảo 2 blog sau:

Ngoài ra trong một số trường hợp, user service đã bị disable SeImpersonate thì ta vẫn có thể chạy script để enable nó lại.

Script enable: https://github.com/itm4n/FullPowers

Hoặc script này để enable all disable priv: https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1

SeDebugPrivilege

Đây là một quyền đặc biệt, dùng dể debug các process trong win, và thông thường chỉ Local Admin mới mặc định có.

Với quyền này ta có thể dump process bất kỳ, ví dụ dump lsass

procdump.exe -accepteula -ma lsass.exe lsass.dmp

Do đó ta cũng có thể chạy mimikatz với quyền này.

Ngoài ra ta cũng có thể lợi dụng quyền này để lên SYSTEM bằng cách spawn 1 process con với process SYSTEM (hoặc user bất kỳ nào khác nếu muốn LPE sang user đó). Nhờ vào SeDebugPrivilege ta khiến process con inherit toke từ process cha (lúc này là SYSTEM) từ đó ta spawn được process với quyền sysytem

Ta sẽ sử dụng script: https://github.com/decoder-it/psgetsystem

.\psgetsys.ps1; [MyProcess]::CreateProcessFromParent(<system_pid>,<command_to_execute>,"")

Ngoài ra ta cũng có thể dùng tool:

SeTakeOwnershipPrivilege

Đúng như tên gọi thì priv này cho phép ta take ownership của bất kỳ securable object nào như AD object, NTFS file/folder, service, process,…

Takeown 1 file bất kỳ

PS C:\htb> takeown /f 'C:\Department Shares\Private\IT\cred.txt'

Chỉnh ACl để tương tác với file

PS C:\htb> icacls 'C:\Department Shares\Private\IT\cred.txt' /grant htb-student:F

Last updated