NodeXP 是一个集成化工具,基于 SSJI(服务端 JavaScript 注入)攻击,使用 Python 2.7 编写,能够自动检测 Node.js 服务上的潜在漏洞并进行利用。
通过克隆 Git 仓库下载 NodeXP:
git clone https://github.com/esmog/nodexp
要查看所有选项列表,运行:
python2.7 nodexp -h
分别针对 POST 和 GET 情况的示例:
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
为了熟悉 NodeXP,你可能需要设置提供的 Node.js 测试服务(/testbeds)并开始使用该工具。需要一台运行 Node.js 服务器的本地机器。
首先,你需要在 GET 和 POST 目录中安装 'body-parser' 和 'express' 包。
进入本地机器上的 'testbeds/GET' 目录,在终端中粘贴以下命令:
npm install express --save
进入 'testbeds/POST' 目录,在终端中粘贴以下命令:
npm install body-parser --save
npm install express --save
正确安装这些包后,你可以通过运行命令 'node' 加上相应的 js 文件(例如 node eval.js)来启动每个服务。
服务启动后,你就可以运行 NodeXP 并针对这些服务进行测试了!
以下是 GET 情况的示例:
python2.7 nodexp.py --url=http://localiprunningnodejsserver:3001/?name=[INJECT_HERE]
以下是 POST 情况的示例:
python2.7 nodexp.py --url=http://localiprunningnodejsserver:3001/post.js --pdata=username=[INJECT_HERE]
盲注和基于结果的注入技术所使用的 payload 分别存储在 "/files/blind_payloads.txt" 和 "/files/payloads.txt" 中。
Payload 写在文本文件的每个奇数行;对于基于结果的注入,其预期响应写在 "payloads.txt" 文件的每个偶数行,作为以逗号分隔的列表。"blind_payloads.txt" 文件的偶数行为空。
为了停止注入过程,使用 "---end(nextline)---end" 作为分隔符来停止解析和注入 payload,适用于盲注和基于结果的注入两种情况。
每个用户都可以按照上述说明维护和更新 payload 文本文件,添加自己的 payload。
该工具的目的纯粹是学术性的,是为了完成我的硕士论文而开发的。它也可能有助于对 Node.js 服务进行渗透测试。强烈不建议将该工具用于任何其他恶意或非法用途,这显然不属于本研究的范畴。
NodeXP - 版本 1.2.2