记一次Node.js站点渗透
字数 1297 2025-08-29 08:31:41

Node.js站点渗透实战教学文档

1. 前言

本教学文档基于一次真实的Node.js站点渗透过程,详细记录了从信息搜集到最终获取管理员权限的全流程。Node.js站点由于其特殊的架构和运行机制,与传统PHP/JSP站点在渗透方式上有显著差异。

2. 信息搜集阶段

2.1 基础信息收集

  • 子域名扫描:使用工具如subfinder、Sublist3r等发现相关子域
  • 端口扫描:使用nmap进行全端口扫描,识别开放服务
  • 目录扫描:使用dirsearch、gobuster等工具探测敏感路径

2.2 Node.js特征识别

  • 404页面特征:Node.js框架通常有独特的404错误页面样式
  • 文件扩展名:重点关注.js文件而非传统的.php/.jsp
  • 路由特征:Node.js应用通常使用RESTful风格的API接口

3. 突破接口阶段

3.1 JS文件分析

  1. 查看页面源代码,寻找与产品/站点名称相关的js文件
  2. 分析js文件中的关键函数:
    • document.write函数:用于动态构建前端界面
    • Ajax请求:通常包含与后端交互的API接口

3.2 接口发现与利用

示例发现的关键Ajax请求:

$.ajax({
    url: host + "/agent/getPlayerInfo",
    type: "post",
    dataType: 'json',
    headers: {"content-type": "application/json"},
    data: JSON.stringify({"uid": uid})
})

渗透方法

  • 使用Postman构造相同格式的请求
  • 修改关键参数测试未授权访问漏洞
  • 批量测试接口功能

4. 后台登录突破

4.1 用户枚举

  1. 通过发现的接口获取用户UID列表
  2. 使用接口获取对应用户名
  3. 将用户名作为字典用于爆破

4.2 密码加密分析

在JS代码中发现加密方式:

  • 密码使用16位MD5加密
  • 加密逻辑通常在登录相关的JS文件中

4.3 爆破策略

  1. 分析登录请求响应:
    • 密码错误:返回code值为101100
    • 登录成功:返回code值为200
  2. 使用Burp Suite配置爆破:
    • 设置正确的加密方式
    • 根据响应码判断结果

5. 权限提升技巧

5.1 前端权限控制绕过

发现关键权限控制逻辑:

if(data.code == 200) {
    // 根据agentClass值渲染不同界面
    // 1=管理员, 2-4=不同等级用户
}

5.2 权限提升方法

  1. 使用Burp拦截登录响应
  2. 修改返回包中的agentClass值为1
  3. 前端将渲染管理员界面

5.3 后端鉴权缺失

  • 即使前端显示管理员界面,仍需验证后端接口是否校验权限
  • 测试发现所有管理功能接口均无二次鉴权
  • 可直接调用管理员功能API

6. 安全建议

6.1 针对开发者的防御建议

  1. 接口鉴权:
    • 所有敏感接口必须进行权限验证
    • 使用JWT等机制进行身份验证
  2. 密码安全:
    • 强制使用复杂密码
    • 增加登录失败锁定机制
  3. 前端安全:
    • 不要仅依赖前端进行权限控制
    • 敏感数据应在服务端验证
  4. 错误处理:
    • 统一错误响应,避免泄露敏感信息

6.2 针对管理员的防护建议

  1. 定期审计:
    • 检查用户列表,删除不必要账户
    • 监控异常登录行为
  2. 密码策略:
    • 强制定期更换密码
    • 禁止使用弱口令
  3. 日志监控:
    • 记录所有敏感操作
    • 设置异常操作告警

7. 总结

本次渗透揭示了Node.js应用中常见的几类安全问题:

  1. 未授权访问API接口
  2. 前端权限控制可被绕过
  3. 缺乏有效的二次鉴权机制
  4. 密码策略不严格导致爆破风险

通过系统化的信息收集、细致的代码分析和逻辑漏洞利用,即使在没有传统getshell的情况下,也能实现完整的权限控制。

Node.js站点渗透实战教学文档 1. 前言 本教学文档基于一次真实的Node.js站点渗透过程,详细记录了从信息搜集到最终获取管理员权限的全流程。Node.js站点由于其特殊的架构和运行机制,与传统PHP/JSP站点在渗透方式上有显著差异。 2. 信息搜集阶段 2.1 基础信息收集 子域名扫描 :使用工具如subfinder、Sublist3r等发现相关子域 端口扫描 :使用nmap进行全端口扫描,识别开放服务 目录扫描 :使用dirsearch、gobuster等工具探测敏感路径 2.2 Node.js特征识别 404页面特征:Node.js框架通常有独特的404错误页面样式 文件扩展名:重点关注.js文件而非传统的.php/.jsp 路由特征:Node.js应用通常使用RESTful风格的API接口 3. 突破接口阶段 3.1 JS文件分析 查看页面源代码,寻找与产品/站点名称相关的js文件 分析js文件中的关键函数: document.write 函数:用于动态构建前端界面 Ajax请求:通常包含与后端交互的API接口 3.2 接口发现与利用 示例发现的关键Ajax请求: 渗透方法 : 使用Postman构造相同格式的请求 修改关键参数测试未授权访问漏洞 批量测试接口功能 4. 后台登录突破 4.1 用户枚举 通过发现的接口获取用户UID列表 使用接口获取对应用户名 将用户名作为字典用于爆破 4.2 密码加密分析 在JS代码中发现加密方式: 密码使用16位MD5加密 加密逻辑通常在登录相关的JS文件中 4.3 爆破策略 分析登录请求响应: 密码错误:返回code值为101100 登录成功:返回code值为200 使用Burp Suite配置爆破: 设置正确的加密方式 根据响应码判断结果 5. 权限提升技巧 5.1 前端权限控制绕过 发现关键权限控制逻辑: 5.2 权限提升方法 使用Burp拦截登录响应 修改返回包中的 agentClass 值为1 前端将渲染管理员界面 5.3 后端鉴权缺失 即使前端显示管理员界面,仍需验证后端接口是否校验权限 测试发现所有管理功能接口均无二次鉴权 可直接调用管理员功能API 6. 安全建议 6.1 针对开发者的防御建议 接口鉴权: 所有敏感接口必须进行权限验证 使用JWT等机制进行身份验证 密码安全: 强制使用复杂密码 增加登录失败锁定机制 前端安全: 不要仅依赖前端进行权限控制 敏感数据应在服务端验证 错误处理: 统一错误响应,避免泄露敏感信息 6.2 针对管理员的防护建议 定期审计: 检查用户列表,删除不必要账户 监控异常登录行为 密码策略: 强制定期更换密码 禁止使用弱口令 日志监控: 记录所有敏感操作 设置异常操作告警 7. 总结 本次渗透揭示了Node.js应用中常见的几类安全问题: 未授权访问API接口 前端权限控制可被绕过 缺乏有效的二次鉴权机制 密码策略不严格导致爆破风险 通过系统化的信息收集、细致的代码分析和逻辑漏洞利用,即使在没有传统getshell的情况下,也能实现完整的权限控制。