TryHackMe Boiler CTF Write-Up Part-1

borekaenxd97

Blue Tim Emektar
24 Nis 2020
218
342
Ey Türk Gençliği!

Herkese merhabalar. Gelin bugün tryhackme de orta/medium seviye bir CTF çözelim.

Başlamadan önce değinmek istediğim, tryhackme de CTF çözerken işinize yarayacağını düşündüğüm bir taktik var.
CTF e başlamadan önce search kısmında bize bazı bilgiler veriyor.

Örneğin ftp, ssh, webmin

CTF odasına girdiğimizde Intermediate level CTF yazan kısımda da bazen bilgiler sağlanabiliyor. Bu yüzden burayı de ek olarak bakmakta, göz gezdirmekte fayda var.




İlk olarak Start Machine şeklinde odayı başlatalım, belirli bir süre (59 saniye kadar) bekleyip 2 numaradaki gibi ip adresimizi alalım.

Öncesinde veya sonrasında farketmeksizin, thm tarafından bize sağlanan ovpn dosyasını aşağıdaki komutla çalıştıralım.
wk600ry.jpg

sudo openvpn nick_name_iniz_.ovpn
10 lu bir ip adresini ip a komutu veya ifconfig nasıl isterseniz, kontrol ettikten sonra CTF e başlayabiliriz.

Bizi ilk olarak Intermediate level CTF. Just enumarate, you’ll get there şeklinde bir yazı karşılıyor. Anlamı; Orta seviye CTF. Sadece numaralandır, ulaşacaksın.
Nmap taramasıyla başlayalım fakat 2 adet aracı da çalıştıralım, sonuçlarını belirli bir süre sonra alacağımız için incelemesini ozaman yapalım.
Whatweb ve nikto.



-sV çalışan servis, protokol hakkında versiyonu bilgisini öğrenmek için kullanılır.
-sC -sV ile birlikte kullanılır. Açık portlar üzerinde scriptleri dener.
-T4 tarama hızıdır. Varsayılan olarak -T değeri 3 dür. Biz bu tarz ctflerde hızlı sonuç almak için 4 veya 5 kullanabiliriz.
-v verbose yani detay anlamına gelir. -vv ise daha detaylı bir çıktı almak istediğimizi belirttik.


21, 80 ve 10000 numaralı portlar açık.

wk600ry.jpg

Ayrıca 21. porttaki ftpnin versiyonu da vsftpd 3.0.3

Saldırgan makinemizde exploit bakalım ozaman.

3.0.3 e dair yalnızca dos exploiti var, şuanda da hizmet reddi bizim işimize yaramaz.


21 varsayılan olarak ftp portudur, bu CTF üzerinde de file transfer protocol (dosya aktarım protokolü) olarak kullanılmış.
80 varsayılan olarak http protokolüdür, bu CTF üzerinde de varsayılan olarak kullanılmış.
10000 htpp servisi varsayılan olarak webmin kullanılır, bir değişiklik yok burada da kendi portu üzerinde kullanılmış.


Enumerate/numaralandırma işlemini yaptık fakat ek olarak göstermek istediğim 1-2 şey var, dikkatinizi çekti mi bilmiyorum nmap taramamızda ftp-anon denenmiş ve ftp response code 230 yani başarılı giriş vermiş. Bu bizim ftpye Anonymous yani parola gerekmeden girebileceğimiz anlamına gelir.
wk600ry.jpg

Benden size bir tavsiye, ftp portunun açık olduğu CTF lerde ftp-anon scriptini denemeniz. Burada gözümüzden kaçabilirdi veya denememiş olabilirdi. Biz manuel olarak tekrardan deneyelim.

Nmap scriptleri şu dizinde bulunur.
/usr/share/nmap/scripts

wk600ry.jpg

Burada şöyle bir arama yapalım:

ls -al | grep -i ftp
Bu şu anlama gelir, scriptlerin olduğu dizinde ftp ile ilgili scriptleri bize göster. Zaten en sağ kısımda dosya ismi sütununda gördüğünüz gibi ftp kelimesini içeren dosyalar var ve bu dosyalardaki ftp kelimeleri kırmızı şekilde.

wk600ry.jpg

Nse nmap scripting engine anlamına gelir. Nmapin kendi içerisinde belirli başlı işleri gerçekleştirmek için barındırdığı scriptlerdir.
wk600ry.jpg

nmap –script=”ftp-anon” 10.10.200.169

41 saniye içerisinde basit bir nmap taraması attı, buna ek olarak da scriptimizi 21 portuna denedi ve belirttiğimiz satırı elde etmiş olduk.

Birde 80 portunu açık gördüğümüz için denemek istediğim bir script var.

nmap –script=”http-enum” 10.10.200.169 şeklinde çalıştıralım scripti


Yukarıda görüldüğü gibi 80 portuna, http protokolüne yönelik bir tarama gerçekleşti.

Robots.txt verdi, ozaman bu dizine bi gidip bakalım.



079 084 108 105 077 068 089 050 077 071 078 107 079 084 086 104 090 071 086 104 077 122 073 051 089 122 085 048 077 084 103 121 089 109 070 104 078 084 069 049 079 068 081 075

Bizi yukarıdaki gibi dizinler karşılıyor.
wk600ry.jpg

Dizinlerle bize bir şey anlatmak istemiş. Bu bir rabbit hole değil veya rabbit hole. Rabbit hole(tavşan deliği) şu anlama gelir. Ya baktığın yerde boşuna uğraşacaksın, zaman harcayacaksın yada sana tavşan deliği var diyip atlamanı sağlıyoruz ama bakmadan geçtiğin için bayrağı veya ipucunu kaçıracaksın.

Şimdi bu verilen sayısal değerlere bi detaylıca bakalım. 0 ile başlayan birçok değer var, ayrı ayrı verilmiş. Bunun bir (md,sha) gibi encrypt işlemi olmadığını, aynı zamanda base64 veya 32 96 gibi encode işlemi olmadığını görüyoruz.

ascii gibi duruyor ama garantiye alalım.

dcode.fr sitesindeki cipher identifier a gelip yazıyoruz ve

Bize muhtemel hash tiplerini çıkarıyor. En yüksek oranla da ascii code çıktı.

Şimdi ascii code tıklayalım

Bize OTliMDY2MGNkOTVhZGVhMzI3YzU0MTgyYmFhNTE1ODQK dec yani decimal şeklinde olduğunu belirtti, garantiye almak amacıyla bi cyberchefe atalım

Cyberchef de bu işaret magic anlamına gelir yani tipini otomatik olarak söyler. Tıkladığımızda ise bize base64 encode olduğunu söyledi. Terminalde bi base64 decode edelim

99b0660cd95adea327c54182baa51584

Bu hash tipi şimdi bilinen tiplerden olan md5, sha1, sha256 tipinde gözüktü. Karakter uzunluğunu kontrol edelim;

Bunu nano ile karakteröğren.txt şeklinde kaydedelim ve wc komutunun -m (karakter) parametresini çalıştıralım

Ne yazıyorsa -1 alınır. Yani 32 karakter. 32 karakter hash tiplerinden md5 var. Bunu md5 decrypt sitelerine birisine atalım

Buldu fakat kelime kidding yani bize verdiği sayısal ifadeyi çözdüğümüzde bir tavşan deliği olduğunu gördük.

Önceki taramadan da gördüğümüz It works yazısına

nasıl ulaştığını ise şu şekilde gösterelim. Tarayıcıda ip adresine gidelim ve kaynak kodlarını görelim veya öncesine view-source: yazarak sonuçları görelim

Gördüğünüz gibi http başlığı olan Apache2 Ubuntu Default Page: It works yazısını bize getiriyor.


wk600ry.jpg


Şimdi ftp ye anonymous kullanıcı olarak bağlanalım.

anonymous olarak girdik ve parola istemedi. 230 login successful response kodumuzu da aldık.

ftp sunucusunda izin verilen komutlar listesini görmek için help çalıştırdık.

Gizli bir dosyanın da olabileceğini düşünerek -a parametresini ekledik. Sonuç yukarıdaki gibi oldu, info.txt dosyası başına (.) koyularak unix sistemde gizlenmiş.

Bunu mget komutuyla indirelim.

Şimdi ftpden exit ile çıkalım.

Dosya ftp ye bağlanmadan önce hangi dizindeyseniz (pwd) oraya iner. Biz nmap scriptlerinin olduğu dizindeydik. Bu dosyası /tmp dizinine taşıdık mv komutu ile.
mv .info.txt /tmp , sonrasında ise gizliden şu komutla çıkardık. mv .info.txt info.txt

Şimdi görünür oldu dosya.

Dosyayı okuduk ve şöyle bir ifade verdi. Hash tipi alışılageldik tiplerden değil de rot13 gibi duruyor.

Sitelerden rot13 decode kullanabiliriz, saldırgan makinemizde alias, tr komutlarını kullanarak bunu decode edebiliriz.

Peki nasıl yapıcaz bunu ?

wk600ry.jpg


Ozaman ilk olarak rot13 cipherdan ve tr komutundan başlayalım.

ROT rotate anlamına gelir, 13 ise 13 kaydır. Yani alfabede verilen karakteri 13 kaydır.
tr komutu ise karakterleri değiştirme veya silmede kullanılır. Ama biz değiştirmede kullanacağız.


Yukarıdaki ‘A-Za-z’ alfabede A dan Z ye büyük ve küçük bütün karakterlerin değiştirilmesi gerektiğini belirttik. Peki ne ile ? Sonrasındaki ‘N-ZA-Mn-za-m’ ile. Yani şu anlama geliyor. 13 kaydırma işlemini tr komutu ile yaparak decode etmiş olduk. Gördüğünüz gibi ifade decode edildi ve yazı karışımıza çıktı. Anlamı ise sadece bulabileceğini merak ettim. Hatırla: numaralandırma anahtardır. Yani bir
rabbit hole ile karşılaşmış olduk.

Peki bunu alias komutu ile nasıl kullanabilirdik. Alias, herhangi bir komutu başka basit bir kelimeye tanımlayarak bizi karmaşık işlemlerden kurtarmaya yarar. Ne diyorum görelim:

Rot13 decode işlemini rot13kullan kelimesine tanımladık alias vasıtasıyla

Sonrasında ise tr komutu, değiştirilmek istenen alfabe, değiştirilen alfabe değerlerini tek tek yazmak yerine rot13kullan dedik ve decode ettik.

Alias kullanırken tırnak işaretlerine dikkat edelim.


c3m4idf.jpg


Bu süreçte whatweb ve nikto taramalarımızın bittiğini görüyoruz.

Whatweb -a 4 agresif tarama tipi ve seviyesini belirtir. Biz burada 4 verdik

http://10.10.200.169 [200 OK] Apache[2.4.18], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.200.169], Matomo, Title[Apache2 Ubuntu Default Page: It works]

Bize sitenin reponse kodu olan 200ü, Apache kullanıdığını ve versiyonunu, httpserverin Ubuntu linux olduğunu, ip adresin http title değerini verdi.


Nikto ile -host belirttik ve ip adresini verdik.

Sunucunun ne kullandığını ve versiyonunu. İzin verilen http metodlarını vesaire verdi.

wk600ry.jpg

Soru1-) File extension after anon login : anon (ftp Anonymous) girişinden sonra dosya uzantısı nedir?

Cevap: txt (.info.txt dosyamız)
wk600ry.jpg

Soru2-) What is on the highest port ? : en yüksek portta ne çalışıyor.
En yüksek portta 10.000 var ve webmin çalışıyor ama bayrağı kabul etmedi. O yüzden bizde nmap içerisinde tüm portları içeren -p 1-65535 veya -p- parametreleriyle tüm portların tarandığı bi tarama gerçekleştirelim.
Çünkü öncesinde çalıştırdığımız en yaygın 1000 portu taradı (ilk 1000 değil) bu yüzden en yüksek portun ne olduğunu ve ne çalıştığını bulamadık.

Yukarıdaki taramayı çalıştıralım ve bekleyelim (biraz zaman alıcı bir tarama -T5 çalıştırmamıza rağmen)

55007 portun açık olduğunu, ssh servisini ve versiyonunu görüyoruz.

Cevap: ssh
wk600ry.jpg

Soru3-) What's running on port 10000 ? : 10.000 portta ne çalışıyor ?

Yukarıdaki çıktılarda 10.000 portta http webmin servisinin çalıştığını gördük.

Cevap: webmin
wk600ry.jpg

Soru4-) Can you exploit the service running on that port? (yay/nay answer) : O portta çalışan servisi sömürebilir miyiz ?

Cevap: nay
wk600ry.jpg

Soru5-) What's CMS can you access? : Erişilen CMS nedir ?

Şimdi ise webi kontrol edelim.

Bize böyle bir sayfa verdi. Ozaman bi dizin keşfi yapalım.

(Burada çeşitli araçlar kullanılabilir. Ben dirb, gobuster, ffuf arasından ffuf kullanacağım. (Bununla ilgili bir doküman hazırladım, hem araçların kullanımı hem hızlarının farkı açısından. Eğer isterseniz iletişime geçin ve bunu sizinle paylaşayım.)

-u ile ip adresimizi ve sonrasında FUZZ işleminin yapılacağı yeri belirtiyoruz.
-w ile wordlistimizi belirtiyoruz

20.476 kelimelik, 163kilobyte büyüklüğündeki /usr/share/wordlists/SecLists/Discovery/Web-Content dizinindeki big.txt dosyasını kullandım ben.
Dizin taramamız bitmiş ve

Elde ettiği sonuçlar yukarıdaki gibi olmuş.

Burada dikkatimizi joomla kelimesi çekiyor. Bu bir CMS dir (içerik yönetim sistemi – content management system). Bi kontrol edelim.


Bizi böyle bir sayfa karşıladı.

Cevap: joomla
wk600ry.jpg

Soru6-) Keep enumerating, you'll know when you find it. : Numaralandırmaya devam et, bulduğunda haberin olacak diyor.
wk600ry.jpg

Soru7-) The interesting file name in the folder ? : Dosyadaki ilginç isimli dosyanın adı nedir ?

Burada herhangi bir gizli string bulamadık fakat hem aşağıdaki gibi bir ifade bulduk hemde 6. sorudaki numaralandırmaya devam et yazısından yola çıkarsak:


Her sitenin 2 bölümü vardır. Ozaman 1 dizin keşfi daha atalım, bakalım joomla dizini altında neler varmış.

Bu arada joomla dizin keşfi yapılırken biz kaliye varsayılan olarak gelen joomscan aracını bi çalıştıralım.


wk600ry.jpg

joomscan -u http://10.10.200.69/joomla
wk600ry.jpg

Taramamız bittikten sonra bize sonuçları reports dizininde veriyor. İstersek tarayıcıda, istersek terminal ekranında txt olarak görüntüleyebiliyoruz. Şimdi taramanın bitmesini bekleyelim.

joomscan taramamız bitti, şimdi find komutuyla reports veya 10.10.200.169 dizinini bulalım ve raporları görüntüleyelim

wk600ry.jpg

find dosya dizin bulmamıza yarayan komut
/ kök dizinde (en kapsamlı) arama yapmak istediğimizi belirtiyoruz
-type d aranan şeyin bir dosya değil dizin olduğunu belirttik
-name ile 10.10.200.169 isminde olduğunu belirttik
2>/dev/null ise bizi gereksiz çıktılardan kurtarmaya yarar ve yalnızca yararlı sonuçlar elde ederiz

wk600ry.jpg

Dosyamızın /usr/share/joomscan/reports/10.10.200.169 dizininde olduğunu bulduk

Dosyalarımız ise .html ve .txt formatında. Html olanı tarayıcıda görüntüleyelim:

nautilus . komutuyla (. içinde bulunduğumuz dizini belirtmiş oluyoruz) dizine gidelim ve html dosyasını açalım


Yeşil renkli olanlar bulduğu olumlu sonuçlardır ve neler olduğunu görüyoruz.


c3m4idf.jpg


dizin keşfimiz de bitti

Dizin taramamız bitti. Şimdi yukarıdan başlayak dizinleri deneyelim ve sonuçları görelim.

_archive dizini

_database dizini

_files dizini

_test dizini

Sar2html içeren bir dizin görmüş olduk

Hemen sar2html in ne olduğıuna bakalım ve ardından sar2html e dair bir exploit arayalım.

Sar2html, performans izleme için web tabanlı frontend dir. Sar ikili verilerini grafik formatına dönüştürür ve geçmiş verileri veritabanında tutar.

Bir adet .py scripti ve bir adet de .txt dosyası var. İkisini de searchsploit -m ile /tmp dizinine indirelim.
47204.txt dosyasını okuyalım:

Bunun bir command injection ile bunu sömürebiliriz. ; kullanarak url i manipüle edelim.

OS ye tıklayalım ve linuxu seçelim, url şu şekle gelecektir

Şimdi txt dosyasındaki /index.php?plot=;<command-here> will execute formatına gelmiş oldu

/index.php=plot=LINUX
wk600ry.jpg

plot=;echo;pwd;echo;id;echo;whoami;echo;ls -al

komutunu çalıştıralım ve aralara echo komutuyla boş bir satır koyarak karmaşıklığı engelleyelim

pwd – hangi dizinde olduğunu gösterir
id – kullanıcının user id, grup id gibi değerlerini gösterir
whoami – kim olduğunu söyler
ls -al – gizli dosyalar dahil bulunulan dizindeki dosyaları listeler

Select Host seçeneğine tıklayalım

Buradan ls -al komutundaki index.php, log.txt, sar2html gibi dosyaları kontrol edelim

Burdan bir sonuç çıkmadı
;cat log.txt yapalım

Burada /var/log/auth.log dosyasının olduğunu, yalnız isminin değiştini görüyoruz. İnceleyecek olursak da:

İlk beyaz alandaki 0.0.0.0 tüm ağ demek, port 22 ise ssh dinlemeye alınmış bunu belirtiyor.
İkinci beyaz alanda ise 49824 portundan basterd kullanıcısı için, 10.1.1.1 ip adresi için superduperp@$$ parolasının kabul edildiğini belirtiyor.
Üçüncü beyaz alanda ise pentest kullanıcısı için user id (uid) 0
(root user id si), oluşturuldu diyor. Burası bizim için önemli değil.

Yani biz log.txt dosyasından ssh için gerekli kimlik bilgilerini almış olduk.

basterd : superduperp@$$

Cevap: log.txt

Ozaman ssh ile bağlanmaya çalışalım, komut ise:
ssh [email protected]

Bağlanamadık çünkü ssh varsayılan olarak 22. Portu dener, biz ise 55007. Portta ssh servisinin çalıştığını öğrenmiştik. Ozaman -p parametresi ile spesifik portumuzu yazalım ve ssh a bağlanalım.

Oturumumuzu aldık


Detaylı bir şekilde anlatmak istiyorum, bu yüzden 2. partta kaldığımız yerden devam edelim.




BLUE TEAM

 

'B4TU

Katılımcı Üye
5 Şub 2019
392
438
Tebrik ederim Hunter'ım, bol görselli güzel bir çözüm olmuş. Bu sayfa düzeni tanıdık geldi :)
 
Son düzenleme:

borekaenxd97

Blue Tim Emektar
24 Nis 2020
218
342
Ey Türk Gençliği!
Tebrik ederim Hunter'ım, bol görselli güzel bir çözüm olmuş. Bu sayfa düzeni tanıdık geldi :)
Teşekkür ediyorum abi. Senin konulardan almış olabilirim biraz ondandır :)
Eline sağlık abi
Teşekkür ederim Yasincim.
Emeğinize elinize sağlık
Teşekkür ederim.
Elinize sağlık.
Teşekkür ederim.
Elinize sağlık hocam konunun resimler filan beni okuyun diyor adeta
Teşekkür ediyorum, fazla resim renk, yapmamaya çalıştım sıkmamak adına. Demek ki kararında olmuş.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.