Zwei klassische Injection-Schwachstellen im Vergleich: Benutzereingaben, die ungeprüft in eine Datenbankabfrage bzw. einen Shell-Befehl eingebaut werden. Demo starten und Schritt für Schritt verfolgen, wie aus einer harmlosen Eingabe ein manipulierter Befehl wird.
Eine Suchfunktion nimmt einen Benutzernamen entgegen und baut daraus per String-Konkatenation eine SQL-Abfrage. Wird die Eingabe nicht escaped oder als Parameter gebunden, kann ein Angreifer die Struktur der Abfrage selbst verändern — statt eines Namens einen Teil der WHERE-Bedingung.
Eingabe — das tippt der Nutzer ins Suchfeld
Tatsächlich ausgeführte Query — das sieht die Datenbank
| id | username | rolle |
|---|
Eine Web-Anwendung nimmt einen Hostnamen entgegen und ruft im Hintergrund ping über eine Shell auf, um die Erreichbarkeit zu prüfen. Wird die Eingabe direkt in den Shell-Befehl eingesetzt, kann ein Angreifer über Shell-Metazeichen zusätzliche Befehle anhängen.
Eingabe — das tippt der Nutzer ins Hostname-Feld
Tatsächlich ausgeführter Befehl — das sieht die Shell