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?
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.
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
<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?
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...
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...
...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
aber auf mich hört ja keiner ;-P

