include breakout

Hallo,

Nen Kumpel von mit hat ne Website bei der templates per Include geladen werden.
Auf meine Versuche ihm das auszureden hat er nicht reagiert und meinte ich solle ihm das Gegenteil beweisen. Lange Rede kurzer Sinn :

Auf grund seiner Fehlermeldungen schließe ich auf folgenen Code :

Code:
$page = $_GET['page']
include('templates/'.$page.'.tpl')

Irgentwelche gescheite Ideen wir ich das .tpl (bzw. "templates" für http) weg bekomme ?
Ein Null wird irgentwie ( = \0) escaped....
 
1. include in php zu benutzen ist nichts schlimmes. Nur das falsche Benutzen wie hier in diesem Fall ist schlecht.
2. Um das tpl wegzubekommen, kannst du einfach ein php-script machen, welches auf tpl endet, z.B. http://www.deineseite.de/boesesscript.tpl
Um das 'template/' wegzubekommen gibt es aber meines Wissens keine möglichkeit, da das 'template/' ja schon anzeigt, dass es sich um eine datei in einem lokalen Ordner handelt. Das einzige, was vielleicht hilfreich wäre, ist ein "../" zu beginn von $page. Damit kannst du in das übergeordnete verzeichnis wechseln. Vielleicht gelingt es dir dann irgendwie, von da aus andere dateien einzubinden
 
include ist nützlich, aber bitte doch nicht in nem Template ...

Das ist so ziemlich das Problem das ich habe. Wenn ich eine Externe Datei einbinen will stört das "/templates" und andernfalls kann ich nur ".tpl" Dateien lesen, was nicht viel hilft ...
 
Nein, zzumindest nicht so simpel, da deine exploit.php im Ordner "templates" gesucht werden würde und zusätzlich käme noch die Dateiendung ".tpl" hinzu. Dadurch kannst du (zumindest nicht auf diesem Wege, ob anders bin ich mir nicht sicher) keinen schädlichen Code einfügen.

mfg soul
 
Hallo,
hänge %00 an, dann bekommst das .tpl weg.

Aber natürlich ist solch ein Script auch sau gefährlich, selbst wenn es etwas (minimal) schwerer ist als ein include($_GET['page']) zu knacken.
 
Wenn alle Zeichen außer /[a-z0-9]/ aus $_GET['page'] gefiltert werden, ist dagegen nix einzuwenden. Würde meine Energie lieber daran verschwenden als zu versuchen, ein Szenario zu entwickeln, wie man's exploiten kann. ;)
 
Versuche mal folgendes:

Code:
http://www.seite.de?foo=//www.google.de%00
Habe irgendwie sowas letztens bei Heise Security gelesen.


// EDIT

Wenn alle Zeichen außer /[a-z0-9]/ aus $_GET['page'] gefiltert werden, ist dagegen nix einzuwenden. Würde meine Energie lieber daran verschwenden als zu versuchen, ein Szenario zu entwickeln, wie man's exploiten kann. ;)

dito

Notfalls kann man auch eine statische Liste verwenden. :)
 
Zumindest ist es möglich, alle möglichen Dummheiten zu machen und Tests auszuführen, um zum Beispiel nach PHP-Dateien zu suchen.

Das hat allerdings zugegebenermaßen für einfache gescriptete Angriffe wenig Sinn, wenn nicht auch Standard-Software auf dem Server läuft und man ansonsten die Dateien auf dem Server nicht kennt. Aber zumindest KANN man scannen, und mit etwas krimineller Energie und ausreichend Anreiz kann man blind nach Standard-Scripten suchen. Denn ALLES, was auf dem Server liegt, kann man erstmal einbinden lassen, indem für die freie Navigation vorn einfach ein "../" einbezogen wird und hinten die Endung mit einem Parameter- oder Anchor-Trenner ("?" oder "#") wirkungslos gemacht wird.

Sobald allerdings irgendeine (schlecht programmierte) Standardsoftware (aufgrund irgendwelcher Anzeichen) gefunden wurde, gehen Scheunentore auf: Die enthält jede Menge weitere Scripte, die mit der hier genannten Parameterübergabe eingebunden werden können und mitunter nicht gegen direktes Einbinden dieser Art gesichert sind.

Das größte Problem dabei: Standard-Scripte sind auch jedem Einbrecher zugänglich, und jeder Einbrecher kann diese beliebig gründlich nach Lücken absuchen, die einem normalen unbedarften Hobby-Admin nie auffallen würden. DIE können dann mit ziemlicher Wahrscheinlichkeit weitere Scripte von außen einbinden - WENN nicht ein paar zusätzliche Sicherheitsmaßnahmen getroffen wurden.

Also: Es ist durchaus möglich, daß der Server trotz der direkten Übernahme von Parametern sicher sein KANN. Aber es ist nicht sehr wahrscheinlich. Es sei denn, er ist tatsächlich NUR mit individuell programmierten Scripten gefüllt UND die sind streng geheim gehalten UND der Server ist ansonsten komplett in einem sicheren Modus.

Der erste und der letzte Teil des letzten Absatzes schließen sich allerdings gewöhnlich gegenseitig aus.
 
Hallo,
Original von LX
Wenn alle Zeichen außer /[a-z0-9]/ aus $_GET['page'] gefiltert werden, ist dagegen nix einzuwenden. Würde meine Energie lieber daran verschwenden als zu versuchen, ein Szenario zu entwickeln, wie man's exploiten kann. ;)
dies ist falsch! Das includieren von beliebigen Dateien birgt ungeahnte Gefahren, selbst wenn man nur einfache Dateinamen zufällst.

Siehe dazu:
Post 1
Post 2 (gleicher Thread)

Wenn man dies auf einen Ordner eingretzt, mag dies evt. funktionieren, das Arbeiten über eine Datenbank ist aber deutlich besser.
 
Entfernte Dateien wird man so sicherlich nicht includen koennen, das ist wahr. Gegen lokale Dateien, wie Elderan schon sagte, ist jedoch nichts einzuwenden. Zu Elderans Beispielen kann man eigentlich nurnoch hinzufuegen, dass, sollte man nicht auf Zeichen wie /, ., ... ueberpruefen, man sich schnell andere Software einfangen kann. Z.b. kann ueber einen Anonymous-Zungang jegliche Software geuploadet werden, die daraufhin wieder im Skript ausgefuehrt werden kann: http://name.tld/page.php?datei=../../../../../../../../../usr/srv/ftp/Anonymous/evilcode.php
Genauso können z.b. Server, die von versch. Usern benutzt werden, das Ziel einer solchen Attacke sein, da man hier leicht die Sicherheitsluecken von versch. Seiten ausnutzen kann. Natuerlich spielen hier auch die Serverrechte eine weitere Rolle, aber wieviel "Admins" gibt es, die zu faul dazu sind.
Genauso kannst du es deinem Freund sagen: Wenn er seinen Code nicht vollstaendig absichert ist er selbst schuld, wenn etwas passiert. Eine statische Liste von Dateien, welche "Included" werden dürfen ist hier sicherlich die beste Wahl. Desweiteren wuerde ich mich fragen, ob bei einem solchen Codestil nicht noch weitere Fehler sind, z.b. bei fopen(..), usw ;).
 
Danke für eure Antworten, aber es ging hier wirklich nur um diese Spezielle Situation. Es ist logisch das das völlig falsch ist, ich fühlte mich nur ertappt, da ich auf die schnelle kein Beispiel Produzieren konnte.

%00 habe ich probiert, es wird jedoch escaped ...
 
Original von Elderan
Das includieren von beliebigen Dateien birgt ungeahnte Gefahren, selbst wenn man nur einfache Dateinamen zufällst.

Siehe dazu:
Post 1
Post 2 (gleicher Thread)
Ähm ja, wer in das Template-Verzeichnis Dateien legt, die Code beinhalten, der sicherheitsrelevant ist, hat erstens das Konzept "Template" nicht verstanden und ist zweitens selber Schuld. Gegen das Einbinden der "falschen" Templates hilft dann auch keine Whitelist oder Datenbank ;)
 
Zurück
Oben