Die RoboterSteckbrief des Diebs
Die Liste des Diebs
Jeden Tag fragen Programme bei Pyssly nach Dateien, die wir nie hatten: Passwörter, Quellcode und Backups. Hier ist die Liste, wie oft gefragt wurde, warum der Dieb die Dateien will und wie du deine eigene Seite schützt.

Wer ist der Dieb?
Der Dieb ist meistens kein Mensch, der sucht. Es ist ein Programm, das mit derselben Liste von Seite zu Seite geht und nach jeder Datei fragt.
Antwortet eine Seite mit der Datei, hat der Dieb den Schlüssel, ohne irgendetwas aufzubrechen. Pyssly hat keine dieser Dateien, also bekommt der Dieb eine Scheinseite und wir zählen die Anfrage.
Hast du eine Homepage, eine Website oder einen Server: Sorge dafür, dass sich diese Dateien nicht abrufen lassen. Ganz unten steht, wie du das prüfst.
Am meisten gesucht
So oft haben Roboter bei Pyssly nach den Dateien gefragt.
Ich zähle …
Passwörter und Schlüssel
Der größte Schatz: eine einzige Datei mit allem, was die Seite aufschließt.
/.envIch zähle …Was ist das? Eine kleine Textdatei, in der viele Seiten ihre Geheimnisse speichern: das Passwort der Datenbank, Schlüssel für Bezahldienste und E-Mail, und den Schlüssel, der Anmeldungen sicher hält. Auch Varianten wie .env.production und env.js.
Warum will der Dieb sie? Damit kann der Dieb sich in die Datenbank einloggen, E-Mails im Namen der Seite verschicken oder die Konten der Seite bei anderen Diensten benutzen.
/config.jsonIch zähle …Was ist das? Einstellungsdateien: config.json, settings.py, web.config, docker-compose.yml, appsettings.json, credentials.json, die service-account.json eines Cloud-Kontos und terraform.tfvars von Terraform.
Warum will der Dieb sie? Sie enthalten oft dieselben Geheimnisse wie .env, und dazu, wo Datenbank und Server stehen. Eine service-account.json oder eine tfvars-Datei kann das ganze Cloud-Konto öffnen.
/id_rsaIch zähle …Was ist das? Ein SSH-Schlüssel: die geheime Hälfte des Schlüssels, mit dem man sich ohne Passwort auf einem Server anmelden kann.
Warum will der Dieb sie? Wer die Datei hat, kann sich oft direkt auf dem Server anmelden, wie der Besitzer selbst.
/.htaccessIch zähle …Was ist das? Andere Dateien, deren Name mit einem Punkt anfängt, wie .htaccess, .htpasswd, .DS_Store und .bash_history. Der Punkt bedeutet auf dem Computer versteckt, aber nicht im Web.
Warum will der Dieb sie? Sie zeigen, wie der Server eingestellt ist und welche Dateien es gibt, und manchmal Passwörter (.htpasswd) oder Befehle, die jemand getippt hat.
So schützt du dich
- Lege Geheimnisse nie in den Ordner, den der Webserver zeigt. Lies sie stattdessen aus Umgebungsvariablen oder einem Geheimnis-Dienst (Secrets in Kubernetes, GitHub Actions oder der Cloud).
- Sperre im Webserver alle Dateien und Ordner, die mit einem Punkt anfangen, außer /.well-known/. Wie das geht, steht weiter unten.
- Lege nie einen privaten Schlüssel in den Webordner, und behalte deine eigenen Anmeldeschlüssel für dich, geschützt mit einer Passphrase.
Der Quellcode
Der ganze Code der Seite, mit jeder Änderung, die je gemacht wurde.
/.git/Ich zähle …Was ist das? Der Ordner, in dem Git die ganze Geschichte eines Projekts speichert. Liegt er auf dem Server, kann jeder den ganzen Code herunterladen, Datei für Datei.
Warum will der Dieb sie? Im Code sucht der Dieb nach Passwörtern, die jemand einmal eingetragen und dann gelöscht hat (in der Geschichte sind sie noch da), und nach Fehlern, die er ausnutzen kann.
/.svn/Ich zähle …Was ist das? Dasselbe für ältere Versionsverwaltungen: Subversion (.svn), Mercurial (.hg), Bazaar und CVS.
Warum will der Dieb sie? Genau wie bei .git: Quellcode und alte Geheimnisse.
So schützt du dich
- Lade den .git-Ordner nie hoch. Baue die Seite und schicke nur das Gebaute, oder halte den Ordner mit einer .dockerignore draußen.
- Sperre Punkt-Ordner im Webserver als zusätzliche Sicherung.
- Stand einmal ein Passwort im Code: Ändere es. Es in einer neuen Änderung zu löschen reicht nicht, denn in der Geschichte bleibt es erhalten.
Datenbanken und Backups
Kopien, die jemand kurz auf den Server gelegt und dann vergessen hat.
*.sqlIch zähle …Was ist das? Ein Datenbank-Dump: die ganze Datenbank als eine Datei, zum Beispiel backup.sql oder db.sql.gz.
Warum will der Dieb sie? Dort steht alles, was die Seite weiß: Nutzer, E-Mail-Adressen, Passwörter (hoffentlich gehasht) und Bestellungen. Ein Datenleck auf einen Schlag.
*.bakIch zähle …Was ist das? Backups und alte Versionen: .bak, .old, .orig, .swp, und Archive wie site.zip oder backup.tar.gz.
Warum will der Dieb sie? Eine wp-config.php.bak wird als Text angezeigt statt ausgeführt, also stehen die Passwörter im Klartext da. Ein Zip-Archiv kann die ganze Seite sein.
So schützt du dich
- Speichere Backups außerhalb des Webordners, am besten auf einem anderen Rechner.
- Sperre .sql, .bak, .zip und Ähnliches im Webserver.
- Bearbeite Dateien nicht direkt auf dem Server: Editoren lassen Kopien wie .swp und ~ zurück.
WordPress
WordPress treibt einen großen Teil des Webs an, deshalb probiert der Dieb immer seine Türen aus, auch bei Seiten ohne WordPress, wie Pyssly.
/wp-login.phpIch zähle …Was ist das? Die Anmeldeseite von WordPress.
Warum will der Dieb sie? Der Dieb probiert immer wieder gängige Benutzernamen und Passwörter und hofft, dass eines passt.
/wp-admin/Ich zähle …Was ist das? Der Ordner für das Admin-Panel von WordPress, mit der Installationsseite darin.
Warum will der Dieb sie? Eine halbfertige Installation kann der Dieb selbst abschließen und so Admin werden. Sonst ist es dieselbe Tür wie die Anmeldung.
/xmlrpc.phpIch zähle …Was ist das? Eine alte Schnittstelle in WordPress, um von anderen Programmen aus zu veröffentlichen.
Warum will der Dieb sie? In alten Versionen konnte der Dieb Hunderte Passwörter in einem einzigen Aufruf probieren. Sie ist immer noch eine Tür zum Raten von Passwörtern, und Pingbacks können die Seite dazu bringen, Verkehr auf andere Seiten zu schicken.
/wp-content/Ich zähle …Was ist das? Der Ordner mit Plugins, Themes und hochgeladenen Dateien.
Warum will der Dieb sie? Der Dieb sucht nach alten Plugins mit bekannten Sicherheitslücken und nach Backups, die Plugins dort abgelegt haben.
/wp-includes/Ich zähle …Was ist das? Die eigenen Programmdateien von WordPress.
Warum will der Dieb sie? Sie zeigen, welche Version die Seite nutzt, und damit, welche bekannten Lücken es geben kann.
/wp-json/Ich zähle …Was ist das? Die REST-Schnittstelle von WordPress.
Warum will der Dieb sie? Sie kann die Benutzernamen der Seite auflisten, so weiß der Dieb, bei welchen Konten sich Passwort-Versuche lohnen.
/wp-config.phpIch zähle …Was ist das? Die Einstellungsdatei von WordPress, mit dem Passwort der Datenbank und den geheimen Schlüsseln der Seite.
Warum will der Dieb sie? Läuft PHP wie es soll, sieht niemand den Inhalt, aber eine Kopie (wp-config.php.bak, wp-config.php~) oder ein kaputter Server zeigt alles.
So schützt du dich
- Aktualisiere WordPress, Themes und Plugins, und lösche Plugins, die du nicht benutzt.
- Schalte die Zwei-Faktor-Anmeldung ein und deaktiviere xmlrpc.php, wenn du sie nicht brauchst.
- WordPress sucht wp-config.php auch einen Ordner über der Installation. Verschiebe sie nur dorthin, wenn dieser Ordner nicht selbst im Web zu sehen ist, und lass nie Kopien der Datei liegen.
Datenbank-Werkzeuge
Programme, mit denen man die Datenbank von einer Webseite aus verwalten kann.
/phpmyadmin/Ich zähle …Was ist das? phpMyAdmin, ein gängiges Werkzeug, um MySQL-Datenbanken im Browser zu verwalten.
Warum will der Dieb sie? Findet der Dieb es, probiert er Passwörter oder bekannte Lücken in alten Versionen. Kommt er rein, hat er die ganze Datenbank.
/adminer.phpIch zähle …Was ist das? Adminer, ein ähnliches Werkzeug in einer einzigen Datei, das oft kurz hochgeladen und dann vergessen wird.
Warum will der Dieb sie? Dasselbe wie bei phpMyAdmin: eine Anmeldung direkt in die Datenbank.
So schützt du dich
- Lege keine Datenbank-Werkzeuge auf die öffentliche Seite. Nutze sie auf deinem eigenen Computer und erreiche die Datenbank über einen SSH-Tunnel oder ein VPN.
- Müssen sie sein: Sperre sie hinter einer zusätzlichen Anmeldung oder einer Liste erlaubter Adressen.
Fehlersuche-Seiten
Seiten, mit denen Entwickler in eine laufende Seite hineinschauen. Gut auf deinem eigenen Computer, gefährlich im Web.
/phpinfo.phpIch zähle …Was ist das? Eine Seite, die alle Einstellungen von PHP zeigt, auch die Umgebungsvariablen.
Warum will der Dieb sie? Dort stehen oft Passwörter und Schlüssel, Pfade und genaue Versionen: eine Karte des Servers.
/vendor/phpunit/Ich zähle …Was ist das? Ein Testwerkzeug für PHP, das manchmal im Ordner vendor mit auf den Server kommt.
Warum will der Dieb sie? Alte Versionen haben eine Lücke, durch die jeder eigenen Code auf dem Server ausführen kann.
/actuator/Ich zähle …Was ist das? Die Betriebsseiten von Spring Boot für Java-Apps.
Warum will der Dieb sie? Manche davon zeigen Umgebungsvariablen, Einstellungen oder einen Speicherauszug mit Passwörtern darin.
/server-statusIch zähle …Was ist das? Die Statusseite von Apache, die zeigt, was der Server gerade tut.
Warum will der Dieb sie? Sie zeigt, welche Adressen alle Besucher abfragen, manchmal mit geheimen Links und Schlüsseln darin.
/_ignition/Ich zähle …Was ist das? Ignition, die Fehlersuche-Seite von Laravel.
Warum will der Dieb sie? Alte Versionen haben eine Lücke, durch die der Dieb eigenen Code ausführen kann, und eine Fehlerseite zeigt oft die Einstellungen.
/_profiler/Ich zähle …Was ist das? Der Profiler von Symfony, der jeden Aufruf mit allem speichert, was darin war.
Warum will der Dieb sie? Er zeigt Anmeldungen, Sitzungen und Einstellungen für jeden Besuch, auch die von anderen.
So schützt du dich
- Lasse eine Seite im Web nie im Debug-Modus laufen: APP_DEBUG=false, und keine Entwicklungsumgebung im Betrieb.
- Entferne phpinfo-Dateien und Testwerkzeuge, bevor die Seite online geht (composer install --no-dev).
- Beschränke den Zugriff auf Betriebsseiten wie Actuator und server-status auf deine eigene IP-Adresse oder ein internes Netz.
Alte Türen
Programme und Seiten, die der Server ausführt, wenn jemand danach fragt.
/cgi-bin/Ich zähle …Was ist das? Ein Ordner für alte Skripte, die der Server ausführt, oft in Perl oder Shell.
Warum will der Dieb sie? Alte Skripte haben bekannte Lücken, wie Shellshock, mit denen der Dieb Befehle auf dem Server ausführen kann.
/boaform/Ich zähle …Was ist das? Einstellungsseiten von Routern und Kameras (boaform, HNAP1).
Warum will der Dieb sie? Der Dieb sucht Geräte, die er mit alten Lücken oder Werkspasswörtern übernehmen und in einem Botnetz benutzen kann.
*.phpIch zähle …Was ist das? Irgendeine PHP-Datei, zum Beispiel shell.php oder eine Datei mit einem seltsamen Namen.
Warum will der Dieb sie? Oft sucht der Dieb nach einer Hintertür (einer Web-Shell), die jemand anderes schon auf die Seite gelegt hat, um sie zu übernehmen.
*.aspIch zähle …Was ist das? Programme in anderen Sprachen, die der Server ausführt: .asp, .aspx, .jsp und .cgi.
Warum will der Dieb sie? Dasselbe wie bei PHP: bekannte Lücken in alten Seiten oder eine Hintertür, die schon da ist.
So schützt du dich
- Entferne alles, was der Server nicht ausführen muss: alte Skripte, Testseiten und Ordner wie cgi-bin.
- Ändere das Werkspasswort von Routern und Kameras, aktualisiere sie und zeige ihre Einstellungsseiten nie im Internet.
- Lass nur ausführen, was ausgeführt werden soll: Eine hochgeladene Datei darf nie als Code laufen.
Shops und Phishing-Seiten
Zwei Arten von Suchen, die nicht gleich ein Einbruch sind, aber nah dran.
/cart.jsIch zähle …Was ist das? Dateien, die jeder Shopify-Shop hat, wie cart.js und products.json.
Warum will der Dieb sie? Damit findet das Programm Shops und liest Waren und Preise aus, oft um sie in falsche Shops zu kopieren.
/lander/Ich zähle …Was ist das? Reste eines Phishing-Pakets: Landingpages und Skripte, die eine Bank oder einen Paketdienst nachmachen.
Warum will der Dieb sie? Wer so fragt, sucht Seiten, auf denen schon jemand so ein Paket abgelegt hat: gehackte Seiten, die sich wiederverwenden lassen.
So schützt du dich
- Was ein Shop allen zeigt, kann jeder lesen. Lege nichts Geheimes in Waren oder Produktfelder.
- Siehst du auf deinem Server einen Ordner oder eine Datei, die du nicht kennst, wie lander/: Vielleicht ist jemand eingebrochen. Lösche sie, ändere alle Passwörter und aktualisiere alles.
Im Webserver sperren
Der beste Schutz ist, dass die Dateien nie auf dem Server liegen. Die Sperren hier sind eine zusätzliche Sicherung, falls doch etwas dort landet.
Alle lassen /.well-known/ offen, denn der Ordner wird zum Beispiel für Zertifikate gebraucht. Probiere es zuerst auf einer Testseite aus.
# First in the server block: nginx takes the first regex location that matches,
# and a location ^~ (such as /static/) skips them, so repeat these inside it.
# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
location ~ /\.(?!well-known/) {
return 404;
}
# Databases, backups and old copies
location ~* \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$ {
return 404;
}# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
RedirectMatch 404 "/\.(?!well-known/)"
# Databases, backups and old copies
<FilesMatch "\.(sql|bak|old|orig|swp|zip|tar|gz|7z)$">
Require all denied
</FilesMatch># Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
@hidden {
path_regexp /\.
not path_regexp ^/\.well-known/([^./][^/]*/?)*$
}
respond @hidden 404
# Databases, backups and old copies, /.well-known/ included
@copies path_regexp \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$
respond @copies 404**/.git
**/.env*
**/*.sql
**/*.bak
**/*.zip
**/id_*
**/*.tfvarsSo prüfst du es
Fünf Minuten in einem Terminal. Ersetze example.com durch deine eigene Adresse.
Prüfe nur deine eigene Seite. Nach den Dateien anderer zu suchen ist genau das, was der Dieb tut.
Nach .env fragen
curl -sS -i https://example.com/.envSchau dir die Antwort und den Inhalt an. 404 oder 403 ist gut. Kommen deine Einstellungen mit, ist die Datei öffentlich. (Antwortet die Seite auf alles mit 200, wie viele Apps, sollte der Inhalt deine normale Seite sein.)
Nach .git fragen
curl -sS -i https://example.com/.git/HEADSiehst du eine Zeile wie ref: refs/heads/main, liegt der ganze Quellcode offen. Eine Fehlerseite oder deine normale Seite ist gut.
Probiere es unter anderen Ordnern
curl -sS -i https://example.com/static/.envEine Sperre kann in Ordnern fehlen, die direkt ausgeliefert werden, wie /static/ oder /assets/. Probiere es dort, und probiere mehr Dateien aus der Liste, etwa eine .sql oder eine alte Kopie einer Einstellungsdatei. Es zählt, ob der Inhalt zu sehen ist.
Schau ins Log
grep -E '\.env|\.git/|wp-login|phpinfo|\.sql' /var/log/nginx/access.logDie Anfragen kommen jeden Tag, dass man sie sieht, ist also nichts Besonderes. Ein 200 im Log beweist noch kein Leck, denn viele Apps antworten mit 200 und ihrer normalen Seite. Siehst du 200 für .env oder .git/HEAD, ruf die Adresse wie oben ab und schau dir den Inhalt an.
Wenn eine Datei herauskam
- Lösche die Datei und sperre die Adresse.
- Ändere jedes Passwort und jeden Schlüssel, die darin standen: Datenbank, E-Mail, Bezahldienste und Cloud-Konto. Gehe davon aus, dass der Dieb sie schon hat.
- Schau im Log nach, wer die Datei abgerufen hat und ob seitdem etwas mit den Konten passiert ist.
Mehr über Diebe und andere Arten von Robotern in So funktionieren die Roboter.