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

Notas prácticas de Burp Suite

El curso completo y práctico de pruebas de penetración de aplicaciones web

DESCRIPCIÓN DEL RETO
En las misteriosas profundidades del mar digital, calamares expertos en tecnología han creado una calculadora JavaScript especializada. Con múltiples brazos y complejas habilidades para resolver problemas, estos ingenieros cefalópodos lo utilizan para todo, desde cálculos de trayectorias de inyección de tinta hasta matemáticas de aguas profundas. ¡Intenta burlarlo bajo tu propio riesgo! 🦑

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()

Tutorial en vídeo

Acerca del Autor

Creo notas de ciberseguridad, notas de marketing digital y cursos online. También brindo consultoría de marketing digital que incluye, entre otros, SEO, Google y meta anuncios y administración de CRM.

Ver Artículos