Frage

Hallo, ich habe ein paar Fragen zu PHP exec () und passthru ().

1)
Ich nie gebrauchter exec () in PHP, aber ich habe es manchmal mit ImageMagick verwendet gesehen. Ich bin jetzt gespannt, was einige andere gemeinsame Anwendungen ist, wo exec gut in einer Web-Anwendung ist?

2)
Vor etwa 6 Jahren, als ich anfing mit PHP ich herumgespielt habe nicht wirklich etwas wissen, nur sehr rudimentäre Sachen und ich hatte eine Website, die kompromittiert wurde und jemand Setup dort eigene PHP-Datei, die die passthru () Funktion wurde mit einem Bündel passieren Verkehr throught meine Seite freie Musik oder Video, und ich wurde getroffen mit einer $ 4.000 Bandbreite Ladung von meinem Gastgeber zum Download! 6 Jahre später, weiß ich soo viel mehr darüber, wie PHP zu verwenden, aber ich weiß noch nicht, wie das mir je passiert ist, bevor. Wie kann jemand beable eine Datei auf meinem Server durch schlechten Code hinzufügen?

War es hilfreich?

Lösung

1] exec () ist wirklich nützlich, wenn Sie:

A) Möchten Sie ein Programm / Dienstprogramm auf dem Server ausgeführt werden, dass PHP keinen entsprechenden Befehl für hat. Zum Beispiel ffmpeg ist gemeinsamer Nutzen Lauf über einen exec-Aufruf (für alle Arten von Medien-Konvertierung).

B) Laufen einen anderen Prozess - die Sie blockieren kann oder nicht blockieren auf - das sehr mächtig ist. Manchmal QANT Sie ein pcnt_fork obwohl, oder ähnlich, zusammen mit dem richtigen CL args für blockierungs.

C) Ein anderes Beispiel ist, wenn ich zu Prozess XSLT habe 2.0 - Ich habe von exec () einen kleinen Java-Service, den ich laufen habe, um die Transformationen zu behandeln. Sehr praktisch. PHP unterstützt keine XSLT 2.0-Transformationen.

2] Verdammt, das ist eine Schande. Nun, viele Möglichkeiten. Theres eine Familie von Verwundbarkeit namens „Remote-Datei enthalten vulns“, die im Grunde ein Angreifer beliebigen Quelle aufzunehmen und damit es auf dem Server auszuführen. Schauen Sie sich auf: http://lwn.net/Articles/203904/

Auch oben erwähnt, sagen Sie tun so etwas wie (stark vereinfacht):

exec("someUnixUtility -f $_GET['arg1']"); 

Nun, stellt die Angreifer nicht, url.come arg1 = "bla; rm -rf /", wird Ihr Code im Grunde laufen auf:?

exec("someUnixUtility -f blah; rm -rf /");

Was in Unix, Sie trennen Befehle w / die; Also ja -., Dass eine Menge Schaden sein könnte

Same mit einem Datei-Upload, stellen Sie sich die letzten vier Zeichen Streifen (.ext), um die Erweiterung zu finden. Nun, was ist so etwas wie dieses „exploit.php.gif“, dann Sie die Erweiterung abzustreifen, so haben Sie exploit.php und bewegen Sie sie in Ihre / users / imgs / Ordner. Nun, alle Angreifer nun zu tun hat, ist browse an Benutzer / imgs / exploit.php und sie können jeden Code, den sie wollen laufen. Sie haben an diesem Punkt im Besitz.

Andere Tipps

  1. Verwenden exec oder wenn Sie ein anderes Programm ausgeführt werden sollen.

  2. Die Dokumentation für passthru sagt:

  

Warnung

     

Wenn Benutzer gelieferten Daten ermöglicht diese Funktion übergeben werden, verwenden Sie escapeshellarg() oder escapeshellcmd() , um sicherzustellen, dass die Nutzer das System nicht betrügen kann willkürliche Befehle.

hatte jemand wahrscheinlich eine Sicherheitslücke in Ihrem Skript gefunden, die sie beliebige Befehle auszuführen erlaubt. Verwenden Sie die angegebenen Funktionen Ihre Eingaben beim nächsten Mal zu sanieren. Denken Sie daran, nichts von dem Client gesendet werden, kann immer vertraut werden.

exec() können Sie kompilierten Code verwenden, die auf dem Server ist, die als PHP schneller laufen würde, was interpretiert wird.

Wenn Sie also eine große Menge haben, dass die Bedürfnisse der Verarbeitung schnell durchgeführt werden, exec() nützlich sein könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top