Press "Enter" to skip to content

Trainingsanwendung: SQL-Injection innerhalb eines Node.js Projekts

Im Repository befindet sich ein verwundbares NodeJS Projekt. In dieses Projekt wurde eine SQL-Injection Schwachstelle eingebaut. In der Datei „/routes/users.js“ befindet sich die Applikationslogik für die Fälle „User einloggen“, „User registrieren“ und „User anzeigen“. Die Informationen werden über die REST-API im JSON-Format übertragen. Die Datenhaltung der Applikation erfolgt in einer MySql-Datenbank.

Download Anwendung

git clone https://github.com/JavanXD/nodejs-backend-vulnerable-to-sql-injection.git SQL-Injection-sampleapp

Zur Installation der Entwicklungsumgebung kann den Schritten in der „README.md“ gefolgt werden. Die verwendete Entwicklungsumgebung ist JetBrains WebStrom. Die Dateien können jedoch auch mit einem herkömmlichen Editor angeschaut werden.

Zur Demonstration von SQL-Injection wurde der SQL-Query für „User einloggen“ so manipuliert, dass die Benutzereingaben „email“ und „password“ ohne Codierung in den Query übernommen werden. Um diese Schwachstelle zu schaffen, musste der von „node-mysql“ integrierte Schutz, der standardgemäß alle Parameter escaped, umgangen werden. Dies könnte jedoch auch in der Entwicklung unabsichtlich geschehen, beispielsweise durch einen leichtsinnigen oder unsachgemäßen Umgang. In älteren Frameworkversionen war dieser eingebaute Schutz nicht immer standardgemäß aktiviert.

Der nun folgende Screenshot zeigt den Quellcode von Zeile 71 bis 77 aus der „users.js“:

Quellcode: SQL-Injection innerhalb eines Node.js Projekts.

Durch einen POST-Aufruf auf „/users/login“ mit dem POST-Body „{email: „“, password: „“}“ wird die Login-Methode ausgeführt. Ein erfolgreicher Angriffsvektor ist die Zeichenkette „admin’ OR ‘1’=’1“. Diese Zeichenkette wird als „email“-Paramater mitgeschickt. Für „password“ kann ein beliebiger Wert mitgeschickt werden, da durch das „OR 1=1“ die Bedingung bereits wahr ist. Nach abschließendem Angriff ist der Angreifer als Benutzer „admin“ eingeloggt.

Leave a Reply

Your email address will not be published. Required fields are marked *