Bu yazımda PwnLab sanal makinesinin çözümünü anlatacağım. Makineyi virtualbox üzerinde çalıştırdıktan sonra ip adresini bulmak için netdiscover yaptım ve adresi 192.168.1.54 olarak görüyorum.

      Sonra yine her zamanki gibi nmap taraması atıp açık servisleri listeledim.

      Açık olan HTTP servisini görünce gidip bakalım ne var ne yok dedim.Tarayıcımdan servise gittim ve burada bir login paneli var. Mysql servisininde açık olduğunu görünce ölümüne sqli denedim fakat bir yanıt alamadım. Sonra dirbuster açıp yine işe yarar bir dizin bulabilir miyim diye baktım.

      config.php dosyası çıktı fakat tarayıcıdan denediğimde doğal olarak herhangi bir şey görüntüleyemedim. Öncesinde çözmüş olduğum bir makineden hatırımda kalan base64 filtresini denedim. Bu PHP 5.0.0 dan itibaren php sayfa kaynağını görmemize izin veren bir yöntem oluyormuş.

http://192.168.1.54/?page=php://filter/convert.base64-encode/resource=config

      Karşıma ne çıksa iyi? Base64 bir değer .Bunu hemen çevirdim ve mysql bağlantı bilgilerini(kullanıcı adı ve şifre) içeriyordu.

      Açık olan mysql servisine bağlantı kurdum ve kullanıcı tablosunu bularak kullanıcı adı ve şifrelerini öğrendim. Buradaki şifrelerinde base64 decode edilmesi gerekiyordu.

show databases;
use Users;
show tables;
select *from users;


      Upload kısmına bir shell yüklemek istedim fakat dosya tipi image olması gerekiyormuş. Bu arada config.php dosyasını görüntülediğim gibi upload.php ve index.php dosyalarını da görüntüledim ve dosya tipi kontrolünün nasıl yapıldığını gördüm. index.php dosyasında bir şey dikkatimi çekti. Burada cookie değeri kısmında lang.php dosyası çalışıyordu. Yani yükleme yaptıktan sonra cookie değeri yerine dosyamın adını yazsam o dosya çağırılıp çalıştırılacaktı. Böylece reverse-shell alabilirdim. Dosyayı upload ederken burp açtım ve çıktıyı repeater bölümüne gönderdim.Repeater bölümündeki datayı Request ettiğimde geri gelen Response değerini okuyup yükleme ismini aldım. Sonra bu değeri cookie değeri olarak değiştirdim ve işlemi forward ettim. Shell kodu içeriye hangi isimle yüklendi artık bunu biliyoruz ve onu çağırdığımızda kendi makinemizde açtığımız listener onu yakalayacak.


      Reverse-shell başladı. www-data kullanıcısı olarak içerideyim artık fakat bir işime yaramıyor.su komutunu çalıştıramadım .Biraz google yapınca non-interactive bir shell ile karşı karşıya olduğumu anladım.Bu shell tipi veri girişine imkan vermiyor. Veri girişi yapamadığım için de root alamazdım çünkü benden parola isteyecekti. Yeni bir shell spawn yapmam gerektiğini öğrendim. Bu konuda da en iyi iş gören Python olur dediler.

python -c 'import pty; pty.spawn("/bin/sh")'

      Bu aşamadan sonra en çok hangisi işime yarar diye kullanıcılar ile teker teker giriş yaptım. İçeride msgmike adında bir dosya var fakat çalıştırma iznim yoktu.

echo "/bin/bash" > cat
chmod 777 cat
export PATH=.:$PATH

      Adımlarını izleyerek dosyayı çalıştırdım ve artık mike kullanıcısı oldum. Sonra root dizinine gidip oradaki msg2root adlı dosyayı da çalıştırınca artık root olarak içerdeyim. flag.txt beni bekliyordu.

Özet :

  1. –Makinenin ip adresini netdiscover ile bulup nmap ile açık servisleri listeledim.
  2. –Dirbuster ile işe yarayabilecek dizinleri buldum.Buradaki config.php dosyası bana mysql girişi için gereken bilgileri verdi.
  3. –Tanımlı kullanıcılardan birisi ile giriş yaptım ve içeriye shell kodunu yolladım. Burada dosya tipi kontrolü yapılıyordu. Bu yüzden uzantıyı değiştirdim ve kaynak kodundan ufak bir değişiklik yapıp yükleme yaptım.
  4. –Yükleme yaparken yüklemenin içerideki yerini, ismini bulabilmek için Burp ile işlemi manipüle ettim ve yükleme ismini öğrenip içeriye cookie alanına yerleştirdim.
  5. –İşlem yapılırken makinemden nc dinlemesi açtım ve reverse-shell böylece kuruldu.
  6. –Non-interactive shell ile karşılaşınca python ile yeni bir shell import ettim. Gereken izinleri de ayarladıktan sonra root olarak flag değerine ulaştım.