Was tun gegen PHP Shell Exploits

#1
Hi,

ich habe heute mal einen aktuellen Shell Exploit bei mir auf dem server ausgetestet den ich auf den FTP Geschoben habe. Enttäuschend war das er das Root MYSQL Passwort nach 2 sekunden hatte und auch sonst alles auslesen konnte. Zwar war der Upload nicht möglich da alles read only war aber das mysql root passwort zu erhalten ist wirklich schlimm.

Ich verstehe nicht so ganz wie das trotz.

1. Aktuellem System
2. Fail2ban
3. Suhosin
4. Clam AV
5. RK-Hunter

alles möglich ist.

Was kann ich machen um mich dagegen zu Schützen? Gibt es eine alternative zu mod_security?
 
Zuletzt bearbeitet:

nowayback

Well-Known Member
#2
du hast per anonymous ftp oder userftp account nen shell exploit hochgeladen und der hat dir das root mysql pw ausgelesen? wenn ja, wo war jailkit?
 
#5
Tja wie gesagt ich bin Ratlos, in einem anderen Forum stellt ein Nutzer auch diese Frage und bekam die Antwort das er grade das aktuelle Exploit c100 paket nur mit Mod Security in den griff bekommt.

Ich hab mir den code nun zigmal angesehen und finde immernoch nicht die stelle bei der er die MYSQL Daten erhält. Was auf jedenfall funktioniert ist das er auch den verbindungs status anzeigen kann.

Hier zuerst einmal meine Jailkit Einstellung

Jailkit Chroot home
Jailkit Chroot Anwendungsbereiche
basicshell editors extendedshell netutils ssh sftp scp groups jk_lsh
Jailkit Chrooted Anwendungen
/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico
Jailkit Cron Chrooted Anwendungen
/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php


Der Exploit selbst scheint auf folgende Befehle zurück zu greifen am ende (Nur ein harmloser auszug).
Jedenfalls kann der die tatsächlich verwenden.

displaysecinfo("OS Version?",myshellexec("cat /proc/version"));
displaysecinfo("Kernel version?",myshellexec("sysctl -a | grep version"));
displaysecinfo("Distrib name",myshellexec("cat /etc/issue.net"));
displaysecinfo("Distrib name (2)",myshellexec("cat /etc/*-realise"));
displaysecinfo("CPU?",myshellexec("cat /proc/cpuinfo"));
displaysecinfo("RAM",myshellexec("free -m"));
displaysecinfo("HDD space",myshellexec("df -h"));
displaysecinfo("List of Attributes",myshellexec("lsattr -a"));
displaysecinfo("Mount options ",myshellexec("cat /etc/fstab"));
displaysecinfo("Is cURL installed?",myshellexec("which curl"));
displaysecinfo("Is lynx installed?",myshellexec("which lynx"));
displaysecinfo("Is links installed?",myshellexec("which links"));
displaysecinfo("Is fetch installed?",myshellexec("which fetch"));
displaysecinfo("Is GET installed?",myshellexec("which GET"));
displaysecinfo("Is perl installed?",myshellexec("which perl"));
displaysecinfo("Where is apache",myshellexec("whereis apache"));
displaysecinfo("Where is perl?",myshellexec("whereis perl"));
displaysecinfo("locate proftpd.conf",myshellexec("locate proftpd.conf"));
displaysecinfo("locate httpd.conf",myshellexec("locate httpd.conf"));
displaysecinfo("locate my.conf",myshellexec("locate my.conf"));
displaysecinfo("locate psybnc.conf",myshellexec("locate psybnc.conf"));
 
Zuletzt bearbeitet:

Till

Administrator
#6
Wie hast Du denn das php script ausgeführt? Auf der shell mit "php exploit123.php" oder hast Du es per URL im Browser aufgerufen?

Wenn Du es per URL aufgerufen hast dann kann jailkit nicht greifen, solche scripte kann man meist wie folgt unterbinden:

1) Webseite muss mit php-fcgi laufen und suexec muss an sein.Keinesfalls mod_php nehmen!
2) in der php.ini welche für cgi scripte verwendet wird solltest Du alle Befehle die shellcommandos ausführen deaktivieren, welche das sind kannst Du in dem Script in der Funktion "myshellexec(....)" nachsehen, auf jeden Fall sind dies exec,shellexec,system,passthroug, popen und vielleicht noch mehr. Diese Funktionen werden von nomalen CMS an sich nicht benötigt, daher solltest Du sie auf jeden Fall deaktivieren. Du kannst Mir das script auch mal per email an dev [at] ispconfig [dot] org senden, dann kann ich mir das ansehen wie man es unterbinden kann.
3) Stell sicher dass php open basedir im web gesetzt ist und nur Verzeichnisse des webs zulässt.
 
#7
Hallo Till,

Es handelt sich dabei um den c100 Exploit. Den habe ich per FTP raufkopiert und anschließend freigeben in der htaccess anschließend ausgeführt.

danke für die Hinweise, ich arbeite die gleich ab. Das Script sende ich dir gleich an deine Adresse, Clam AV erkennt es nicht aber solltest du Avira haben wird es eine Warnmeldung auswerfen.

Ich melde mich gleich zurück wenn ich die einzelnen Schritte vorgenommen habe.

--Nachtrag---
0.) Bei der Datei musst du username eingeben, das passwort und das passwort nochmal als MD5 Hash dann kann man auf die shell zugreifen.

1.) Was MOD PHP Betrifft, ja du hast recht ich musste aufgrund des Frameworks fast cgi durch mod php ersetzen. Scheinbar ist dies auch ein großes Problem welches ich nur durch Framework Modifizierungen angehen kann.




Ich habe nun folgende Konfigurations änderungen angewand.

/etc/php5/cgi/php.ini

disable_functions = apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, curl_multi_exec, define_syslog_variables, disk_free_space, diskfreespace, dl, error_log, escapeshellarg, escapeshellcmd, exec, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, ini_alter, ini_get_all, ini_restore, link, mysql_pconnect, openlog, passthru, pfsockopen, php_uname, phpinfo, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, set_time_limit, shell_exec, symlink, syslog, system, tmpfile, virtual

/etc/php5/apache2/php.ini

disable_functions = apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, curl_multi_exec, define_syslog_variables, disk_free_space, diskfreespace, dl, error_log, escapeshellarg, escapeshellcmd, exec, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, ini_alter, ini_get_all, ini_restore, link, openlog, passthru, pfsockopen, php_uname, phpinfo, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, set_time_limit, shell_exec, symlink, syslog, system, tmpfile, virtual
Ergebnis: Root Passwort immernoch ersichtlich, alle Shell Befehle nicht mehr möglich.


In beiden Dateien ist ;open_basedir = auskommentiert. Bei der verwendung von ISP Config sollte es doch das hier sein: ?

open_basedir =[website_path]/web:[website_path]/private:[website_path]/tmp:/var/www/[website_domain]/web:/srv/www/[website_domain]/web:/usr/share/php5:/usr/share/php:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/usr/share/php
 
Zuletzt bearbeitet:

Till

Administrator
#9
Ich habe Deine mail leider nicht bekommen. Könntest Du vielleicht die dateien umbennenen und dann in ein opasswortgeschütztes zip packen oder Du packst das zip 2 mail hintereinander mit passwortschutz so dass ein scanner nur den namen des 1. zip lesen kann?

Grüße

Till
 
#10
So hier nun die Finale PHP Konfiguration, damit dürften PHP Exploits sogut wie nichts mehr machen können, danke auch an Till für die gute zusammenarbeit beim ausknobeln des Scriptes und verwendeter functions. Viel Erfolg


disable_functions = apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, define_syslog_variables, disk_free_space, diskfreespace, dl, error_log, escapeshellarg, escapeshellcmd, exec, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, ini_alter, ini_get_all, ini_restore, link, openlog, passthru, pfsockopen, php_uname, phpinfo, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate,pcntl_exec , set_time_limit, shell_exec, symlink, syslog, system, tmpfile, virtual
 
#14
Sorry das ich dieses alte Thema wieder hochhole, aber ist das was hier so geschrieben wird alles noch so aktuell und geeignet zum Schutz gegen Exploits oder würdet ihr das im Februar 2014 nun anders sichern?

Habe mit Exploits auch starke Probleme. Es ist echt sehr schwer sich gegen so etwas zu wären, gerade wenn man Kunden hat deren FTP-Zugang "gehackt" wurde.
 

Werbung

Top