PHP-Zugriff auf kompletten Server
lima-city → Forum → Die eigene Homepage → Sicherheit im Internet
anlegen
aufwand
auslese
bild
byte
code
datei
datum
galerie
kunde
ordner
sperren
system
tag
testen
url
versuchen
verzeichnis
wahrheit
zugriff
-
Hallo, ich habe die Tage eine neue Galerie für unsere Vereinsseite gemacht. Dem PHP-Skript wird über eine GET-Variable der Ordner gegeben. Ich wollte die von mir noch nicht geschlossene Sicherheitsücke testen, der Variable "../" für einen Sprung in Unterordner zu übergeben. Mein Skript sucht im aktuellen Verzeichnis nach Ordnern, wenn es keine findet, dann zeigt es alle Bilder aus dem Ordner in der Galerie an.
Dabei habe ich festgestellt, dass ich so bis zum Systemverzeichnis springen kann und auch hoch. Teilweise konnte ich auch in die Ordner von anderen Kunden des Webhosters. Hab natürlich nur Ordnerstrukturen und Versuche ein Bild in die Galerie zu linken, dass nicht über die URL zu erreichen ist.
Ein Schreiben oder Auslesen/Kopieren der Daten habe ich nicht getestet, will mich ja nicht strafbar machen. Habe mich im Internet erkundigt und gelesen, dass man dafür nur eine Variable ändern muss um mit PHP nur auf seinen eigenen Bereich zuzugreifen.
Ich habe das dem Webhoster berichtet und gefordert die Lücke unverzüglich zu schließne und bekam heute folgende Antwort:
Ich kann das von Ihnen beschriebene Verhalten teilweise bestätigen. Es ist möglich, dass Kunden lesenden Zugriff auf die Konfiguration des Systems erhalten. Dies ist notwendig, damit beispielsweise externe Programme wie Imagemagick aufgerufen werden können. Unterbindet man diese Zugriffe auf die Daten des Systems, ist ein Großteil der PHP-Software wie Joomla oder Typo3 nicht lauffähig.
Schreibende Zugriffe auf die Daten des Systems sind nicht möglich. Auch ist die Einsicht in Konfigurationsdateien, welche Passwörter oder ähnliche sensible Informationen enthalten unterbunden.
Unter Confixx werden zusätzlich die html-Verzeichnisse auf den Webspaces der Kunden mit den Rechten 750 angelegt. Dies bedeutet, dass andere Kunden nicht lesend auf die dort enthaltenen Daten zugreifen können. Ab und an ändern Kunden die Rechte des HTML-Verzeichnisses und vergeben mehr Zugriffsrechte als erforderlich. Wenn uns eine derartige Konfiguration auffällt, berichtigen wir diese und kontaktieren den entsprechenden Kunden.
Stimmt das so oder ist der Hoster nur unfähig seinen Server richtig zu konfigurieren? Ich werde das Skript im Laufe des Tages auch noch bei einem anderen Host testen, bei dem die HP vorher mit Joomla gemacht war. Also wenn ich dort mit meinem Skript nicht außerhalb des eigenen Verzeichnis gelang, stimmt die Aussage nicht. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Um welchen Hoster handelt es sich?
Es kann schon sein das man Lesezugriff braucht um manche Sachen zu nutzen.
Es wäre übrigens nur schlimm wenn auch ein Schreibzugriff da wäre so kann man höchstens den Quellcode auslesen.
Um wirklich sicher vor Code Diebstahl zu sein bräuchtest du einen VServer oder noch Sicherer einen Eigenen Server.
-
Also die Antwort von den Betreibern klingt doch nach ner vernünftigen Lösung. Wenn es so ist, wie sie es sagen, dann brauchst du dir doch keine Gedanken zu machen.
Hast du mal versucht bei einem anderen Kunden etwas auszulesen? Angeblich soll das ja nicht klappen. Und strafbar machst du dich in Deutschland nur, wenn du dabei Sicherheitsvorkehrungen, die hier ja nicht da zu sein scheinen, umgehst bzw. absichtlich/fahrlässig einen finanziellen Schaden anrichtest. Das heißt eine Datei außerhalb anzulegen, um den Schreibzugriff zu testen ist ok, aber nicht eine Konfigurationsdatei ändern, was zum Absturz etc. führen könnte.
Und ja man kann das mit openbasedir für PHP sperren. Das kannst du für von dir geschriebene Skripte auch anlegen, aber andere Kunden sind dann nicht daran gebunden. -
Es gibt nur eine Möglichkeit rauszufinden ob der Hoster die Wahrheit sagt ^^
Nutz die LFI mal aus und versuche mal die etc/passwd auszulesen ;).
Also
etc/passwd
../etc/passwd
../../etc/passwd
usw.
Was du mit der Var. meinst ist file_get_contents.
Wenn der Hoster recht hat macht der das bestimmt mit einer Dateiendung.
Also:
<? $seite = $_POST['seite']; require_once $seite.'.php'; ?>
Allerdings kann man das durch einen Null Byte umgehen und ist nicht sicher.
Es gibt einen kleinen Code den ich nicht nennen mag mit dem man den Base64 Verschlüsselten PHP Code filtern kann. Base64 dann wieder Decodieren und schon kommst du an den Code rein.
Meine Meinung. Wechsel den Hoster. Wenn eine LFI zugelassen ist dann ist manschmal auch eine RFI zugelassen. Und das ist Problematisch. Und ne LFI sollte man grundsätzlich nicht zulassen.
mfg -
tecfreak schrieb:
Das wird vermutlich sogar funktionieren, schlimm wäre eigentlich nur, wenn sich auch die
Es gibt nur eine Möglichkeit rauszufinden ob der Hoster die Wahrheit sagt ^^
Nutz die LFI mal aus und versuche mal die etc/passwd auszulesen ;).
auslesen lässt, falls du an Passwörter kommen magst./etc/shadow
Außerdem: Der Code ist nicht irgend ein unbekannter Code, sondern wurde vom TE geschrieben, und er ließ die Lücke absichtlich zu Testzwecken kurzzeitig offen. -
Hi, danke erstmal für die Antworten.
reimann schrieb:
Und ja man kann das mit openbasedir für PHP sperren. Das kannst du für von dir geschriebene Skripte auch anlegen, aber andere Kunden sind dann nicht daran gebunden.
Wie kann ich denn selbst den Zugriff sperren? Ist das nicht eine Einstellung in der php-konfig?
tecfreak schrieb:
Es gibt nur eine Möglichkeit rauszufinden ob der Hoster die Wahrheit sagt ^^
Nutz die LFI mal aus und versuche mal die etc/passwd auszulesen ;).
Also
etc/passwd
../etc/passwd
../../etc/passwd
LFI,RFI?? Die passwd ist eine Datei, kein Ordner oder? In etc komme ich rein. Um jetzt andere Datei als JPG zu sehen, müsste ich das Skript ändern. Kann ich aber mal machen, ist ja kein großer Aufwand.
tecfreak schrieb:
Was du mit der Var. meinst ist file_get_contents.
Meinte openbasedir.
Gruß
Simon
-
Das geht eigentlich ziemlich einfach (ungetestet sollte aber klappen):
<?php ini_set("open_basedir", "."); file_get_contents(".."); // exception
open_basedir kann auch mehrere Pfade beinhalten, die per Semikolon oder Doppelpunkt (systemabhängig) getrennt sind. -
reimenseimen schrieb:
Hi, danke erstmal für die Antworten.
reimann schrieb:
Und ja man kann das mit openbasedir für PHP sperren. Das kannst du für von dir geschriebene Skripte auch anlegen, aber andere Kunden sind dann nicht daran gebunden.
Wie kann ich denn selbst den Zugriff sperren? Ist das nicht eine Einstellung in der php-konfig?
tecfreak schrieb:
Es gibt nur eine Möglichkeit rauszufinden ob der Hoster die Wahrheit sagt ^^
Nutz die LFI mal aus und versuche mal die etc/passwd auszulesen ;).
Also
etc/passwd
../etc/passwd
../../etc/passwd
LFI,RFI?? Die passwd ist eine Datei, kein Ordner oder? In etc komme ich rein. Um jetzt andere Datei als JPG zu sehen, müsste ich das Skript ändern. Kann ich aber mal machen, ist ja kein großer Aufwand.
tecfreak schrieb:
Was du mit der Var. meinst ist file_get_contents.
Meinte openbasedir.
Gruß
Simon
LFI=Local File Inclusion
RFI=Remote File inclusion
Schau dir mal das Script von reimann an ;)
<?php ini_set("open_basedir", "."); file_get_contents(".."); // exception
Falls du die Datein nicht includen kannst, solltest du es mal mit einem Null Byte versuchen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage