记一次NodeJS后端代码审计

admin 2025年1月17日11:53:45评论8 views字数 1472阅读4分54秒阅读模式
01
NodeJS基本框架结构

记一次NodeJS后端代码审计

app.js文件:通常是一个 Node.js 应用程序的入口文件,它设置了应用程序的各种参数和配置,包括连接数据库、使用中间件等。对于 Web 应用程序来说,它可以设置路由、处理 HTTP 请求等。在应用程序启动时,Node.js 会读取 "app.js" 文件并执行里面的代码,启动整个应用程序。因此,"app.js" 件是整个应用程序的核心部分,对于整个应用程序的运行具有重要影响。app文件夹中主要为控制前端的html页面代码和js代码

router文件夹中为路由控制代码

models内存放数据库模型,类似于java中的entity

app.js需要着重阅读

记一次NodeJS后端代码审计

这里就是将/routes文件下的js文件名取出拼接到/3508gw/api/后作为路由前缀。

记一次NodeJS后端代码审计

最后再注册js文件内部路由

02
漏洞类型

由于nodejs不像其他的脚本语言具有动态解析特性,上传的js文件需要经过node test.js启动才能解析执行,所以nodejswebshell通常用于后渗透权限维持而不是渗透打点。所以我们主要关注的漏洞为RCESQL注入。

03
NOSQL注入
常见的数据库分为关系型数据库(MysqlSqlserver)和非关系型数据库(MongodbRedis关系数据库和非关系数据库是应用程序的两种数据存储方法。关系数据库(或 SQL 数据库)以包含行和列的表格格式存储数据。列包含数据属性,行包含数据值。您可以链接关系数据库中的表,以更深入地了解不同数据点之间的相互关系。另一方面,非关系数据库(或 NoSQL 数据库)使用各种数据模型来访问和管理数据。这些数据库专门针对需要大数据量、低延迟和灵活数据模型的应用程序进行了优化,这是通过放宽其他数据库的某些数据一致性限制来实现的。nosql注入的原理不详细介绍,简单来说也是由于未对输入的字段做过滤,导致可以使用某些关键字判断条件进行绕过执行逻辑。(参考https://forum.butian.net/share/474)具体如下图:

记一次NodeJS后端代码审计

直接来看代码:

记一次NodeJS后端代码审计

登录路由中未对传入的username作处理,直接传入mongoose的findOneAndUpdate函数(mongoose的更新数据操作)中

记一次NodeJS后端代码审计

所以我们传入:

{"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}}

记一次NodeJS后端代码审计
04
RCE命令执行
记一次NodeJS后端代码审计
记一次NodeJS后端代码审计

diagnosis路由下直接调用shelljs库执行命令,将用户输入的address直接拼接在命令内造成注入

记一次NodeJS后端代码审计

setUpNic接口中将请求中的ipaddress拼接到命令中,但该命令修改了配置文件,所以利用风险大,仅在本地进行演示,使用payload:

' &whoami ||'

记一次NodeJS后端代码审计

原文始发于微信公众号(Sec探索者):【实战案例】记一次NodeJS后端代码审计

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月17日11:53:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次NodeJS后端代码审计https://cn-sec.com/archives/3638293.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息