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:

  1. 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.
  2. 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.
  3. Default: là “Restricted” cho Windows client và “RemoteSigned” cho Windows server.
  4. 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ử.
  5. Restricted: cho phép thực thi các câu lệnh nhưng không cho phép thực thi script.
  6. 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.
  7. 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

list
from outgoing([[TryHackMe - PowerShell for Pentesters]])
sort file.ctime asc

Resources