Trong quá trình kiểm thử, chúng ta có thể có quyền truy cập vào mạng của domain và thu được các tài khoản AD nhưng không có đủ quyền để tạo ra một máy ở trong domain để sử dụng các tài khoản đó. Trong trường hợp này, ta sẽ cần phải sử dụng các tài khoản trên một máy mà ta kiểm soát.
Cụ thể hơn, ta sẽ sử dụng chương trình runas để chèn các tài khoản AD vào trong bộ nhớ của máy hiện tại nhằm giả mạo các người dùng khác khi truy cập vào các tài nguyên của domain:
/netonly: giúp chạy một câu lệnh dưới dạng local user nhưng khi truy cập vào các tài nguyên của domain thì sử dụng tài khoản được chỉ định.
/user: username của tài khoản dùng để truy cập vào tài nguyên của domain.
cmd.exe: chương trình mà ta muốn thực thi khi tài khoản AD được chèn vào bộ nhớ. Chương trình này có thể là bất cứ thứ gì nhưng cmd.exe là an toàn nhất vì với nó ta có thể chạy bất kỳ chương trình nào khác mà ta muốn với tài khoản AD đã được chèn.
Tip
Chúng ta cần đảm bảo rằng CMD dùng để chạy runas.exe được chạy dưới quyền Administrator để token của Administrator được chèn vào trong CMD. Khi chúng ta chạy các công cụ cần quyền Administrator thì token được chèn vào sẽ được sử dụng. Việc này không giúp ta có được quyền quản trị ở trong domain nhưng đảm bảo các câu lệnh local có thể được thực thi dưới quyền của Administrator.
Ví dụ chúng ta đang đăng nhập bằng tài khoản của UserA mà muốn truy cập các tập tin của UserB ở trong cùng domain Domain thì có thể sử dụng như sau:
Khi sử dụng option /netonly, tài khoản AD sẽ không được xác thực với domain controller và nó sẽ chấp nhận bất kỳ mật khẩu nào. Do đó, chúng ta vẫn cần xác nhận rằng tài khoản mà ta sử dụng là đúng và được nạp lên thành công.
Để có thể xác nhận rằng mật khẩu là chính xác, ta có thể thực hiện việc liệt kê SYSVOL.
Mọi tài khoản AD, kể cả các tài khoản có quyền thấp, đều có thể đọc nội dung của thư mục SYSVOL. Thư mục này tồn tại trên tất cả các domain controller và là một thư mục chia sẻ chứa các Group Policy Objects (GPOs) cùng với các script liên quan đến domain. Nó là một thành phần quan trọng của AD vì nó chuyển giao các GPO đến tất cả các máy ở trong domain. Các máy khi nhận được các GPO thì sẽ áp dụng chúng.
za\maurice.palmer@THMJMP1 C:\Users\maurice.palmer>dir \\za.tryhackme.com\SYSVOL Volume in drive \\za.tryhackme.com\SYSVOL is Windows Volume Serial Number is 1634-22A9 Directory of \\za.tryhackme.com\SYSVOL02/24/2022 10:57 PM <DIR> .02/24/2022 10:57 PM <DIR> ..02/24/2022 10:57 PM <JUNCTION> za.tryhackme.com [C:\Windows\SYSVOL\domain] 0 File(s) 0 bytes 3 Dir(s) 51,590,586,368 bytes free
Sự khác nhau giữa dir \\za.tryhackme.com\SYSVOL và dir \\<DC IP>\SYSVOL là gì?
Khi sử dụng hostname (za.tryhackme.com) thì giao thức xác thực được sử dụng đầu tiên sẽ là Kerberos. Thay vào đó, nếu sử dụng địa chỉ IP thì chúng ta có thể chuyển giao thức xác thực thành NTLM. Việc sử dụng NTLM để xác thực có thể giúp tránh bị phát hiện bởi blue team vì họ thường giám sát các cuộc tấn công Over-Pass và Pass-The-Hash.
Enumeration Through Microsoft Management Console
Chúng ta có thể sử dụng chương trình Microsoft Management Console (MMC) để enumerate AD:
Note
Ta cần chạy MMC từ CMD mà đã có một tài khoản AD nào đó được chèn trong bộ nhớ (sử dụng runas.exe) bởi vì chúng ta không thể xác thực và enumerate AD với các tài khoản local.
Để có thể enumerate AD, cần cài đặt tính năng RSAT: Active Directory Domain Services and Lightweight Directory Tools thông qua mục Manage Optional Features của Apps & Features và thêm AD-RSAT snap-in vào MMC ở mục File → Add/Remove Snap-in.
Sử dụng MMC, chúng ta có thể xem các OU có trong AD, các user của các OU cũng như là các nhóm mà các user đó thuộc về. Ngoài ra, chúng ta cũng có thể sử dụng MMC để xem các máy tính có trong AD chẳng hạn như các server hoặc workstation.
Nhược điểm của MMC là ta cần phải có quyền RDP hoặc giao diện để thực hiện enumerate.
Enumeration Through Command Prompt
Trong trường hợp không có RDP và blue team giám sát việc sử dụng PowerShell thì chúng ta có thể sử dụng CMD với câu lệnh net.
Liệt kê tất cả các user của domain:
C:\>net user /domainThe request will be processed at a domain controller for domain za.tryhackme.comUser accounts for \\THMDC-------------------------------------------------------------------------------aaron.conway aaron.hancock aaron.harrisaaron.johnson aaron.lewis aaron.mooreaaron.patel aaron.smith abbie.joyceabbie.robertson abbie.taylor abbie.walkerabdul.akhtar abdul.bates abdul.holtabdul.jones abdul.wall abdul.westabdul.wilson abigail.cox abigail.cox1abigail.smith abigail.ward abigail.wheeler[....]The command completed successfully.
Truy vấn một user cụ thể:
za\elliott.allen@THMJMP1 C:\Users\elliott.allen>net user aaron.harris /domainThe request will be processed at a domain controller for domain za.tryhackme.com.User name aaron.harrisFull Name Aaron HarrisCommentUser's commentCountry/region code 000 (System Default)Account active YesAccount expires NeverPassword last set 2/24/2022 11:05:11 PMPassword expires NeverPassword changeable 2/24/2022 11:05:11 PMPassword required YesUser may change password YesWorkstations allowed AllLogon scriptUser profileHome directoryLast logon NeverLogon hours allowed AllLocal Group MembershipsGlobal Group memberships *Domain Users *Internet AccessThe command completed successfully.
Note
Nếu user là thành viên của tối đa 10 nhóm trở lại thì câu lệnh trên sẽ hiển thị các nhóm đó.
Truy vấn thông tin về user Guest:
za\elliott.allen@THMJMP1 C:\Users\elliott.allen>net user Guest /domainThe request will be processed at a domain controller for domain za.tryhackme.com.User name GuestFull NameComment Built-in account for guest access to the computer/domainUser's commentCountry/region code 000 (System Default)Account active NoAccount expires NeverPassword last set 9/29/2024 7:20:50 AMPassword expires NeverPassword changeable 9/29/2024 7:20:50 AMPassword required NoUser may change password YesWorkstations allowed AllLogon scriptUser profileHome directoryLast logon NeverLogon hours allowed AllLocal Group Memberships *GuestsGlobal Group memberships *Domain GuestsThe command completed successfully.
Truy vấn thông tin về nhóm “Tier 1 Admins”:
za\elliott.allen@THMJMP1 C:\Users\elliott.allen>net group "Tier 1 Admins" /domainThe request will be processed at a domain controller for domain za.tryhackme.com.Group name Tier 1 AdminsCommentMembers-------------------------------------------------------------------------------t1_arthur.tyler t1_gary.moss t1_henry.millert1_jill.wallis t1_joel.stephenson t1_marian.yatest1_rosie.bryantThe command completed successfully.
Chúng ta có thể xem password policy thông qua sub-option accounts của net:
za\elliott.allen@THMJMP1 C:\Users\elliott.allen>net accounts /domainThe request will be processed at a domain controller for domain za.tryhackme.com.Force user logoff how long after time expires?: NeverMinimum password age (days): 0Maximum password age (days): UnlimitedMinimum password length: 0Length of password history maintained: NoneLockout threshold: NeverLockout duration (minutes): 30Lockout observation window (minutes): 30Computer role: PRIMARYThe command completed successfully.
Một số nhược điểm của net:
Nó cần phải chạy ở trên một máy có trong domain (domain-joined machine). Nếu không, nó sẽ truy vấn ở trên domain WORKGROUP.
Đôi khi không hiện tất cả các thông tin.
Enumeration Through PowerShell
Sau khi cài đặt AD-RSAT snap-in1, PowerShell sẽ có thêm khoảng 50+ cmdlets dùng để enumerate AD.
Properties: các thuộc tính sẽ hiển thị. Giá trị * tương đương với việc hiển thị tất cả.
Server: dùng khi thực hiện enumerate ở trên một máy không phải là một domain-joined machine và cần chỉ định domain.
Note
Trong quá trình thực hiện lab ở trên Arch Linux, cần cài đặt phiên bản openssh-git 9.7.P1.r281.g67a115e7a-1 của OpenSSH để kết nối đến domain-joined machine thay vì sử dụng phiên bản openssh 9.8p1-1.
Việc sử dụng PowerShell có thể bị giám sát bởi blue team.
Chúng ta cần phải cài đặt AD-RSAT, vốn là một hành động có thể bị phát hiện, để enumerate bằng PowerShell.
Enumeration Through BloodHound
BloodHound là một công cụ cho phép trực quan hóa AD ở dạng đồ thị. Mỗi kết nối giữa các node là một bước khai thác khả dụng để có thể đạt được mục đích cuối cùng.
Tuy nhiên, BloodHound chỉ được dùng trong quá trình khai thác còn công cụ thực sự được dùng để enumerate là SharpHound. Có ba loại SharpHound:
Sharphound.ps1: ở dạng PowerShell script và thường được dùng với RAT (Remote Access Trojan) bởi vì nó có thể được nạp trực tiếp vào bộ nhớ nhằm tránh on-disk AV (các AV chỉ quét ở trên ổ cứng). Loại này đã bị ngừng phát triển.
Sharphound.exe: ở dạng tập tin thực thi.
AzureHound.ps1: dùng cho Azure.
Note
Phiên bản của SharpHound và BloodHound cần phải tương thích với nhau do một số phiên bản BloodHound không thể xử lý dữ liệu của SharpHound quá cũ.
Nếu chạy SharpHound ở trên một domain-joined machine thì có thể sẽ bị phát hiện bởi AV cũng như là blue team do nó tạo ra rất nhiều traffic và event. Thay vào đó, chúng ta sẽ cần phải tiêm credential vào bộ nhớ của một non-domain-joined machine thông qua chương trình runas.exe và trỏ SharpHound đến một AD mà ta cần enumerate. Ở trên non-domain-joined machine, chúng ta có thể vô hiệu hóa AV hoặc tạo ra các ngoại lệ cho các tập tin và thư mục để việc enumerate không bị phát hiện.
--CollectionMethods: loại enumerate, phổ biến nhất là Default hoặc All. Đồng thời, SharpHound cache thông tin nên chúng ta có thể sử dụng method là Session sau lần chạy đầu tiên để tăng tốc độ enumerate.
--Domain: chỉ định domain mà ta muốn enumerate.
--ExcludeDCs: không động đến các domain controller nhằm giảm khả năng gây ra các alert.
Lưu ý là phiên bản của Neo4j và BloodHound cũng cần phải tương thích.
Cấu trúc tổng quan của AD sẽ không thay đổi theo thời gian. Tuy nhiên, các session và LogOn event thì sẽ thay đổi. Để capture được những thông tin này, chúng ta cần chạy SharpHound theo một chu kỳ nhất định. Ví dụ, chúng ta có thể chạy SharpHound với method là All ở lần đầu tiên rồi chạy method Session ít nhất 2 lần một ngày. Thời gian tốt nhất để chạy là 10:00 giờ (khi user mới uống cà phê xong) và 14:00 giờ (khi user quay lại từ bữa trưa).
Ví dụ về kết quả chạy SharpHound lần thứ 2 sau khi đã có cache:
PS C:\Users\arthur.campbell\Documents> .\SharpHound.exe --CollectionMethods All --Domain za.tryhackme.com --ExcludeDCs2024-09-29T11:11:49.4072220+01:00|INFORMATION|Resolved Collection Methods: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote2024-09-29T11:11:49.4229125+01:00|INFORMATION|Initializing SharpHound at 11:11 AM on 9/29/20242024-09-29T11:11:50.1743745+01:00|INFORMATION|Loaded cache with stats: 2119 ID to type mappings. 2122 name to SID mappings. 0 machine sid mappings. 2 sid to domain mappings. 0 global catalog mappings.2024-09-29T11:11:50.1900139+01:00|INFORMATION|Flags: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote2024-09-29T11:11:50.4243788+01:00|INFORMATION|Beginning LDAP search for za.tryhackme.com2024-09-29T11:12:20.5387139+01:00|INFORMATION|Status: 0 objects finished (+0 0)/s -- Using 56 MB RAM2024-09-29T11:12:29.7141339+01:00|INFORMATION|Producer has finished, closing LDAP channel2024-09-29T11:12:29.7141339+01:00|INFORMATION|LDAP channel closed, waiting for consumers2024-09-29T11:12:38.4040067+01:00|INFORMATION|Consumers finished, closing output channelClosing writers2024-09-29T11:12:38.4508609+01:00|INFORMATION|Output channel closed, waiting for output task to complete2024-09-29T11:12:38.6540259+01:00|INFORMATION|Status: 2159 objects finished (+2159 44.97917)/s -- Using 59 MB RAM2024-09-29T11:12:38.6540259+01:00|INFORMATION|Enumeration finished in 00:00:48.23272562024-09-29T11:12:38.9821111+01:00|INFORMATION|SharpHound Enumeration Completed at 11:12 AM on 9/29/2024! Happy Graphing!
Additional Enumeration Techniques
Ngoài những cách trên thì còn có một số cách để enumerate:
LDAP enumeration: sử dụng bất kỳ AD credential pair nào để thực hiện các LDAP search query.
Việc chạy SharpHound sẽ tạo ra rất nhiều LogOn event và các event này thường gắn liền với một user account. Do đó, chúng ta có thể viết detection rule để phát hiện hành vi này nếu nó xuất phát từ duy nhất một user account.
Viết detection rule cho các công cụ mà cần phải được cài đặt mới có thể sử dụng chẳng hạn như SharpHound hoặc AD-RSAT.
Related
listfrom outgoing([[Enumerating Active Directory]])sort file.ctime asc