
NodeXP - Una herramienta de inyección de JavaScript del lado del servidor capaz de detectar y explotar vulnerabilidades de Node.js
NodeXP es una herramienta integrada, escrita en Python 2.7, capaz de detectar posibles vulnerabilidades en servicios Node.js así como explotarlas de forma automatizada, basada en el ataque S(erver)S(ide)J(avascript)I(njection)!
Descarga NodeXP clonando el repositorio Git:
git clone https://github.com/esmog/nodexp
Para obtener una lista de todas las opciones ejecuta:
python2.7 nodexp -h
Ejemplos para casos POST y GET respectivamente:
python2.7 nodexp.py --url="http://nodegoat.herokuapp.com/contributions" --pdata="preTax=[INJECT_HERE]" -c="connect.sid=s:i6fKU7kSLPX1l00WkOxDmEfncptcZP1v.fy9whjYW0fGAvbavzYSBz1C2ZhheDuQ1SU5qpgVzbTA"
python2.7 nodexp.py --url="http://nodegoat.herokuapp.com/contributions" --pdata="preTax=[INJECT_HERE]" -c="connect.sid=s:i6fKU7kSLPX1l00WkOxDmEfncptcZP1v.fy9whjYW0fGAvbavzYSBz1C2ZhheDuQ1SU5qpgVzbTA" --tech=blind
python2.7 nodexp.py --url="http://192.168.64.30/?name=[INJECT_HERE]" -c="connect.sid=s:i6fKU7kSLPX1l00WkOxDmEfncptcZP1v.fy9whjYW0fGAvbavzYSBz1C2ZhheDuQ1SU5qpgVzbTA"
python2.7 nodexp.py --url="http://192.168.64.30/?name=[INJECT_HERE]" -c="connect.sid=s:i6fKU7kSLPX1l00WkOxDmEfncptcZP1v.fy9whjYW0fGAvbavzYSBz1C2ZhheDuQ1SU5qpgVzbTA" --tech=blind
Para familiarizarte con NodeXP, es posible que necesites configurar los servicios de prueba Node.js proporcionados (/testbeds) y empezar a usar la herramienta. Será necesaria una máquina local ejecutando un servidor Node.js.
Primeramente, debes instalar los paquetes 'body-parser' y 'express' en los directorios GET y POST.
Ve al directorio 'testbeds/GET' en tu máquina local y pega el siguiente comando en la terminal:
npm install express --save
Ve al directorio 'testbeds/POST' y pega los siguientes comandos en la terminal:
npm install body-parser --save
nmp install express --save
Después de la instalación correcta de los paquetes, puedes ejecutar cada servicio usando el comando 'node' y el archivo js deseado (ej. node eval.js).
Una vez que tu servidor esté en funcionamiento, ¡estás listo para ejecutar NodeXP y probarlo en esos servicios!
Ejemplo para el caso GET mostrado a continuación:
python2.7 nodexp.py --url=http://localiprunningnodejsserver:3001/?name=[INJECT_HERE]
Ejemplo para el caso POST mostrado a continuación:
python2.7 nodexp.py --url=http://localiprunningnodejsserver:3001/post.js --pdata=username=[INJECT_HERE]
Los payloads utilizados tanto por la técnica de Inyección Ciega como por la de Inyección Basada en Resultados se almacenan en "/files/blind_payloads.txt" y en "/files/payloads.txt".
Los payloads se escriben en cada línea impar de los archivos de texto y, en el caso de la Inyección Basada en Resultados, sus respuestas esperadas se escriben en cada línea par del archivo "payloads.txt" como una lista separada por comas. Las líneas pares del archivo "blind_payloads.txt" están vacías.
Para detener el proceso de inyección, se utiliza "---end(nextline)---end" como un delimitador capaz de detener el análisis y la inyección de payloads, tanto para los casos de Inyección Ciega como Basada en Resultados.
Cada usuario puede mantener y actualizar los archivos txt de payload con sus propios payloads, siempre y cuando siga las instrucciones anteriores.
El propósito de la herramienta es estrictamente académico y fue desarrollada para llevar a cabo mi tesis de maestría. También podría ser útil durante el proceso de una prueba de penetración en servicios Node.js. Cualquier otro uso malicioso o ilegal de la herramienta no es recomendado en absoluto y claramente no forma parte del propósito de esta investigación.
NodeXP - Versión 1.2.2