
NodeXP - Un outil d'injection JavaScript côté serveur capable de détecter et d'exploiter les vulnérabilités de Node.js
NodeXP est un outil intégré, écrit en Python 2.7, capable de détecter les vulnérabilités possibles sur les services Node.js et de les exploiter de manière automatisée, basé sur l'attaque S(erveur)S(ide)J(avaScript)I(njection) !
Téléchargez NodeXP en clonant le dépôt Git :
git clone https://github.com/esmog/nodexp
Pour obtenir la liste de toutes les options, exécutez :
python2.7 nodexp -h
Exemples pour les cas POST et GET respectivement :
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
Pour vous familiariser avec NodeXP, vous aurez peut-être besoin de configurer les services de test Node.js fournis (/testbeds) et de commencer à utiliser l'outil. Une machine locale exécutant un serveur Node.js sera nécessaire.
Tout d'abord, vous devez installer les paquets 'body-parser' et 'express' dans les répertoires GET et POST.
Accédez au répertoire 'testbeds/GET' sur votre machine locale et collez la commande ci-dessous dans le terminal :
npm install express --save
Accédez au répertoire 'testbeds/POST' et collez les commandes ci-dessous dans le terminal :
npm install body-parser --save
nmp install express --save
Après l'installation correcte des paquets, vous pouvez exécuter chaque service en utilisant la commande 'node' et le fichier js souhaité (ex. node eval.js).
Une fois votre serveur opérationnel, vous êtes prêt à exécuter NodeXP et à le tester sur ces services !
Exemple pour le cas GET ci-dessous :
python2.7 nodexp.py --url=http://localiprunningnodejsserver:3001/?name=[INJECT_HERE]
Exemple pour le cas POST ci-dessous :
python2.7 nodexp.py --url=http://localiprunningnodejsserver:3001/post.js --pdata=username=[INJECT_HERE]
Les payloads utilisés par les techniques d'injection aveugle et basée sur les résultats sont stockés dans "/files/blind_payloads.txt" et dans "/files/payloads.txt".
Les payloads sont écrits sur chaque ligne impaire des fichiers texte et, dans le cas de l'injection basée sur les résultats, leurs réponses attendues sont écrites sur chaque ligne paire du fichier "payloads.txt" sous forme de liste séparée par des virgules. Les lignes paires du fichier "blind_payloads.txt" sont vides.
Pour arrêter le processus d'injection, "---end(nextline)---end" est utilisé comme délimiteur permettant d'arrêter l'analyse et l'injection des payloads, pour les cas d'injection aveugle et basée sur les résultats.
Chaque utilisateur peut maintenir et mettre à jour les fichiers txt de payload avec ses propres payloads, à condition de suivre les instructions ci-dessus.
Le but de cet outil est strictement académique et a été développé pour mener à bien mon mémoire de master. Il pourrait également être utile lors d'un test de pénétration sur des services Node.js. Toute autre utilisation malveillante ou illégale de l'outil est fortement déconseillée et ne fait clairement pas partie de l'objectif de cette recherche.
NodeXP - Version 1.2.2