# Was tun gegen PHP Shell Exploits



## Deex (21. Apr. 2013)

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?


----------



## nowayback (22. Apr. 2013)

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?


----------



## Deex (22. Apr. 2013)

Also ja ich habe mich als Benutzer eingeloggt und den dann hochgeladen.
Der gab mir dann mein Root Passwort für MYSQL



> wenn ja, wo war jailkit?


hmm?
Das ist eine gute Frage,- greift bei sowas wohl nicht denn Installiert ist es.


----------



## nowayback (22. Apr. 2013)

> Das ist eine gute Frage,- greift bei sowas wohl nicht denn Installiert ist es.


sollte es aber


----------



## Deex (22. Apr. 2013)

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 


> /home/[username]


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"));
> ...


----------



## Till (22. Apr. 2013)

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.


----------



## Deex (22. Apr. 2013)

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


----------



## Deex (24. Apr. 2013)

Hi, 

Gibt es schon was neues im Bezug zum MYSQL Exploit?


----------



## Till (25. Apr. 2013)

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


----------



## Deex (26. Apr. 2013)

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


----------



## Till (26. Apr. 2013)

Danke dass Du die Liste der Funktionen gepostet hast! Ich denke die wenigsten CMS werden damit Probleme haben.


----------



## Brainfood (15. Mai 2013)

Kannst du den Exploit irgendwo "public" hochladen? würde mir das ganze gerne mal anschauen ...


----------



## mare (16. Mai 2013)

lmgtfy.com/?q=c100+php+shell


----------



## Orion (16. Feb. 2014)

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.


----------



## Till (16. Feb. 2014)

Das ist so noch aktuell.

Bei Problemen mit gehackten FTP Konten kannst Du auch das hier mal versuchen:

How To Integrate ClamAV Into PureFTPd For Virus Scanning On Ubuntu 12.04 | HowtoForge - Linux Howtos and Tutorials


----------

