Artikelformat

„Apache Killer“ vulnerability check

Wie ihr sicher mitbekommen habt, gibt es ein weniger nettes 0-Day Exploit, das den Apache lahm legen kann. Das Exploit wurde auf golem und heise verlinkt und somit werden wir die nächsten Tage noch viel „Spaß“ haben. Der PHPGangsta hat eine Implementierung eines Checkers vorgestellt, die auf dem Zend Framework aufbaut. Da dies auch ohne Zend geht, habe ich mal schnell auf Basis des Exploits einen Checker gebastelt.

Der Code ist hier zu finden:

<?php

if (count($argv)==1) {
    echo "Usage: " . $argv[0] . " host <port>\n";
    die();
}

$host = $argv[1];
$port = (isset($argv[2])) ? $argv[2] : 80;
echo "Checking $host:$port... \n";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("could not create socket\n");
} else {
    $result = socket_connect($socket, $host, $port);
}

$p = "HEAD / HTTP/1.1\r\nHost: $host\r\nRange:bytes=0-4\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";

socket_write($socket, $p, strlen($p));
while ($out = socket_read($socket, 2048)) {
    if (stripos($out, "partial")!==false) {
    	echo "[!!] possibly vulnerable\n";
    	exit();
    }	
}
echo "[*] possibly _not_ vulnerable \o/ \n";
?>

Das Skript baut eine TCP Verbindung zu einem angegebenen Server und Port auf und sendet die Testanfrage des Exploits. Die Antwort wird auf das Schlüsselwort „Partial“ untersucht. Wird dieses gefunden ist der Server vermutlich anfällig für das Exploit, wenn nicht – dann nicht 😉

Da es ein 5-Minuten Skript ist und sobald ein Patch für den Apache existiert nicht mehr relevant sein wird, ist es nicht sonderlich sauber geschrieben.

2 Kommentare

  1. christopher

    26/08/2011 @ 12:15

    ich hätte das kurz getestet:

    PHP Fatal error: Call to undefined function socket_create() in /apache.php on line 9

    Antworten
    • Dann hast du wohl kein Socket-Support in deinem PHP. Kannst ja mal schauen, ob folgender Aufruf in der Kommandozeile was bringt:

      php -i | grep enable-sockets

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.