[TR] TryHackMe — Lian_Yu Write-Up

Anıl Çelik
6 min readMay 24, 2020

--

Herkese merhaba, ben Anıl Çelik. Sizlerle bu yazımda, geçtiğimiz günlerde TryHackme platformunda yayınlanan Lian_Yu isimli makinenin çözümünü paylaşacağım:

Başlıkta belirtildiği gibi, bu challenge gayet kolay bir challenge ancak içinde bulunan bazı kısımlar sizi kolayca tuzağa çekebilir ve fazla vakit harcamanıza sebep olabilir. Bu yüzden, makineyi çözerken dikkatli olmakta fayda var :)

nmap taraması ile başlayalım:

nmap çıktısında görebileceğimiz gibi, toplamda 5 tane port açık: 21, 22, 80, 111 ve 55650. Daha fazla beklemeden, 80 portunda enumeration işlemine başlayalım:

Web servisine gittiğimizde yukarıdaki sayfayla karşılaşıyoruz. Sayfanın kaynak kodunu inceledim ancak kayda değer bir şey bulamadım. Buradan sonra yapılacak tek şey, gobuster!

gobuster taraması yaptığımızda, “island” adında gizli bir dizin olduğunu görüyoruz. Burada işe yarar bir şey olabilir, hemen bu dizini ziyaret edelim:

Dizini ziyaret ettiğimizde, “vi*****te” şeklinde gizli bir code word olduğunu görüyoruz. Buradan sonra, karşımıza çıkan bu code word’ün de bir gizli dizin olduğunu düşünüp oraya ulaşmaya çalıştım ancak bu bir gizli dizin değil. Bu bilgiyi not aldıktan sonra, bir gobuster taraması daha yapalım:

İşte şimdi room içerisinde verilmiş taskde de istenen asıl gizli dizini bulduk. Bu dizine gittiğimizde, ilgi çekici bir şey buluyoruz:

Burada herhangi bir şey olmadığını söyleyebilirsiniz. Ancak bunu söylemeden önce, sayfanın kaynak koduna bir göz atalım:

İlgi çekici bir bilgiye ulaştık. Sayfa bize “.ticket” uzantılı dosyamızı buradan alabileceğimizi söylüyor ancak görünene göre buna dair herhangi bir şey burada yok. Burdan sonra bu “.ticket” ın bir dosya uzantısı olduğunu düşünebiliriz ve gobuster ile son bir tarama daha gerçekleştirebiliriz. Eğer bilmiyorsanız, gobuster “-x” parametresiyle dosya uzantısı taraması yapmanıza da izin veriyor.

“.ticket” uzantılı dosyaları arattığımızda, bir dosya bulmayı başardık.

Bir bilgiye ulaştık ancak bu bilgi encrypted formda. Encrypt edilmiş bu bilgiyi CyberChef kullanarak decrypt edebiliriz:

Verilen stringin Base-58 formatta olduğunu CyberChef içerisindeki Magic modülünü kullanarak bulabiliriz. SSH servisine bağlanmamız gereken task room içerisinde sonraki tasklerde yer aldığı için, buradan SSH servisine bağlanmadan önce FTP servisine bağlanmamız gerektiğini görebiliriz. FTP servisine bağlanabiliriz ancak kullanıcı adını bilmiyoruz. Bu noktada, daha önce bulduğumuz “vi*****te” ‘nin username olduğunu düşünebiliriz:

Evet, bu bilgiyi kullanarak FTP servisine eriştik. Görebileceğimiz gibi FTP servisi içerisinde 3 tane dosya var. Devam etmeden önce “get” commandini kullanarak bu dosyaları indirelim:

Dosyaları indirtikten sonra, “Leave_me_alone.png” isimli dosya dikkatimi çekiyor:

Dosya adından görebileceğimiz gibi dosyanın uzantısı “.png” fakat exiftool çıktısında dosya formatının hatalı olduğunu gösteren“File format error” mesajını alıyoruz. Bu, dosya header’ının bozuk olduğu anlamına gelebilir ve dosyayı düzgün bir şekilde görüntüleyebilmek için bu header’ı düzeltmeliyiz. Header’ı görüntülemek için hexeditor isimli aracı kullanalım:

İlk satırda görebileceğimiz gibi, dosya header’ı .PNG olması gereken şekilde encode edilmemiş. Bunu düzeltmek için, “PNG hex header” şeklinde basit bir Google araması yapabilir ve ihtiyacımız olan bilgiye ulaşabiliriz:

Edindiğimiz bilgiye göre dosya header’ını düzenleyelim:

Dosyayı düzenlediğimize göre şimdi dosyayı düzgün bir şekilde görüntüleyebiliriz. Tekrar kontrol etmek için exiftool aracını kullandığımızda, işlemin başarılı olduğunu görebiliriz:

Şimdi dosyayı açmaya çalışalım.:

Buradan “pa*****d” şeklinde başka bir bilgiye daha ulaşıyoruz. Bunun anlamı, şuan açtığımız dosya veya FTP dizininde önceden ulaştığımız diğer 2 dosyada bazı gizli bilgiler olabilir. Bu noktadaki ilk düşüncem bu gizli bilginin şuanda görüntülediğimiz Leave_me_alone.png” içerisinde olduğuydu fakat aradığım bilgi burada değildi. Sonraki aşamada, “aa.jpg” isimli dosyayı yukarıda bulmuş olduğum şifreyi kullanarak inceledim ve ihtiyacım olan bilginin burada gizlendiğini gördüm:

Gördüğümüz gibi, aa.jpg dosyasının içerisinde gizlenmiş bir zip dosyası varmış:

zip dosyasının içerisinden 2 farklı dosya çıktı, neler olduğuna göz atalım:

“shado” isimli dosyada SSH kullanıcısının parolası yer alıyor. Evet, yine parolayı elde ettik ancak yine username’i bilmiyoruz. Bu noktada, birkaç ussername deneyip doğru olanı bulamadıktan sonra, FTP dizinlerini yeterince incelemediğimi farkettim (Thanks to Still ❤):

Gördüğümüz gibi, “s**de” isminde başka bir kullanıcı daha var. Bu kullanıcıyı kullanarak, SSH servisine bağlanabiliriz:

User flag’i bulalım:

User flag’i kolay bir şekilde bulduk. Privilege escalation aşamasında herhangi bir script çalıştırmadan önce, üzerinde bulunduğumuz kullanıcının sudo yetkilerine göz atalım:

Gördüğümüz gibi, üzerinde bulunduğumuz kullanıcıya tanımlanmış “/usr/bin/pkexec” şeklinde bir sudo yetkisi var ancak burada dikkat etmemiz gereken şey, genelde tanımlanmış sudo yetkilerinde yer alan ve komutu çalıştırırken parola kullanmamıza gerek kalmayan “NOPASSWD” ibaresi yerine parola kullanmamız gerektiğini gösteren “PASSWD” ibaresi yer alıyor. Bu, komutu çalıştırmadan önce“sudo” ön ekini kullanmamız gerektiği anlamına geliyor. Şimdi tekrar Google’dan bu sudo yetkisine dair bir exploit olup olmadığına bakalım:

Gördüğümüz gibi race condition dan faydalanan bir exploit var. Race Condition’ın ne olduğunu bilmeyenler için, Race Condition’ı basit bir şekilde aynı anda paylaşılan system resource’una aynı anda ulaşmaya çalışıp onu kullanmaya çalışan iki veya daha fazla thread’in bulunduğu durum olarak tanımlayabiliriz. Exploiti incelediğimizde, exploitin “C” dilinde yazıldığını görebiliriz. Dolayısıyla, exploiti local sistemimize aldıktan sonra compile edip hedef makineye transfer edebiliriz:

Kodu compile ettikten sonra, makineye gönderip çalıştıralım:

Gördüğümüz gibi gayet basit bir şekilde root flag’e ulaştık.

Yazımı okuduğunuz için teşekkür ederim, bir sonraki yazımda görüşmek üzere.

--

--

Anıl Çelik
Anıl Çelik

No responses yet