Yüklenme Tarihi: 2019-04-28
Bu yazıda Gemini Inc 1 sanal makinesinin exploit edilmesini işleyeceğiz. Bu sistem, çalışanların profillerini PDF'ye aktarmaları için tasarlanmış bir web uygulamasına sahip. Bu uygulamayı sömürerek sisteme sızmayı ve yönetici haklarını elde edebilmeyi amaçlıyoruz.
Gemini Inc 1 indirme linki :
---Bilgi Toplama---
Hedef makine IP tespiti ile başlayalım.
netdiscover –i eth0 –r 192.168.71.0/24
192.168.71.129 hedef makine üzerinde detaylı tarama gerçekleştirelim.
Http (80) ve ssh (22) portlarının açık olduğunu keşfettik. İlk önce hedef siteyi inceleyelim.
Ana sayfada test2/ dizini ile karşılaştık. İçine girip baktığımızda Master Login System sayfası karşımıza çıktı.
Uygulamanın kaynak kodlarına ulaşacağımız web sitesinin linkini veriyor. Girip biraz inceledim.
Nasıl kullanıldığına dair bilgi içeren bir video linki var. Videoyu izledim ve varsayılan username password kısmının admin 1234 olduğunu öğrendim.
Denedim ve başarılı bir şekilde giriş yapabildim.
Admin kullanıcısı ile giriş yaptık. Burada yapabileceğimiz iki seçenek mevcut. İlki kullanıcıya ait bilgilerin düzenlenmesi (Edit profile), ikincisi bu bilgilerin pdf olarak dökümünün verilmesi (Export profile)
Edit profil sayfasına gidip ilgili alanlara farklı veriler girerek sonuçlarının export profil sayfasında nasıl göründüğünü biraz inceledim.
Edit profile sayfası :
Export profile sayfası:
---Zafiyet Tarama---
Display name alanına girilen komutların sunucu tarafında herhangi bir önlem alınmadan direk pdf’e yazıldığını farkettim.
Web uygulaması, kullanıcının girişini filtrelememesi durumunda güvenlik ihlal edilebilir. Bu durum, bir saldırgana sunucudan hassas bilgileri indirme olanağı sağladığı için kritik bir güvenlik sorunu oluşturur. Örneğin / etc / passwd dosyasının içeriği okunabilir.
Sitede komut dosyası çalıştırma (XSS), iframe enjeksiyonu yada sunucu taraflı istek sahteciliği (SSRF) gibi güvenlik açıkları bulunma ihtimali var.
Basit bir XSS testi yaptım ve zafiyeti kanıtlamış olduk.
Export pdf sayfasının özelliklerine baktığımda wkhtmltopdf 0.12.4 uygulaması ile dönüştürme işlemini gerçekleştirdiğini gördüm.
Export pdf ile ilgili bir zafiyet var mı diye internette biraz araştırma yaptım. Bir açıklık bulunduğunu ve nasıl sömürüldüğü keşfettim.
Bu zafiyet hakkında faydalandığım siteler:
https://securityonline.info/export-injection-new-server-side-vulnerability/
https://github.com/crackatoa/kertasgorengan/blob/master/catatan/SSRF%20wkhtml.md
https://www.virtuesecurity.com/kb/wkhtmltopdf-file-inclusion-vulnerability-2/
https://github.com/wkhtmltopdf/wkhtmltopdf/issues/3570
https://canyoupwn.me/tr-ssrf-server-side-request-forgery-zafiyeti/
https://www.netsparker.com.tr/blog/web-guvenligi/ssrf-nedir-ssrf-nasil-onlenir/
Yaptığım araştırmalar sonucunda sunucuda SSRF zafiyetinin bulunduğunu keşfettim.
SSRF, bir saldırganın bir sunucuyu kendisi adına istekte bulunmaya zorlayan bir güvenlik açığıdır.
Eğer wkhtmltopdf uygulamasını kendi sunucumuza yönlendirebilirsek girdiğimiz kodların sonuçlarını görüntülemeyi başarabiliriz.
Bunun için öncelikle apache server ımızı aktif ediyoruz.
service apache2 start
Sonra aşağıdaki kodu barındıran test.php dosyamızı hedef makine üzerinden çalıştırabilmek için var/www/html dizinine koyuyoruz.
Hedef makinede display name alanına kodumuzu girerek pdf sayfasında /etc/passwd dosyasının içeriğini okumaya çalışalım.
/etc/passwd dosyasının içeriğini görüntülemeyi başardık ve gemini1 adında bir kullanıcı olduğunu tespit ettik. Gemini1 kullanıcı adını kullanarak wordlistler yardımıyla kaba kuvvet saldırısı gerçekleştirip ssh ile bağlanmayı deneyebiliriz. Tabi bu işlem baya bir zaman gerektirecektir.
Ben yine aynı zafiyeti kullanarak gemini1 kullanıcısına ait ssh key anahtarını okuyabilmeyi deneyeceğim.
Ssh anahtarı oluşturulurken genelde id_rsa ya da id_dsa isimleri kullanılmakta. Bu anahtarlar, kullanıcı dizini içerisinde .ssh gizli dizini altında bulunmakta.
Kaba kuvvet saldırısına gerek kalmadan gemini1 kullanıcısına ait private keyi elde ettik. “key” adında bir dosya oluşturup bu anahtarı içerisine kopyaladık.
---Sisteme Sızma---
Sıra geldi ssh ile bağlanmaya.
ssh -i key email@example.com
UYARI: ssh key hatası alırsanız oluşturduğunuz key dosyasının yetkilerini sadece okunabilir olarak ayarlayıp tekrar deneyin (chmod 0400 key). Key dosyasının yüksek yetkide olması güvenlik açığı olarak algılanıp engellenebilir.
Sisteme gemini1 kullanıcısı ile giriş yapmayı başardık. Dizinler arasında biraz gezindim fakat birşey bulamadım. Yetkili kullanıcı olmadığım için root dizinine erişemedim.
---Yetki Yükseltme---
Burada farklı yetki yükseltme teknikleri denedim. Size de bu konuda yardımcı olması açısından aşağıdaki siteden faydalanabilirsiniz.
https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/
SUID biti yapılandırılmış uygulamaların taramasını gerçekleştirdim. SUID biti hakkında bilgi almak için bu yazıma bakabilirsiniz.
find / -perm -g=s -o -perm -4000 ! -type l -maxdepth 3 -exec ls -ld {} \; 2>/dev/null
Yetki yükseltme işlemlerine listinfo uygulaması üzerinden devam ediyorum. Uygulama hakkında biraz bilgi toplayalım. Öncelikle uygulamayı çalıştıralım.
listinfo
which listinfo komutuyla uygulamanın PATH yolunu öğrendik.
strings /usr/bin/listinfo komutu ile uygulama içinde geçen karakter dizilerini inceledik.
Uygulama ifconfig, netstat ve date komutlarını çalıştırıyor. Date komutuna PATH yolu tanımlanmamış.
Yapacağımız işlemler şu şekilde; $PATH yolunu bulunduğumuz dizin ile değiştirip yeni date dosyası oluşturuyoruz. Bu sayede listinfo uygulaması çalışırken, date komutunu bulunduğumuz dizinden başlatmayı deneyecek.
listinfo uygulaması SUID biti değerinden dolayı root yetkilerinde çalışacağından, date dosyasının içine girdiğimiz kodlarında ayrıcalıklı haklara sahip olarak çalışmasını hedefliyoruz.
$PATH yolunu değiştirmek için export PATH=/home/gemini1:$PATH komutunu girdik.
echo $PATH komutuyla ilk bakılacak yolun /home/gemini1 dizini olarak değiştiğini gördük.
Şimdi yeni bir date dosyası oluşturup içeriğine hangi kullanıcı olduğunu gösteren “whoami” komutunu girerek listinfo uygulamasını çalıştırmayı deneyelim.
Görüldüğü gibi listinfo uygulaması içinde çalışan date komutunun çıktısı “root” kullanıcısı olduğunu gösteriyor. Terminalde “id” komutunu çalıştırdığımızda ise sınırlı haklara sahip gemini1 kullanıcısı olduğumuzu görüyoruz.
Tekrardan nano date komutu ile date dosyasının içeriğini düzenleyelim. Bu sefer /root dizinine gidip içinde neler olduğuna bakalım.
Flag.txt dosyasını bulduk, geriye sadece okumak kaldı. Date dosyasına cat /root/flag.txt; komutunu yazıyoruz ve listinfo uygulamasını çalıştırıyoruz.
Aytekin UZUN | System Network Administrator
firstname.lastname@example.org
Copyright © 2020