Frage:
Sichern Sie ein PHP-Skript erneut
user187
2013-03-27 13:23:11 UTC
view on stackexchange narkive permalink

Ich habe ein sehr chaotisches PHP-Skript, dessen Funktion ich bestimmen muss. Ich kann den Code nicht ganz verstehen, er ist wirklich chaotisch. Jetzt dachte ich, ich könnte dieses Skript vielleicht zurückentwickeln.

Ich möchte dieses Skript ausführen (eventuell mit bestimmten kommentierten Teilen), um besser zu verstehen, welcher Teil des Skripts was tut. Mit diesen Informationen sollte ich in der Lage sein, das Skript vollständig zu verstehen.

Ich möchte jedoch nichts in der Datenbank auf dem Server ändern, ich möchte nicht, dass das Skript dies tut Mail-Dinge usw. Grundsätzlich sollte das Skript vollständig von der Welt getrennt sein, aber ich möchte sehen, was es versucht zu tun. Wenn das Skript beispielsweise eine mail () -Funktion ausführt, möchte ich sehen, dass eine Mail gesendet wurde, wenn das Skript nicht von der Welt getrennt wäre.

Ich benötige daher eine Kopie der Serverinstallation (Ubuntu Server 12.04), was nicht so schwer ist. Der schwierige Teil ist, dass ich ein System haben muss, das so verhält wie die Außenwelt, aber tatsächlich ein Protokollierungssystem ist, in dem ich sehen kann, was passiert.

Gibt es Tools, die dies tun können? Wenn nicht, wie soll ich es selbst bauen?

Ist hier das Tag [tag: software] erforderlich? http://meta.reverseengineering.stackexchange.com/q/3/189
@AshRj Ich habe es entfernt.
Vier antworten:
#1
+8
amccormack
2013-03-28 04:21:19 UTC
view on stackexchange narkive permalink

Ich würde empfehlen, virtuelle Maschinen zum Testen Ihres Beispiels zu verwenden. Wenn das Beispiel mit anderen Computern interagiert (z. B. wenn es E-Mails sendet, sich der Mailserver jedoch unter mail.example.com befindet), möchten Sie wahrscheinlich ein Setup mit zwei Computern emulieren. Wenn auf dem Computer, auf dem Ihr Beispiel ausgeführt wird, bereits alles konfiguriert ist (sodass E-Mail-Anrufe lokal getätigt werden), benötigen Sie wahrscheinlich nur eine virtuelle Maschine.

Richten Sie ein Netzwerk nur für Hosts virtueller Maschinen ein

Sie können VMWare verwenden, wenn Sie es haben, oder Sie können die VirtualBox verwenden, die kostenlos ist. Wenn Sie ein Nur-Host-Netzwerk verwenden ( VMWare oder VirtualBox), können Sie den Netzwerkverkehr der VMs von Ihrem Host aus abhören, aber der Verkehr wird Ihren Host niemals verlassen .

Vor dem Ausführen des Beispiels

Wenn Sie den Verdacht haben, dass dieses PHP-Skript den Status Ihrer virtuellen Maschine ändert (z. B. werden Datenbanken gelöscht oder Dateien überschrieben), empfehle ich Ihnen, a Schnappschuss. Auf diese Weise können Sie alle Änderungen, die beim Ausführen des Skripts vorgenommen werden, jederzeit zurücksetzen. Anweisungen für VMWare oder VirtualBox.

Ausführen des Beispiels

Sobald das virtuelle Netzwerk erstellt wurde, können Sie Ihr Beispiel während der Erfassung ausführen Verkehr mit einem Tool wie Wireshark. Dadurch wird der gesamte Netzwerkverkehr erfasst.

Feedback von außen erhalten

Wie Sie es beschrieben haben, muss Ihr Beispiel wahrscheinlich nicht mit gefälschten Diensten kommunizieren. Wenn dies jedoch der Fall ist, finden Sie hier eine Einige Anwendungen, die Sie sich ansehen können.

  • Windows
    • FakeNet Wie von Mick erwähnt, ist dies eine gute Lösung, wenn Sie unter Windows XP SP3 arbeiten .
  • Linux
    • inetsim - Dies simuliert Antworten für Protokolle auf Anwendungsebene wie HTTP, TCP oder SMTP. Es kann auch auf DNS-Anfragen antworten.
    • Honeyd - Dies ist leichter als inetsim, simuliert jedoch auch Antworten für Protokolle auf Anwendungsebene wie HTTP, TCP oder SMTP. Es kann auch auf DNS-Anfragen antworten.
    • farpd - Dieses Dienstprogramm ist sehr nützlich, wenn Sie die anzufordernde IP-Adresse nicht kennen. Diese Anwendung kann verwendet werden, um IP-Verkehr auf Ihre virtuelle Maschine umzuleiten.
#2
+5
Mick
2013-03-27 19:12:33 UTC
view on stackexchange narkive permalink

Möglicherweise können Sie Open Source FakeNet verwenden, um ein echtes Netzwerk zu simulieren.

FakeNet kann jedoch auf einem XP SP3-System ausgeführt werden. Wenn Sie es verwenden, müssen Sie sicherstellen, dass der Datenverkehr von Ihrem Ubuntu-System / Ihrer VM zu einem XP sp3-System geleitet wird /VM.

Es gibt wahrscheinlich einige Linux-basierte FakeNet-Alternativen, aber ich habe FakeNet bereits bei der Analyse von Windows-Malware verwendet und es funktioniert sehr gut.

Funktionen

  • Unterstützt DNS, HTTP und SSL
  • Der HTTP-Server stellt immer eine Datei bereit und versucht, eine aussagekräftige Datei bereitzustellen. Wenn die Malware eine JPG-Datei anfordert, wird eine ordnungsgemäß formatierte JPG-Datei usw. bereitgestellt. Die bereitgestellten Dateien können vom Benutzer konfiguriert werden.
  • Möglichkeit, den gesamten Datenverkehr an den lokalen Host umzuleiten, einschließlich des Datenverkehrs, der für eine fest codierte Datei bestimmt ist IP-Adresse.
  • Python-Erweiterungen, einschließlich einer Beispielerweiterung, die SMTP und SMTP über SSL implementiert.
  • Integrierte Fähigkeit zum Erstellen einer Erfassungsdatei (.pcap) für Pakete auf localhost.
  • Dummy-Listener, der auf Datenverkehr an einem beliebigen Port wartet, SSL-Datenverkehr automatisch erkennt und entschlüsselt und den Inhalt der Konsole anzeigt.
#3
+5
Daniel W. Steinbrook
2013-03-28 07:34:33 UTC
view on stackexchange narkive permalink

Eine allgemeinere Lösung besteht darin, so etwas wie runkit zu verwenden, eine PHP-Erweiterung, um beliebige Funktionsaufrufe abzufangen. Anstatt zu versuchen, ein Netzwerk zu simulieren (die sicherere Option für Ihre Situation), könnten Sie einfach runkit_function_redefine verwenden, um eine Nachricht zu protokollieren, wenn Sie stattdessen den vollständigen Satz von Funktionen kennen, die Sie nicht aufrufen möchten stattdessen.

Der Nachteil dieser Art von Ansatz ist, dass Sie vordefinieren müssen, was Sie fangen möchten, wenn Sie es vorher nicht wissen.
#4
+3
jg0
2013-03-28 07:58:40 UTC
view on stackexchange narkive permalink

Da Sie bereits über die Quelldatei verfügen, gibt es meines Erachtens einen einfacheren und einfacheren Ansatz (im Vergleich zum Umleiten des Netzwerkverkehrs auf niedriger Ebene besteht das Abfangen der aufgerufenen Methoden darin).

Erstens: Identifizieren und ersetzen Sie Methoden in Ihrer PHP-Datei (denken Sie daran, eine Kopie zu erstellen!). Wenn Sie beispielsweise mail () abfangen möchten, können Sie mail () finden und durch shim_mail ( ersetzen. Sie können dies auch tun für andere interessante Methoden wie mysql_connect () .

Wenn Sie fertig sind, fügen Sie include 'shim.php' hinzu; Das "Shim" fungiert als Ebene zwischen dem PHP-Skript und der eigentlichen Methode, sodass Sie es in einer Textdatei protokollieren, ausführen oder sogar auf eine Replikatdatenbank verweisen können !

shim.php

  $ logfile = 'log.txt'; Funktion shim_mysql_connect ($ server, $ username, $ password, $ new_link = false, $ client_flags = 0) {file_put_contents ($ logfile, file_get_contents ($ logfile). "\ r \ nmysql_connect () zu". $ server. "mit Benutzername". $ username. "und Passwort". $ password); // abfangen Geben Sie den Befehl ein und zeigen Sie auf den 'Honeypot'. Geben Sie mysql_connect ('Ihr_ neuer_Server', 'Benutzername', 'Passwort') zurück.} Funktion shim_mail ($ to, $ subject, $ message, $ a dditional_headers = '', $ Additional_parameters = '') {file_put_contents ($ logfile, file_get_contents ($ logfile). "\ r \ nmail () bis". $ bis. "mit Betreff". $ subject. "und Nachricht". $ message); // Sende eigentlich keine E-Mail}? >  

In dieser Shim-Datei können Sie Funktionen hinzufügen, über die Sie sich informieren möchten (indem Sie einfach dieselbe Methodensignatur wie die kopieren Originaldatei und Drucken relevanter Protokolle). Wenn Sie sich das Protokoll ansehen, können Sie wahrscheinlich viel mehr über das PHP-Skript herausfinden!

(Während ich dies auf halbem Weg komponierte, stellte ich fest, dass Daniel W. Steinbrook auch eine ähnliche Methode entwickelt hat. Meine Methode hat den leichten Vorteil, dass sie einfacher ist, ohne neue Abhängigkeiten hinzuzufügen, aber das Runkit klingt wie ein richtig . In beiden Fällen können Sie einfach einen auswählen, der funktioniert!)

Die Einfachheit dieser Technik ist erwähnenswert.
Diese Technik ist NICHT ausreichend. Http://www.php.net/manual/en/functions.variable-functions.php


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...