Intro
Khi thâm nhập vào các hệ thống Windows, chúng ta sẽ có nhu cầu chạy các PowerShell script để enumerate các attack surface. Đa số các script có sẵn chẳng hạn như PowerView
hoặc Nishang
đều bị phát hiện bởi các phần mềm antivirus. Khi đó, ta cần phải tự viết script để thực hiện những tác vụ cần thiết.
Manipulating Files
Note
Các câu lệnh bên dưới có thì bị trùng lặp với TryHackMe - Hacking with PowerShell.
Lệnh Start-Process
có thể được dùng để khởi động một tiến trình. Ví dụ:
Start-Process notepad.exe
Lệnh Get-Process
giúp liệt kê tất cả các tiến trình đang chạy. Chúng ta có thể sử dụng option -Name
để lọc ra các tiến trình có tên cụ thể. Ví dụ:
Get-Process -Name notepad
Đối với các output khó đọc thì có thể sử dụng lệnh Export-Csv
để xuất ra file CSV. Ví dụ:
Get-Process | Export-Csv running_proccesses.csv
Ngoài ra còn có cmdlet Output-File
dùng để lưu output vào một file nào đó:
Get-Process | Output-File running_proccesses.txt
Lệnh Get-Content
giúp xem nội dung của file tương tự như lệnh cat của Linux.
Để sao chép hoặc di chuyển file thì ta có thể dùng lệnh Copy-Item
hoặc Move-Item
. Ví dụ:
Copy-Item .\IP_addresses.txt Copy_IP_addresses.txt
Downloading Files
Chúng ta có thể sử dụng lệnh sau để download file:
(New-Object System.Net.WebClient).Downloadfile('FILE_URL', 'DOWNLOADED_FILE_NAME')
Một cách khác để tải file là dùng Invoke-WebRequest
:
Invoke-WebRequest "FILE_URL" -OutFile "DOWNLOADED_FILE_NAME"
ExecutionPolicy
Khi gặp lỗi liên quan đến chính sách thực thi (ExecutionPolicy
), chúng ta có thể dễ dàng bypass bởi vì đây không phải là một tính năng bảo mật. Chúng ta có thể lấy ra trạng thái hiện tại của ExecutionPolicy
thông qua cmdlet Get-ExecutionPolicy -list
. Các giá trị có thể có của ExecutionPolicy
:
- AllSigned: script có thể chạy nhưng cần phải được ký bởi một nhà phát hành tin cậy.
- Bypass: tất cả các script có thể chạy mà không có các thông báo lỗi hiện ra.
- Default: là “Restricted” cho Windows client và “RemoteSigned” cho Windows server.
- RemoteSigned: script có thể thể chạy và không yêu cầu các local script cần phải được ký điện tử.
- Restricted: cho phép thực thi các câu lệnh nhưng không cho phép thực thi script.
- Undefined: cho biết rằng không có chính sách cụ thể nào được áp dụng. Điều này có nghĩa là các chính sách mặc định sẽ được áp dụng.
- Unrestricted: đa số các script đều có thể chạy.
Cách phổ biến để bypass ExecutionPolicy
:
powershell -ExecutionPolicy Bypass -File .\meterpreter.ps1
Một cách khác:
Set-ExecutionPolicy Bypass -Scope Process
Tham số -Scope
chỉ thiết lập chính sách thực thi cho session PowerShell hiện tại. Khi session bị kết thúc thì chính sách thực thi sẽ trở về như cũ.
System Reconnaissance
Chúng ta có thể dùng cmdlet sau để tìm các bản vá đã được cài đặt trên host:
Get-Hotfix
Từ thông tin này, ta sẽ biết được host có cài thiếu bản vá nào hay không.
Dùng cmdlet Format-List
hoặc Format-Table
để định dạng output của câu lệnh. Thậm chí, ta cũng có thể dùng cmdlet Out-Gridview
để xem output thông qua UI:
Network Reconnaissance
Câu lệnh sau giúp ping một dải các địa chỉ IP:
1..15 | %{echo "10.0.2.$_"; ping -n 1 10.0.2.$_ | Select-String ttl}
Một cách tương tự dùng để scan port:
1..1024 | %{echo ((New-Object Net.Sockets.TcpClient).Connect("10.0.2.8", $_)) "Open port on - $_"} 2>$null
Chú ý rằng cú pháp 2>$null
được dùng để gửi tất cả các lỗi đến giá trị null nhằm làm sạch output.
Using PowerView
PowerView là một module hiệu quả để thu thập thông tin về một domain nào đó.
Note
Chú ý rằng ta có thể phải bypass
ExecutionPolicy
trước khi thực thi script.
Import module như sau:
Import-Module .\PowerView.ps1
Module này sẽ cung cấp cho chúng ta những câu lệnh cần thiết cho việc thu thập thông tin.
Get-NetDomainController
Dùng để thu thập các thông tin liên quan đến domain controller:
PS C:\Users\Walter\Desktop> Get-NetDomainController
Forest : WATCH.local
CurrentTime : 3/27/2024 8:06:39 AM
HighestCommittedUsn : 24639
OSVersion : Windows Server 2019 Datacenter
Roles : {SchemaRole, NamingRole, PdcRole, RidRole...}
Domain : WATCH.local
IPAddress : fe80::dd22:4a47:acd3:237c%5
SiteName : Default-First-Site-Name
SyncFromAllServersCallback :
InboundConnections : {}
OutboundConnections : {}
Name : WATCHMAN-DC.WATCH.local
Partitions : {DC=WATCH,DC=local, CN=Configuration,DC=WATCH,DC=local, CN=Schema,CN=Configuration,DC=WATCH,DC=local, DC=DomainDnsZones,DC=WATCH,DC=local...}
Có được IP của domain controller có thể giúp ta triển khai man-in-the-middle attack.
Get-NetUser
Cung cấp một danh sách các domain user. Khuyến khích sử dụng cùng với cmdlet Out-GridView
do output của nó khá khó đọc:
Chúng ta cũng có thể giới hạn lại một tiêu chỉ tìm kiếm nào đó:
PS C:\Users\Walter\Desktop> (Get-NetUser).name
ServerAdmin
Guest
Walter
sshd
krbtgt
Laurie Jupyter
John Osterman
Adrian Wait
Edward Bake
Sally Silk
Ursula Sand
Daniel Triberg
Get-NetComputer
Dùng để enumerate các hệ thống kết nối đến domain. Có thể sử dụng với option -Ping
để enumerate các hệ thống đang online:
PS C:\Users\Walter\Desktop> Get-NetComputer -Ping
pwdlastset : 3/27/2024 7:13:07 AM
logoncount : 16
serverreferencebl : CN=WATCHMAN-DC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=WATCH,DC=local
badpasswordtime : 1/1/1601 12:00:00 AM
distinguishedname : CN=WATCHMAN-DC,OU=Domain Controllers,DC=WATCH,DC=local
objectclass : {top, person, organizationalPerson, user...}
lastlogontimestamp : 3/27/2024 7:13:28 AM
name : WATCHMAN-DC
objectsid : S-1-5-21-1966530601-3185510712-10604624-1010
samaccountname : WATCHMAN-DC$
localpolicyflags : 0
codepage : 0
samaccounttype : MACHINE_ACCOUNT
whenchanged : 3/27/2024 7:13:28 AM
accountexpires : NEVER
countrycode : 0
operatingsystem : Windows Server 2019 Datacenter
instancetype : 4
msdfsr-computerreferencebl : CN=WATCHMAN-DC,CN=Topology,CN=Domain System Volume,CN=DFSR-GlobalSettings,CN=System,DC=WATCH,DC=local
objectguid : 1512346d-995b-428a-b8ec-1744489d4c1b
operatingsystemversion : 10.0 (17763)
lastlogoff : 1/1/1601 12:00:00 AM
objectcategory : CN=Computer,CN=Schema,CN=Configuration,DC=WATCH,DC=local
dscorepropagationdata : {5/15/2021 10:59:12 AM, 1/1/1601 12:00:01 AM}
serviceprincipalname : {Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/WATCHMAN-DC.WATCH.local, ldap/WATCHMAN-DC.WATCH.local/ForestDnsZones.WATCH.local,
ldap/WATCHMAN-DC.WATCH.local/DomainDnsZones.WATCH.local, TERMSRV/WATCHMAN-DC...}
usncreated : 12293
lastlogon : 3/27/2024 7:19:12 AM
badpwdcount : 0
cn : WATCHMAN-DC
useraccountcontrol : SERVER_TRUST_ACCOUNT, TRUSTED_FOR_DELEGATION
whencreated : 5/15/2021 10:59:11 AM
primarygroupid : 516
iscriticalsystemobject : True
msds-supportedencryptiontypes : 28
usnchanged : 24587
ridsetreferences : CN=RID Set,CN=WATCHMAN-DC,OU=Domain Controllers,DC=WATCH,DC=local
dnshostname : WATCHMAN-DC.WATCH.local
Get-NetGroup
Giúp enumerate các user group:
PS C:\Users\Walter\Desktop> Get-NetGroup
grouptype : CREATED_BY_SYSTEM, DOMAIN_LOCAL_SCOPE, SECURITY
admincount : 1
iscriticalsystemobject : True
samaccounttype : ALIAS_OBJECT
samaccountname : Administrators
whenchanged : 5/15/2021 11:15:36 AM
objectsid : S-1-5-32-544
objectclass : {top, group}
cn : Administrators
usnchanged : 12886
systemflags : -1946157056
name : Administrators
dscorepropagationdata : {5/15/2021 11:14:31 AM, 5/15/2021 10:59:12 AM, 1/1/1601 12:04:16 AM}
description : Administrators have complete and unrestricted access to the computer/domain
distinguishedname : CN=Administrators,CN=Builtin,DC=WATCH,DC=local
member : {CN=Ursula Sand,CN=Users,DC=WATCH,DC=local, CN=Sally Silk,CN=Users,DC=WATCH,DC=local, CN=Domain Admins,OU=Groups,DC=WATCH,DC=local, CN=Enterprise
Admins,OU=Groups,DC=WATCH,DC=local...}
usncreated : 8201
whencreated : 5/15/2021 10:57:51 AM
instancetype : 4
objectguid : 7fa2ce9c-8c2f-4d95-8f6b-4e9a6ce76fb6
objectcategory : CN=Group,CN=Schema,CN=Configuration,DC=WATCH,DC=local
grouptype : CREATED_BY_SYSTEM, DOMAIN_LOCAL_SCOPE, SECURITY
...
Cũng có thể dùng lệnh Get-NetGroupMember
để tìm các user thuộc về một group nào đó:
PS C:\Users\Walter\Desktop> Get-NetGroupMember "Domain Admins"
GroupDomain : WATCH.local
GroupName : Domain Admins
GroupDistinguishedName : CN=Domain Admins,OU=Groups,DC=WATCH,DC=local
MemberDomain : WATCH.local
MemberName : usand
MemberDistinguishedName : CN=Ursula Sand,CN=Users,DC=WATCH,DC=local
MemberObjectClass : user
MemberSID : S-1-5-21-1966530601-3185510712-10604624-1119
GroupDomain : WATCH.local
GroupName : Domain Admins
GroupDistinguishedName : CN=Domain Admins,OU=Groups,DC=WATCH,DC=local
MemberDomain : WATCH.local
MemberName : ssilk
MemberDistinguishedName : CN=Sally Silk,CN=Users,DC=WATCH,DC=local
MemberObjectClass : user
MemberSID : S-1-5-21-1966530601-3185510712-10604624-1118
GroupDomain : WATCH.local
GroupName : Domain Admins
GroupDistinguishedName : CN=Domain Admins,OU=Groups,DC=WATCH,DC=local
MemberDomain : WATCH.local
MemberName : ServerAdmin
MemberDistinguishedName : CN=ServerAdmin,CN=Users,DC=WATCH,DC=local
MemberObjectClass : user
MemberSID : S-1-5-21-1966530601-3185510712-10604624-500
Finding Shares
Câu lệnh Find-DomainShare
sẽ liệt kê các share khả dụng. Sử dụng option -CheckShareAccess
để giới hạn lại các only-readable share.
Enumerate Group Policy
Câu lệnh Get-NetGPO
giúp enumerate các group policy đang được áp dụng:
PS C:\Users\Walter\Desktop> Get-NetGPO
usncreated : 5672
systemflags : -1946157056
displayname : Default Domain Policy
gpcmachineextensionnames : [{827D319E-6EAC-11D2-A4EA-00C04F79F83A}{803E14A0-B4FB-11D0-A0D0-00A0C90F574B}]
whenchanged : 5/15/2021 10:57:51 AM
objectclass : {top, container, groupPolicyContainer}
gpcfunctionalityversion : 2
showinadvancedviewonly : True
usnchanged : 5672
dscorepropagationdata : {5/15/2021 10:59:12 AM, 1/1/1601 12:00:00 AM}
name : {31B2F340-016D-11D2-945F-00C04FB984F9}
flags : 0
cn : {31B2F340-016D-11D2-945F-00C04FB984F9}
iscriticalsystemobject : True
gpcfilesyspath : \\WATCH.local\sysvol\WATCH.local\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}
distinguishedname : CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=WATCH,DC=local
whencreated : 5/15/2021 10:57:51 AM
versionnumber : 1
instancetype : 4
objectguid : b080db6a-cc53-433c-ad25-ba365972371e
objectcategory : CN=Group-Policy-Container,CN=Schema,CN=Configuration,DC=WATCH,DC=local
usncreated : 5675
User Enumeration
Câu lệnh Find-LocalAdminAccess
giúp liệt kê các hệ thống trong domain mà ta có thể truy cập dưới danh nghĩa local administrator:
PS C:\Users\Walter\Desktop> Find-LocalAdminAccess
WATCHMAN-DC.WATCH.local
Exercises
One of the accounts has a special description; what is it?
(Get-NetUser).description
Đáp án: IDF-17828290
How many accounts are disabled?
(Get-NetUser -UACFilter ACCOUNTDISABLE).Count
Đáp án: 4
How many users are in the "domain admins" group?
(Get-NetGroupMember "Domain Admins").Count
Đáp án: 3
Which users are in the "domain admins" group? (Listed alphabetically, small, comma-separated, using space)
Get-NetGroupMember "Domain Admins" | Select-Object -Property MemberName | Sort-Object
Kết quả:
ServerAdmin,ssilk,usand
List shares; what is the name of the "interesting" share?
PS C:\Users\Walter\Desktop> Find-DomainShare Name Type Remark ComputerName ---- ---- ------ ------------ ADMIN$ 2147483648 Remote Admin WATCHMAN-DC.WATCH.local C$ 2147483648 Default share WATCHMAN-DC.WATCH.local IPC$ 2147483651 Remote IPC WATCHMAN-DC.WATCH.local NETLOGON 0 Logon server share WATCHMAN-DC.WATCH.local operationfiles 0 WATCHMAN-DC.WATCH.local SYSVOL 0 Logon server share WATCHMAN-DC.WATCH.local
Đáp án:
operationfiles
What is the name of the user-created Group Policy?
Hint: Something is disabled…
PS C:\Users\Walter\Desktop> Get-NetGPO ... usncreated : 12900 displayname : Disable WinDef gpcmachineextensionnames : [{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{D02B1F72-3407-48AE-BA88-E8213C6761F1}] whenchanged : 5/15/2021 11:21:46 AM objectclass : {top, container, groupPolicyContainer} gpcfunctionalityversion : 2 showinadvancedviewonly : True usnchanged : 12909 dscorepropagationdata : 1/1/1601 12:00:00 AM name : {B3BCB206-765F-437E-9826-7F77743EC6C2} flags : 0 cn : {B3BCB206-765F-437E-9826-7F77743EC6C2} gpcfilesyspath : \\WATCH.local\SysVol\WATCH.local\Policies\{B3BCB206-765F-437E-9826-7F77743EC6C2} distinguishedname : CN={B3BCB206-765F-437E-9826-7F77743EC6C2},CN=Policies,CN=System,DC=WATCH,DC=local whencreated : 5/15/2021 11:19:39 AM versionnumber : 1 instancetype : 4 objectguid : bd95654f-37c3-4003-83d4-da7a893eb989 objectcategory : CN=Group-Policy-Container,CN=Schema,CN=Configuration,DC=WATCH,DC=local
Đáp án:
Disable WinDef
What are the first names of users' whose accounts were disabled? (Sorted alphabetically, small, comma-separated, using space)
Get-NetUser -UACFilter ACCOUNTDISABLE | Select-Object -Property name
Đáp án:
Daniel,Ursula
Related
list
from outgoing([[TryHackMe - PowerShell for Pentesters]])
sort file.ctime asc