Skip to content

Archives

  • Januar 2022
  • Dezember 2021
  • November 2021
  • Oktober 2021
  • September 2021

Categories

  • Keine Kategorien
Trend RepositoryArticles and guides
Articles

Kommandozeilenzugriff vom Browser mit shell.php

On Januar 5, 2022 by admin

Manchmal möchte man vom Browser aus auf die Shell zugreifen. Dies kann mit PHP erreicht werden, wenn die Sicherheitseinstellungen dies zulassen. Ich habe diese Funktionalität in shell.php implementiert (verfügbar auf Github). Im obigen Screenshot sehen Sie, wie der Shell-Zugriff über einen Browser funktioniert. Das Skript ermöglicht das Hochladen, Herunterladen, Anzeigen, Bearbeiten und Entfernen einer Datei, das Zippen und Entpacken eines Verzeichnisses und das Durchsuchen der Verzeichnisse auf dem Server mit der Maus, aber Sie können auch benutzerdefinierte Befehle über die Tastatur eingeben.

  • Sicherheitswarnung und Haftungsausschluss
  • Bekannte Probleme
  • PHP-Shell-Ausführungsbefehle
  • Härtet Ihren Server mit open_basedir
  • Kannst du Suhosin nicht finden?
  • Privilegientrennung
  • Fazit

Sicherheitswarnung und Haftungsausschluss

Bitte führen Sie dieses Skript nur auf Rechnern aus, die Ihnen gehören (oder während eines autorisierten Pests). Vergewissern Sie sich außerdem, dass der Rechner über eine ordnungsgemäße Firewall verfügt (Port 80 sollte nicht aus dem Internet erreichbar sein). Verwenden Sie es nicht für bösartige Zwecke! Lesen Sie hier mehr über den Missbrauch von Shell-Skripten.

Bekannte Probleme

Wenn das Skript nicht funktioniert, kann es daran liegen, dass die PHP-„Passthru“-Funktion, auf die es sich stützt, deaktiviert ist. Um die deaktivierten PHP-Funktionen aufzulisten, führen Sie den folgenden PHP-Code aus:

var_dump(ini_get('safe_mode'));var_dump(explode(',',ini_get('disable_functions')));var_dump(explode(',',ini_get('suhosin.executor.func.blacklist')));

Auf einem sofort einsatzbereiten Ubuntu 14.04 ergibt das folgende Ausgabe:

bool(false)Array( => pcntl_alarm => pcntl_fork => pcntl_waitpid => pcntl_wait => pcntl_wifexited => pcntl_wifstopped => pcntl_wifsignaled => pcntl_wexitstatus => pcntl_wtermsig => pcntl_wstopsig => pcntl_signal => pcntl_signal_dispatch => pcntl_get_last_error => pcntl_strerror => pcntl_sigprocmask => pcntl_sigwaitinfo => pcntl_sigtimedwait => pcntl_exec => pcntl_getpriority => pcntl_setpriority =>)Array( =>)

PHP-Shell-Ausführungsbefehle

Wenn das Skript mit passthru() nicht ausgeführt werden kann, versucht es einige andere Befehle. Die folgenden Befehle sind ähnlich:

  • exec() Gibt die letzte Zeile der Befehlsausgabe zurück
  • passthru() Gibt die Befehlsausgabe direkt an den Browser weiter
  • system() Gibt die Befehlsausgabe direkt an den Browser weiter und gibt die letzte Zeile zurück
  • shell_exec() Gibt die Befehlsausgabe zurück
  • popen() Öffnet eine Lese- oder Schreib-Pipe zur Verarbeitung eines Befehls
  • proc_open() Ähnlich wie popen(), aber mit mehr Kontrolle
  • pcntl_exec() Führt ein Programm aus

Härtet Ihren Server mit open_basedir

Wenn Ihnen das obige Skript unheimlich erscheint, dann möchten Sie vielleicht verhindern, dass es auf Ihrem Server ausgeführt wird. Sie können dies tun, indem Sie den abgesicherten Modus aktivieren (veraltet), die php.ini-Variable „disable_functions“ und/oder die Suhosin-Funktionsausführungs-Blacklist verwenden.

Ich habe einen gut geschriebenen Beitrag über die Absicherung Ihrer PHP-Installation gefunden, sehen Sie ihn sich an! Neben der Einschränkung der ausführbaren Funktionen empfehlen sie auch die „open_basedir“ php.ini Konfigurationsvariable. Sie schränkt die Dateien, auf die PHP zugreifen kann, auf den angegebenen Verzeichnisbaum ein. Ich glaube, dass dies ein mächtiges Werkzeug ist.

Auch könnte es eine gute Idee sein, Ihr „/tmp“-Verzeichnis mit „nodev“, „nosuid“ und „noexec“-Flag zu sichern, wie hier beschrieben.

Kannst du Suhosin nicht finden?

Bitte beachte, dass das „php5-suhosin“-Paket (eine PHP-Sicherheitserweiterung) auf Debian-basierten Systemen nicht mehr installiert und verfügbar ist. Einige der Sicherheitsverbesserungen wurden in die neuesten PHP-Versionen (5.4 und 5.5) integriert. Wenn Sie Suhosin (von Github) auf Ubuntu 14.04 (PHP 5.5.9) installieren möchten, können Sie dieser Anleitung folgen.

Sie können mehr über die Kontroverse um die Entfernung von Suhosin auf LWN.net lesen.

Privilegientrennung

Wenn es mehrere Benutzer auf dem System gibt, ist „Privilegientrennung“ ein MUSS. Das bedeutet, den PHP-Code im Benutzerkontext auszuführen (z.B. als Benutzer „maurits“) und nicht als Benutzer „www-data“. Ich habe einen tollen Artikel gefunden, der erklärt, wie dies erreicht werden kann. Die einfachste Lösung ist die Ausführung von:

sudo apt-get install libapache2-mpm-itk

Und dann das Hinzufügen der Direktive „AssignUserID“ zu jeder „VirtualHost“-Konfiguration. Beachten Sie, dass dies vielleicht nicht die sicherste Lösung ist, aber sie funktioniert gut und ist einfach zu installieren.

Fazit

Sie sollten PHP immer auf die neueste Version aktualisieren und patchen, um die Ausnutzung bekannter Sicherheitslücken zu verhindern. Tools wie „disable_functions“, „open_basedir“, Suhosin und Filesystem Flags reduzieren die Angriffsfläche und verhindern das Ausnutzen von unbekannten Sicherheitslücken. Mit ihnen können Sie eine mehrschichtige Sicherheitsstrategie umsetzen. Vergessen Sie auch nicht die Privilegientrennung.

Share

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Archive

  • Januar 2022
  • Dezember 2021
  • November 2021
  • Oktober 2021
  • September 2021

Meta

  • Anmelden
  • Feed der Einträge
  • Kommentare-Feed
  • WordPress.org
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress