Pwnlab Writeup

Arif ARI
6 min readDec 2, 2021

--

Bu çalışmada zafiyetli pwnlab makinesinin çözümünü ele aldım. Keyifli okumalar..
Zafiyetli makinenin kurulumu yapıldıktan sonra klasik olarak netdiscover ile ağa bağlı aktif cihazları taratalım ve ip adresini tespit edelim.

Makineye ait ip adresinin 192.168.216.132 olduğunu tespit ettik.

Bir nmap taraması yapıp sistemin açık portlarının keşfettim.

Ardından dirb aracıyla web içeriklerini taratıp bir şey var mı bakalım.

Burada göze çarpan bir index.php dosyasından başka bir şey yok açıkçası. İşimize yarayabilir aklımızda bulunsun.
Sistemin login sayfasında birkaç sql injection taktiğiyle bir güvenlik açığı var mı yokmu diye kontrol ettiğimde başarılı olamadım.

Kullanıcı adını administrator’- -ve parolayı rastgele bir değer girdim. Sonuç dönmeyince sqlmap aracını kullandım.

Burdan da kayda değer bir şey bulamadım ve web alanında önemli bir araç olan nikto ile sistemi taradım.

Tarama sonucu index(daha önce bulmuştuk), login ve config adlı 3 php uzantılı dosya var. Bunlarda zafiyet arayabiliriz. Bir de XSS açığı olabilir fakat bu durumda işimize yaramayacaktır.
İnternetten php dosyalarıyla ilişkin bir file inclusion açığı için bir zafiyet var mı diye -php file inclusion vulnerability- aratıyorum.

Şöyle bir zafiyet buldum ve login ekranında bu komut satırını yazdım. İlk dosyamız index.php dosyasıydı.
Zafiyet bulmak için kullandığımız komut satırından da anlaşılacağı gibi index.php dosyasına dair ekranda ki yapının base64 formatında olduğu görülmektedir.

Ardından bu komut satırını config.php dosyası için aratıyorum.

Daha sonra da login.php dosyası için aratıyorum.

3 dosya içinde oldukça karmaşık base64 formatında farklı birer kod elde ettik. Bu kodları base64 sayfasında decode edebiliriz.

Sayfa üzerinde 3 ayrı yapıyı da decode edip herbirine ait php kodlamasını elde ettim. Ve bir dosyaya kaydettim.
Config.php dosyasına ait içerikte önemli veritabanı bilgileri vardı ve bu bilgilerle bağlantı kurmaya çalıştım.

Kodları ayrı ayrı incelediğimde login.php dosyasında ki bir sql komut sorgusunda users adlı bir tablonun girdi olarak verildiğini gördüm.

Veritabanına root kullanıcısı, H4u%QJ_H99 parolası ve Users tablosu üzerinden bağlantı kurdum.

Ardından sistemde hangi kullanıcılar mevcut bunu öğrenmek istedim. Karşıma çıkan 3 kullanıcı adı ve parola var. Bunlardan herhangi biriyle giriş yapamıyoruz. Çünkü parolalar da base64 formatında gizli bir şekilde tutulmaktadır. Tekrardan base64 sayfası üzerinde 3 parolanın gerçeğini öğrenip bir dosyaya kaydettim.

Kullanıcılardan herhangi biriyle login oldum ve karşıma, hedef sisteme shell doyası yükleyebileceğim bir sayfa geldi. Php uzantılı bir Shell dosyasını yüklediğimde izin verilmedi sadece görsellerin yüklenebileceğini bildiren bir yazıyla karşılaştım.

Bu nedenle Shell dosyasının uzantısını gif olarak değiştim ve tekrardan yükledim.

Yüklediğim dosya için ekranda da belirtildiği gibi copy ımage location diyerek url’sini kopyaladım.

Natcat ile bağlantımı açtım e tarayıcı da kopyaladığım adresi girdim. Sorun oluştu ve bağlantı kuramadım.

Daha önce index.php dosyasının içinde COOKIE[‘lang’] diye bir şey farketmiştim. Cookie’ler le ilgili zafiyet mevcut mu Google da arattım ve belirtilen zafiyeti kullanabileceğimi düşündüm.

Önce sistemden herhangi bir dosyayı login yaptıktan sonra browse edip isteğin burp suite düşmesini sağladım.

Burp suite düşen kod üzerinden bir cookie mevcut. Burada lang değerine kopyalamış olduğum adresi forward ettiğimde bağlantı kuramadım.

Bulduğum zafiyet komutu formatında olması için ekranda ki gibi belli bir kısmını girerek denedim ve natcat ile bağlantıyı kurmuş oldum.

www-data kullanıcısıyla bağlandığımı görüyorum. Sistemde çalıştırdığım komutları normal terminal ekranımız gibi kullanmak için etkileşimli bir python shell kodu çalıştırdım.

Mike kullanıcısına geçiş yapmak isteğimde parola eşleşmediği için başarılı olamadım fakat Kane kullanıcısı için denediğimde başarılı oldum.

Dosya-dizinleri listeleyip home dizinine geçiş yaptım ve burda dört dizinin var olduğunu gördüm. Ayrı olarak john adlı bir kullanıcı mevcutmuş bunu da öğrenmiş olduk. Kane dizinine geçiş yapıldığında msgmike adlı bir dosyanın mevcut olduğunu göreceğiz.
Çalıştırmak istedim fakat /home/mike/msg.txt adlı bir dosya-dizinin mecut olmadığını bildiren bir cevap aldım. Cat komutunu çalıştırmaya çalışıyor fakat başarılı olamıyoruz. Bu dosyayı görüntülediğimizde de farkedilecektir.

Burada msg.txt adlı bir dosyanın çalıştırılabileceğini biliyorum. Bunun için -replace cat command and path vulnerability- diyerek zafiyet aratıyorum.

Burada sistemin arayıp da bulamadığı bir path var bu nedenle path’i değiştirmek dosyanın çalıştırılmasına olanak tanıyacaktır. Bu nedenle pati ve cat komutunu değiştirip kendimi mike kullanıcısıymış gibi göstermek istiyorum. Bunun içinde önce /bin/bash dosyasını çalıştırdım. Ardından dosyanın çalıştırılmasına izin verip path’i değiştirdim.

Kane dizininden mike geçtiğimde burada bir msg2root adlı bir dosyanın var olduğunu farkettim ve bu dosyayı da çalıştırdım. Root için mesaja herhangi bir şey yazdığımızda 2 kere bunu döndürdüğünü göreceğiz. Burada kolay bir scriptin var olduğunu düşünerek dosyayı görüntüledim.

Dosya içinde messages for root diye bir şey cıktı karşıma. /bin/echo %s >> /root/messages.txt yazdığımız şeyi kopyalıyormuş. Burada az önceki komut çalıştırma zafiyetimizi kullanabiliriz.

Messages for root kısmına rastgele bir değeri girip ikinci değere çalıştırmak istediğim komutu yani whoami girdiğim takdirde sistemde root oluyorum.

Root dizini altında flag.txt dosyası mevcut bu dosyayı görüntülediğimizde bizi tebrik eden FLAG’imizi elde etmiş olacağız.

--

--

Arif ARI
Arif ARI

No responses yet