Cubrimos la inyección y ejecución de comandos en Node JS. El escenario incluía un cuadro de entrada que pasa la entrada del usuario como números a una función de calculadora que utiliza una función EVAL() para calcular y devolver el resultado de la operación aritmática al usuario. La función EVAL() junto con la calculadora no implementa ningún tipo de validación de entrada que nos permitiera usar y llamar a métodos de Node JS como readdirsync() y readfilesync() para leer archivos confidenciales. Esto fue parte de HackTheBox JSCalc desafío web.
Obtenga notas del certificado OSCP
El curso completo y práctico de pruebas de penetración de aplicaciones web
Vídeos destacados
Para saber más sobre el activo Nodo.js proceso, utilice el proceso de objeto global. Require() no es necesario porque es global. Ofrece una gran cantidad de funciones y técnicas útiles para obtener más control sobre las interacciones del sistema.
Por ejemplo, el directorio de trabajo actual del proceso Node.js lo devuelve proceso.cwd(). Utilicé nuestro programa para probar esto y recibí los resultados. no activó Burp. Sólo necesitaba usar la consola del navegador para examinar la carga útil y ver la respuesta.
El objetivo del desafío era leer datos de un archivo flag.txt en el servidor. El módulo fs de Node.js, que debe solicitarse con require('fs'), puede ayudar a hacer esto. Hay versiones sincrónicas y asincrónicas de cada método. Se hace posible trabajar con el sistema de archivos (acceder, administrar y modificar archivos, etc.). Incluye una amplia gama de técnicas y atributos. El contenido del directorio se puede enumerar utilizando el método readdir() o readdirSync() (versión síncrona) de la clase fs, que funciona de manera similar a los comandos ls o dir en Linux y Microsoft Windows, respectivamente.
Usamos la siguiente carga útil para resolver el desafío.
requerir('fs').readdirSync('/aplicación').Encadenar()
requerir('fs').readdirSincronización(‘../’).Encadenar()
requerir('fs').leerFileSync(“/bandera.txt”).Encadenar()