4 Şubat 2021 Perşembe

TryHackMe Basic Pentesting Çözümü

TryHackMe'nin Basic Pentesting odası başlangıç seviyesi kullanıcılar için hazırlanmış.

Çözüme giderken aşağıdakilerin öğrenilmesi hedefleniyor:

  • Brute-force (Kabakuvvet saldırısı)
  • Hash parolasını kırmak
  • Servisler hakkında bilgi toplama
  • Linux Bilgi toplama

Başlamadan önce, openvpn bağlantısının yapılmış

Task 1

Deploy the machine and connect to our network

İlk olarak makinanın deploy edilmesi (yeşil düğme) ve TryHackMe network'e bağlanılması gerekiyor.

Deploy tuşuna basınca biraz bekliyoruz ve karşı makinaya ait IP adresi geliyor.

Buarada zaman zaman "bağlı mıyım?" diye şüpheye düşerseniz ifconfig komutu bu sorunun yanıtını veriyor. 3 IP adresi gelmesi gerekiyor: En üstte eth0 sizin IP adresiniz, ortada 127.0.0.1 (local) ve en altta çıkan tun0 ise TryHackMe'nin IP adresi.

TryHackMe ise deploy dedikten sonra bize saldırabileceğimiz makinanın IP adresini veriyor.  

Benim Basic Pentesting odasında kullanacağım IP adresi olarak 10.10.175.159 geldi.

Artık sorulara başlayabiliriz.

Soru 1: Find the services exposed by the machine

 
İlk yapmamız gereken hedef hakkında olabildiğince bilgi toplamak ve ondan sonra bir saldırı yüzeyi belirlemek. Bu zaten genel kural.
 
Soruda "find the services" denilmiş, eğer sadece servisler hakkında bilgi toplamak istiyorsak
nmap -sV 10.10.175.159
komutu yeterli olacaktır.  
 

 
Ben genellikle (yukarıdakine göre daha uzun sürmesine rağmen tek seferde çok bilgi almak için) -A komutu ile "all" yani tüm bilgileri istiyorum. Ayrıca -p- komutunu kullanarak normalde taranan "en sık kullanılan 1000 port" yerine mevcut tüm portların taranmasını ve son olarak -T4 ile tarama hızını belirtiyorum:
 
nmap -A -p- -T4  10.10.175.159

(çıktı biraz uzun olduğu için ekran görüntüsünü koymadım, soruda istenen servislerin görülmesiydi zaten.)

Ardından hazır elimiz nmap'e değmişken mevcut zafiyetlerin listelenmesi (vulnerability scan) için aşağıdaki komutu da çalıştırabiliriz, ne de olsa bilgi topluyoruz:

nmap --script=vuln 10.10.179.171 -oN vuln_scan.nmap

Yukarıdaki komut aynı zamanda bir sonraki soruda sorulan "hidden directory" konusunda da bilgi verebiliyor:




Zafiyet taramasından başka elle tutulur bir sonuç elde edemedim ancak olsun, denemek önemli.

Hala bilgi toplama evresinde olduğumuz için atlamadan yapılması gereken bir işimiz daha var; tarayıcıdan IP adresine gitmeyi denemek (ne çıkacağı belli olmuyor).

 




Tarayıcıdan da bir yere gidemedim. Sayfa bakımda veya yeni yapılıyor gibi duruyor ancak bu da ümit verici çünkü böyle durumlarda uygulama geliştirenlere ait notlar, yazılıp unutulmuş ya da öylece bırakılmış bilgilere erişmek mümkün olabiliyor.

Soru 2: What is the name of the hidden directory on the web server(enter name without/)? 

Hidden directory denilince akla gelen birkaç tool var: dirb, dirbuster, gobuster vb. Hangisini kullanmak istiyorsanız genel olarak aynı işleve sahip araçlar.

Bir üst soruda nmap taraması "Potentially interesting directory" : /development demişti zaten. Eğer denersek sorunun yanıtının da bu olduğunu görebiliriz ancak başka neler var diye yine de bir dirb çalıştıralım, komut gayet basit:

┌──(root💀sparta)-[/home/sinem]
└─# dirb http://10.10.175.159        



 Eğer gobuster çalıştırmak istenirse bunun için de aşağıdaki komut kullanılabilir:

gobuster dir -u http://10.10.175.159 -w /usr/share/wordlists/dirb/common.txt -o dirb_results.txt

(-u URL için, -w wordlist için, -o output yani çıktının yazılacağı yeri belirtmek için kullanılıyor. Ardından cat dirb_results.txt komutu ile sonuçlar görüntülenebilir.)

Yukarıdaki dirb sonuçlarından görülebileceği gibi 3 tane gizli dizin bilgisi geldi:
development, index.html 
ve server-status 

Sorunun yanıtı development ancak hepsini tarayıcıda denemekte fayda var.

http:10.10.175.159/development adresine tarayıcıdan gidildiğinde aşağıdaki görüntüye ulaşıyoruz:

 

 

İncelemek gereken iki farklı doküman daha çıktı: dev.txt ve ve j.txt.

dev.txt'ye bakalım:

 

İşe yarayabilecek neler var? SMB konfigüre edilmiş, Apache set-up tamamlanmış ve iki kullanıcımız var: K ve J

j.txt'ye bakalım:


Burada durum daha iyi zira J'nin parolasının çok kolay kırılabilen hash'li bir parolası olduğunu K'den öğrenmiş olduk. Eğer K'nın söylediğini yapıp parolasını hemen değiştirmediyse buradan yürüyebiliriz demektir.

Bu soru bitti, aradığımız dizin adının development olduğunu yazdık ve devam ediyoruz.

Soru 3: User brute-forcing to find the username & password 

 
Nmap çıktısında SMB (port 139 ve 445) açık olduğunu görmüştük. SMB hakkında daha geniş kapsamlı bilgi almak isterseniz burada anlatmıştım. Yazının içerisinde SMB bilgi toplama kısmına da yer vermiş ve ister nmap ister Enum4Linux araçlarını kullanabilmek için gerekli komutları da yazmıştım, işte şimdi lazım oldu :)

Aşağıdaki komutu kullanıyorum:

──(root💀sparta)-[/home/sinem]
└─# enum4linux -a 10.10.175.159

Users başlığı altında aradığım bilgi (K ve J kimdir?) geliyor:


Soru 4: What is the username?

Sorunun cevabını yukarıda bulduk, aslında ikisi de 3 harfli olduğundan her ikisi de olabilir ancak yazılması gereken (herhalde parolasının kolay kırıldığını daha önce tespit ettiğimiz için): jan

Soru 5: What is the password? 

Parolayı ele geçirebilmek için Hydra aracını kullanacağım. Komut ise aşağıdaki gibi:

hydra -l jan -P /usr/share/wordlists/rockyou.txt ssh://10.10.175.159

-l ile kullanıcı adını belirttim, -P ile kullanacağım wordlist'i belirttim, rockyou.txt kullanıyorum çünkü en sık kullanılan ve en çok işime yarayan wordlist bu ancak wordlists dizini altında yer alan farklı listeler de denenebilir. 
 
Eğer parolayı bulabilirse SSH ile bağlantı sağlayabileceğim.
 


Ve parola geliyor.. (Fakat ilgilenenlerin kendisi çözmek için bir sebebi olsun diye ben buraya yazmıyorum :))

Soru 6: What service do you use to access the server(answer in abbreviation in all caps)? 

Bu sorunun yanıtını da aslında bir üst soruda bulmuştuk: Sunucuya bağlanmak için kullanacağımız servisin adı SSH.
 
Jan'ın parolası ve aşağıdaki komutu kullanarak sunucuya bağlanıyorum:
 
ssh jan@10.10.175.159
 

 

Soru 7: Enumerate the machine to find any vectors for privilege escalation 

En sevmediğim kısma geldik: yetki yükseltme. 

Önce ssh ile açtığım bağlantıdan bir bakıyorum, neredeyim, buradan ulaşabildiğim neler var diye.
Bunun için ilk olarak bulunduğum dizini pwd komutu ile görüntülüyorum, ardından ls -la ile tüm dosyaları görmek istiyorum (ls yerine ls -la şeklinde kullanmaya alışmak gerekiyor ki gizlenmiş dosyalar da unutulmasın). Sonra /home dizinine geçiyorum ve aynısını burada da yapıyorum. Home dizini altında kay isimli bir dizinle daha karşılaşıyorum. 


 kay dizini altında karşıma bir sürü dosya çıkıyor:

 
Burada satır başlarında yazan yetkileri ("rwx - read, write, execute" gibi) okuyabilmek önemli. İlk üçünün user, ikinci üçlünün grup ve son üçlünün others (diğerleri) için yetkileri gösterdiğini biliyorum. 

Jan'ın yetkileri ile .ssh'a rwx yetkilerim olduğunu görüyorum ve dizine cd ile giriyorum:


Jan'ın parolasının private key'i id_rsa içerisinde, id_rsa.pub ise public anahtarı barındırıyor. 
 
Eğer bu private key, public key ve parola kırmak için gerekli diğer güzel bilgilere sahip değilseniz burada çok sık kullanmanız gerekebilecek bir araç olan John the Ripper hakkında oldukça açıklayıcı bir yazı var. Biraz Google araştırması ile farklı bir çok kaynağa erişmek de mümkün. 
 
Yukarıda linkini verdiğim yazının içerisinde SSH Keys başlığına geldiğimizde nasıl ilerlememiz gerektiğini de öğrenebiliyoruz.
 

 
 
Buraya kadar ki kısımdan şunu anlıyoruz: id_rsa içerisinde bulunan private key ile kıracağımız parola sayesinde kay kullanıcısına geçiş yapabiliriz. Yani soruda bizden istenen yetki yükseltme yolunu tespit ettik.

Soru 8: What is the name of the other user you found(all lower case)?

Bu sorunun cevabını çoktan bulmuştuk, hemen kay yazıp yolumuza devam edebiliriz.

Soru 9: If you have found another user, what can you do with this information? 

Bu bilgiyle ne yapabiliriz?  İlerleyen aşamalarda kullanabiliriz mesela.

Soru 10: What is the final password you obtain? 

John the Ripper kullanarak ssh dizini altında çıkan id_rsa'yi kıracağımız ve parolayı bulacağımız kısma geldik. 

Her şeyden önce bu işlemlere kendi makinamda devam edeceğim için root yetkileri ile açtığım terminalde ilerliyorum.

id_rsa dosyasını kendi makinama alabilmek için scp komutunu aşağıdaki şekilde kullanacağım:

(Fakat buarada TryHackMe sayfasındaki sürem dolduğu için makinayı yeniden deploy etmek zorunda kaldım ve ssh bağlantım kesildi, IP adresi de değişti, yeni IP adresi 10.10.55.151 oldu)
 
Yeniden bağlandım ve belirttiğim dizine id_rsa dosyası kopyalandı.
 
──(root💀sparta)-[~sinem/TryHackMe/BasicPentesting]
└─# scp jan@10.10.55.151:/home/kay/.ssh/id_rsa /home/sinem/TryHackMe/BasicPentesting
jan@10.10.55.151's password:
id_rsa                


(cat komutuyla id_rsa açıp içeriğin düzgün gelip gelmediğine de bakabilirsiniz.)

Şimdi elimdeki id_rsa'i JRP aracı ile kırmam lazım. 

Yukarıda okunması lazım dediğim yazıda diyordu ki ilk önce ssh2john kullanarak id_rsa'i id_rsa hash haline bir getirin sonra wordlist olarak rockyou seçip kırmayı deneyin:


Çünkü direkt olarak John'a id_rsa'i kır dersek kırmıyor.

┌──(root💀sparta)-[~sinem/TryHackMe/BasicPentesting]
└─# /usr/share/john/ssh2john.py id_rsa > id_rsa.hash 
 

Artık parolayı kırmayı deneyebiliriz:

Kay'in parolasını da aldık.

Bu defa Kay'e SSH ile bağlanmayı deniyoruz. Bunun için yazılması gereken komut aşağıdaki gibi:

jan@basic2:~$ ssh -i /home/kay/.ssh/id_rsa kay@10.10.55.151

Bağlantı kurduktan sonra cd ve ls -la komutlarıyla dosyaların arasında gezmek ve pass.bak dosyasını bulup cat komutu ile açarak son parolayı da bulup TryHackMe'ye yapıştırmak gerekiyor.




 

Hiç yorum yok:

Yorum Gönder

John the Ripper ile Şifre Kırmak

  JOHN THE RIPPER ARACIYLA ŞİFRE KIRMAK  John The Ripper, açık kaynak ve ücretsiz bir şifre kırma aracı. Her ne kadar Unix için çıkmış ols...