
NodeXP - Uma ferramenta de injeção de JavaScript do lado do servidor capaz de detectar e explorar vulnerabilidades Node.js
NodeXP é uma ferramenta integrada, escrita em Python 2.7, capaz de detectar possíveis vulnerabilidades em serviços Node.js bem como explorá-las de forma automatizada, baseada no ataque S(erver)S(ide)J(avascript)I(njection)!
Baixe o NodeXP clonando o repositório Git:
git clone https://github.com/esmog/nodexp
Para obter uma lista de todas as opções execute:
python2.7 nodexp -h
Exemplos para casos POST e 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 se familiarizar com o NodeXP, você pode precisar configurar os serviços de teste Node.js fornecidos (/testbeds) e começar a usar a ferramenta. Será necessária uma máquina local executando um servidor Node.js.
Primeiramente, você deve instalar os pacotes 'body-parser' e 'express' nos diretórios GET e POST.
Vá para o diretório 'testbeds/GET' na sua máquina local e cole o comando abaixo no terminal:
npm install express --save
Vá para o diretório 'testbeds/POST' e cole os comandos abaixo no terminal:
npm install body-parser --save
nmp install express --save
Após a instalação correta dos pacotes, você pode executar cada serviço rodando o comando 'node' e o arquivo js desejado (ex. node eval.js).
Depois que o servidor estiver funcionando, você está pronto para executar o NodeXP e testá-lo nesses serviços!
Exemplo para caso GET mostrado abaixo:
python2.7 nodexp.py --url=http://localiprunningnodejsserver:3001/?name=[INJECT_HERE]
Exemplo para caso POST mostrado abaixo:
python2.7 nodexp.py --url=http://localiprunningnodejsserver:3001/post.js --pdata=username=[INJECT_HERE]
Os payloads usados pelas técnicas de Injeção Cega e Baseada em Resultados estão armazenados em "/files/blind_payloads.txt" e "/files/payloads.txt".
Os payloads são escritos em cada número de linha ímpar dos arquivos de texto e, no caso da Injeção Baseada em Resultados, suas respostas esperadas são escritas em cada número de linha par do arquivo "payloads.txt" como uma lista separada por vírgulas. Os números de linha pares do arquivo "blind_payloads.txt" estão vazios.
Para interromper o processo de injeção, "---end(nextline)---end" é usado como um delimitador capaz de parar a análise e injeção de payloads, tanto para casos de Injeção Cega quanto Baseada em Resultados.
Cada usuário pode manter e atualizar os arquivos txt de payload com seus próprios payloads, desde que ele/ela siga as instruções acima.
O propósito da ferramenta é estritamente acadêmico e foi desenvolvida para realizar minha tese de mestrado. Também pode ser útil durante o processo de um teste de penetração em serviços Node.js. Qualquer outro uso malicioso ou ilegal da ferramenta é fortemente não recomendado e claramente não faz parte do propósito desta pesquisa.
NodeXP - Versão 1.2.2