Abbiamo trattato l'inserimento e l'esecuzione dei comandi in Node JS. Lo scenario includeva una casella di input che trasmette l'input dell'utente come numeri a una funzione di calcolatrice che utilizza una funzione EVAL() per calcolare e restituire all'utente l'output dell'operazione aritmatica. La funzione EVAL() insieme alla calcolatrice non implementa alcun tipo di convalida dell'input che ci ha permesso di utilizzare e chiamare metodi Node JS come readdirsync() e readfilesync() per leggere file sensibili. Questo faceva parte HackTheBoxJSCalc sfida sul web.
Ottieni le note sul certificato OSCP
Appunti pratici della suite Burp
Il corso pratico completo sul Penetration Testing delle applicazioni Web
Video in evidenza
Per saperne di più sull'attivo Node.js processo, utilizzare il processo dell'oggetto globale. Require() non è necessario perché è globale. Offre una miriade di funzionalità e tecniche utili per ottenere un maggiore controllo sulle interazioni del sistema.
Ad esempio, viene restituita la directory di lavoro corrente del processo Node.js processo.cwd(). Ho utilizzato il nostro programma per testarlo e ho ricevuto i risultati. non ho attivato Burp. Avevo solo bisogno di utilizzare la console del browser per esaminare il carico utile e vedere la risposta.
Lo scopo della sfida era leggere i dati da un file flag.txt sul server. Il modulo fs di Node.js, che deve essere richiesto con require('fs'), può aiutare a farlo. Esistono versioni sincrone e asincrone di ogni metodo. È possibile lavorare con il file system (accesso, gestione e modifica dei file, ecc.). Include una vasta gamma di tecniche e attributi. Il contenuto della directory può essere elencato utilizzando il metodo readdir() o readdirSync() (versione sincrona) della classe fs, che funziona in modo simile ai comandi ls o dir rispettivamente su Linux e Microsoft Windows.
Abbiamo utilizzato il payload seguente per risolvere la sfida
richiedere('fs').readdirSync("/app").accordare()
richiedere('fs').readdirSync(‘../’).accordare()
richiedere('fs').leggereFileSync(“/flag.txt”).accordare()