router文件夹中为路由控制代码
models内存放数据库模型,类似于java中的entity
app.js需要着重阅读
这里就是将/routes文件下的js文件名取出拼接到/3508gw/api/后作为路由前缀。
最后再注册js文件内部路由
由于nodejs不像其他的脚本语言具有动态解析特性,上传的js文件需要经过node test.js启动才能解析执行,所以nodejs的webshell通常用于后渗透权限维持而不是渗透打点。所以我们主要关注的漏洞为RCE和SQL注入。
直接来看代码:
登录路由中未对传入的username作处理,直接传入mongoose的findOneAndUpdate函数(mongoose的更新数据操作)中
所以我们传入:
{"username":{"$ne":1},"password": {"$ne":1}}
拼接到mongodb语句中就为:
db.users.findOneAndUpdate({{'username':{$ne:1}, 'password':{$ne:1}}})
由于 users 集合中 username 和 password 都不等于 1,所以将所有的文档数据查出。这就是mongodb的重言式注入。
在处理 MongoDB 查询时,经常会使用 JSON格式将用户提交的数据发送到服务端,如果目标过滤了
$ne等关键字,我们可以使用 Unicode 编码绕过,因为 JSON 可以直接解析 Unicode。
{"username":{"u0024u006eu0065":1},"password": {"u0024u006eu0065":1}}
diagnosis路由下直接调用shelljs库执行命令,将用户输入的address直接拼接在命令内造成注入
setUpNic接口中将请求中的ipaddress拼接到命令中,但该命令修改了配置文件,所以利用风险大,仅在本地进行演示,使用payload:
' &whoami ||'
原文始发于微信公众号(Sec探索者):【实战案例】记一次NodeJS后端代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论