Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Homepage down wegen include Befehl





Frage

Hoi, habe heute diese Email von meinem Webserver bekommen!: [code] über Ihre Seite wurde gestern mehrmals teilweise erfolgreich versucht, > in den Web-Server einzubrechen. Der/Die Angreifer haben dabei Zugriff > auf den Benutzerprozess des Webservers erlangt. > > Die Ursache ist ein Programmierfehler in der Datei content.php auf Ihrer > homepage "www.ama.de": > > Auzug (Zeile 116): > > <?php include($_GET[file].".htm"); ?><br><br><br> > > Sie verwenden einen Parameter ungeprüft als Source für include(). > Darüber ist es dem/den Angreifer(n) gelungen, eigenen Code ausführen zu > können, indem er für 'file' eine eigene URL angeben hat. [/code] Ich habe das bis jetzt bei vielen Homepages gemacht, diesen Code, und habe nie Probleme bekommen. Wer kennt diesen Fehler? Gibt es dazu vllt ne alternative? Oder muss ich einfach nur was am code verändern? Danke cu pYro

Antwort 1 von f*euervogel

du übergibst über den url direkt den pfad zu ner datei um diese dann zu inkludieren.
wenn der server so konfiguriert ist, können auch server-fremde-scripte ausgeführt werden.
lachhaft ist, dass du nicht mal prüfst wie der parameter aussieht...

und du wunderst dich noch?

Antwort 2 von pYro

Es wäre nett wenn du mir eine Lösung vorschlagen könntest und mich nicht fertigmachen könntest. Danke.

Antwort 3 von pYro

Kann mir einer helfen und mir sagen wie so eine Paramterüberprüfung aussieht?

Wäre echt nett.

Antwort 4 von robbie17

wieviele verschiedene gültige werte kann file denn annehmen?

Antwort 5 von pYro

Ich erkläre mal den aufbau, dann wirds vllt klarer. Ich habe eine Navigation. In der sind logischerweise links. Diese sehen so aus:

<a href=www.ama.de/content.php?file=links> Links </a>

damit wenn man auf den link "links" klickt die Datei links.htm includet wird, habe ich diesen include befehl gemacht. Wie könnte ich diesen Code verändern, dass ich die Paramter überprüfe und/oder ne alternative zu diesem Code.

danke


Antwort 6 von robbie17

ich denke es gibt prinzipiell zwei möglichkeiten:

entweder das skript kennt alle gültigen werte
und prüft ob die eingabe mit einem übereinstimmt

oder du programmierst eine routine die
die formale gültigkeit der eingabe prüft

letzteres ist aber immer problematisch
weil es zb möglichkeiten gibt zeichen zu maskieren

wieviele gültige links gibt es denn?

Antwort 7 von ClemBra

Eine Beispiellösung:

<?
//Hier alle gültigen Einträge angeben
$gueltiges=array("seite1","seite2","seite3");
//Parameter wird geprüft
if (!empty($_GET['file'])) {
  foreach($gueltiges as $test) {
    if ($_GET['file']==$test) $link=$_GET['file'];
  }
}
//Standardseite wenn file unbekannt:
if (empty($test)) $test="home";
//Seite wird eingebunden
include($test.".htm");
?>


Antwort 8 von ClemBra

Sorry, muss natürlich $link statt $test nach der Schleife sein!

Antwort 9 von f*euervogel

http://www.dclp-faq.de/ch/ch-security.html

benutzereingaben sollten _immer_ überprüft werden, grade bei so sensiblen sachen.

p.s.: und wenn du denkst, dass ich dich fertig gemacht habe: sind wir hier im kindergarten? darf ich dich nur mit samthandschuhen anfassen?
da können böse menschen fremden code auf einem server ausführen, der noch nicht mal dir gehört...und habens vielleicht schon versucht und bist dir nicht klar, was das bedeutet...na denn...

Antwort 10 von Dr.Ma-Busen

Zitat:
...da können böse menschen fremden code auf einem server ausführen, der noch nicht mal dir gehört...und habens vielleicht schon versucht und bist dir nicht klar, was das bedeutet...na denn...

... sollte er lieber Bäcker werden, weil dann kann er den mist wenigstens auf essen den er da verzapft hat.

Das würde jetzt ein ehemaliger Lehrer von mir sagen *GG*

Sorry, aber ich konnte jetzt irgendwie nicht anders, hat so in den Fingern gejuckt das los zu werden

Antwort 11 von f*euervogel

ich denke nur, wenn man anfängt irgendwas zu tun sollte man sich vielleicht _vorher_ irgendwelche grundlagen durchlesen und wenn man auf fremden server scripte laufen lässt sollten die vielleicht wenigstens keinen schaden anrichten können.

aber auf mich hört ja keiner ;-P