7Aralık

PriviaHub Cumhuriyet Makinesi Çözümü

Bu yazıda PriviaHub platformunda bulunan ve emekliye ayrılan “CUMHURİYET” adlı makinenin çözüm adımları anlatılmaktadır.

İlk olarak makinede bulunan açık portların ve açık portlar üzerinde çalışan güncel servislerin tespit edilmesi için tarama başlatılmıştır. Yapılan tarama işlemi sonucunda 80 ve 443 numaralı portların açık olduğu, bu portlar üzerinde “Apache 2.4.38” servisinin çalıştığı tespit edilmiştir.

Şekil 1- Tarama Sonuçları

Açık olan 80 numaralı port üzerinden web tarayıcısı ile Apache servisi üzerinde çalışan web uygulamasına erişim sağlanmıştır.

Şekil 2- Web Uygulaması

Erişim sağlandığında kullanıcı giriş sayfası ile karşılaşılmaktadır. Sisteme giriş yapabilmek için kullanıcı kaydı oluşturulmalıdır. Bunun için “Create An Account” ile belirtilen linke tıklanarak kayıt sayfasına erişim sağlanmıştır ve kullanıcı kaydı oluşturulmuştur.

Şekil 3- Kullanıcı Kaydı

Kayıt işlemi tamamlandıktan sonra giriş sayfasından kullanıcı paneline erişim sağlanmıştır.

Şekil 4- Kullanıcı Girişi

Giriş yapıldıktan sonra kullanıcı paneli üzerinde bulunan “account.php” adlı sayfaya erişim sağlanmaştır. Bu sayfa, kullanıcıların parola değişikliği yapmalarını sağlamaktadır.

Şekil 5- Parola Değişikliği

Parola değişikliği esnasında, “Change Password” butonuna tıklandığı sırada giden istek verilerine müdahele etmek amacıyla yerel bir proxy uygulaması başlatılmıştır. Metin kutularına yeni parola değeri girilip butona tıklandıktan sonra, proxy uygulamasına gelen istek verileri arasında bulunan user_id parametresi dikkat çekmektedir.

Şekil 6-Proxy Uygulamasına Gelen İstek

Bu parametreye atanmış olan “2” değeri, sisteme giriş yapılan kullanıcıya ait ID değerini belirtmektedir. Bu ID değeri değiştirildiğinde, yeni atanan değer farklı bir kullanıcıya ait ID değeri ise bu durumda istek gönderildiğinde o kullanıcının parolası değişecektir. Bu güvenlik açığı IDOR (Insecure Direct Object Reference) olarak adlandırılmaktadır. “user_id” değerine 1 değeri atanmıştır ve istek gönderilmiştir.

Şekil 7- Parametreye Yeni Değer Atanması

İstek gönderildikten sonra parolası değişen kullanıcıya ait panele erişim sağlanması için kullanıcı adının bilinmesi gerekmektedir. ID değeri “1” olarak atandığı için bu hesabın bir “admin” hesabı olabileceği çıkarımı yapılabilir. Giriş sayfasında ise e-posta adresi istenildiği için 1 ID değerine sahip hesabın e-posta adresinin “admin@privpasstore.com” veya “admin@privpasstore.local” olabileceğine dair bir çıkarım yapılabilir. Bu e-posta adresi ile birlikte yeni parola değeri metin kutularına girilerek panele erişim denemesi yapılmıştır.

Şekil 8-Yönetici Girişi

Girilen bilgilerin doğru olması sonucunda yönetici paneline erişim sağlanmıştır.

Şekil 9- Yönetici Paneli

Panel üzerinde, sisteme yeni bir sayfa eklemek amacıyla kullanılabilecek bir web sayfası bulunmaktadır. Bu sayfa üzerinde bulunan ilk metin kutusu yeni oluşturulacak olan PHP dosyasının adını, diğer metin kutusu ise bu dosya içerisine yerleşecek olan PHP kodlarını temsil etmektedir. Dolayısıyla makine üzerinde komut çalıştırmak amacıyla bir oturum bağlantısı sağlayan PHP kodlarının yer aldığı bir dosya oluşturulabilir.

Şekil 10- PHP Dosyası Oluşturma

Metin kutularına dosya adı ve oturum bağlantısı sağlayan PHP kodları girildikten sonra “reverse_shell.php” adlı bir sayfa oluşturulmuştur. Bu sayfaya erişim sağlandığında “Metasploit Framework” uygulaması üzerinde başlatılan dinleme modu isteği alacak ve makine üzerinden bir oturum bağlantısı sağlanacaktır. Sağlanan oturum üzerinden komutlar çalıştırabilmek için, sızma sonrası işlemlerin gerçekleştirilebilmesi amacıyla geliştirilmiş etkili bir araç olan “meterpreter“ uygulaması kullanılacaktır ve bu sayfaya yapılan erişim makine üzerinden bir meterpreter bağlantısı sağlayacaktır.

Şekil 11- Oluşturulan Sayfaya Erişim

Sayfaya yapılan erişim sonucunda Metasploit uygulaması isteği almıştır ve meterpreter oturum bağlantısı elde edilmiştir.

Şekil 12- Meterpreter Oturum Bağlantısı

Apache servisi makine üzerinde tanımlanan “web” adlı yerel kullanıcı hesabının yetkileriyle çalışmaktadır. Bu nedenle meterpreter oturumu “web” adlı kullanıcının hak ve yetkileriyle elde edilmiştir. Ancak PHP dosyası ile alınan bu oturum bağlantısı interaktif bir oturum sağlamamaktadır. Çünkü bu oturum Metasploit Framework uygulaması tarafından sunulan “php/meterpreter/reverse_tcp” adlı bir payload ile sunulmaktadır ve yapılabilecekler PHP programlama dilinin yetenekleri ile sınırlıdır. Bu nedenle Metasploit Framework üzerinde, meterpreter oturumu sağlayacak olan “.exe” uzantılı bir uygulama dosyası oluşturulmuştur ve “windows/meterpreter/reverse_tcp” adlı payload kullanılarak yeni bir dinleme modu başlatılmıştır. Yeni oluşturulan dosya elde edilen oturum üzerinden makineye yüklenerek yeniden çalıştırılmıştır. Böylece arkaplanda çalışan dinleme modu isteği yakalamış ve yeni bir meterpreter oturumu elde edilmiştir.

Şekil 13- İnteraktif Meterpreter Oturum Bağlantısı

Meterpreter uygulaması üzerinden “web” adlı kullanıcının masaüstü dizinine erişilerek “non-privflag.txt” dosyası elde edilmiştir. Ancak “Administrator” hesabına ait masaüstü dizininde bulunan “privflag.txt” dosyası okunamamaktadır. Çünkü “web” kullanıcısı düşük yetkilere sahiptir. Bu nedenle privilege escalation (hak ve yetki yükseltme) işlemi yapılacaktır.

“web” kullanıcısının hak ve yetkileri incelendiğinde bu kullanıcının “Administrators” adlı gruba dahil olduğu görülmektedir.

Şekil 14- Kullanıcı Bilgileri

Buradan anlaşıldığı üzere “web” kullanıcısı yönetici haklarına sahiptir, ancak Apache servisi UAC (User Access Control) koruması ile çalışmaktadır. Bu nedenle meterpreter bağlantısı düşük yetkilerle elde edilmiştir. Bundan sonra yapılacak işlem UAC mekanizmasını atlatmak ve “web” kullanıcısı ile yüksek yetkiler gerektiren işlemler yapabilmektir. UAC mekanizmasını atlatmak için “hfirefox” tarafından geliştirilen Akagi adlı araç kullanılabilir. Bu araç çeşitli UAC Bypass teknikleri içermektedir ve makinenin işletim sistemi ve Build numarasına göre uygun bir metot kullanılarak UAC mekanizması atlatılabilir. Akagi adlı aracı Github üzerinden indirilip derledikten sonra yapılması gereken işlem oluşan çalıştırılabilir dosyayı kurban makineye yüklemek ve bir argüman belirterek çalıştırmaktır.  Dolayısıyla Akagi aracı ile birlikte oluşturulmuş olan bir meterpreter zararlısı çalıştırılarak yüksek yetkiler ile yeni bir meterpreter oturum bağlantısı elde edilebilir.

Şekil 15- Akagi

Makinenin işletim sistemi ve Build numarasına göre 10 numaralı teknik kullanılarak (teknikler Github sayfasında yazmaktadır) Akagi aracı daha önceden makineye yüklenmiş bir meterpreter zararlısı ile birlikte çalıştırılmıştır. Böylece yüksek yetkilerle yeni bir meterpreter oturumu elde edilmiştir.

Şekil 16- Yüksek Yetkilerle Elde Edilmiş Meterpreter Oturumu