Wir haben die Befehlseinfügung und -ausführung in Node JS behandelt. Das Szenario umfasste ein Eingabefeld, das Benutzereingaben als Zahlen an eine Rechnerfunktion weitergibt, die eine EVAL()-Funktion verwendet, um die Ausgabe der Rechenoperation zu berechnen und an den Benutzer zurückzugeben. Die EVAL()-Funktion und der Rechner implementieren keine Art von Eingabevalidierung, was es uns ermöglichte, Node JS-Methoden wie readdirsync() und readfilesync() zu verwenden und aufzurufen, um vertrauliche Dateien zu lesen. Dies war Teil von HackTheBox JSCalc Web-Herausforderung.
Holen Sie sich Hinweise zum OSCP-Zertifikat
Praktische Hinweise zur Burp Suite
Der komplette praktische Kurs zum Penetrationstest von Webanwendungen
Video-Highlights
Erfahren Sie mehr über die aktive Node.js Prozess, verwenden Sie das globale Objekt Prozess. Require() wird nicht benötigt, da es global ist. Es bietet eine Fülle hilfreicher Funktionen und Techniken, um mehr Kontrolle über Systeminteraktionen zu erlangen.
Beispielsweise wird das aktuelle Arbeitsverzeichnis des Node.js-Prozesses zurückgegeben durch verarbeiten.cwd(). Ich habe unser Programm verwendet, um dies zu testen, und habe die Ergebnisse erhalten. Burp wurde nicht aktiviert. Ich musste nur die Browserkonsole verwenden, um die Nutzlast zu untersuchen und die Antwort zu sehen.
Ziel der Challenge war das Lesen von Daten aus einer flag.txt-Datei auf dem Server. Dabei kann das Node.js-Modul fs helfen, das mit require('fs') angefordert werden muss. Von jeder Methode gibt es synchrone und asynchrone Versionen. Das Arbeiten mit dem Dateisystem wird ermöglicht (Zugriff auf, Verwaltung und Änderung von Dateien usw.). Es umfasst eine breite Palette von Techniken und Attributen. Der Inhalt des Verzeichnisses kann mit der Methode readdir() oder readdirSync() (synchrone Version) der Klasse fs aufgelistet werden, die ähnlich wie die Befehle ls bzw. dir unter Linux bzw. Microsoft Windows funktioniert.
Zur Lösung dieser Herausforderung haben wir die folgende Nutzlast verwendet
erfordern('fs').schreibgeschützt('/App').zuString()
erfordern('fs').readdirSync(‘../’).toString()
erfordern('fs').lesenFileSync(„/flag.txt“).zuString()