ExtJS Direct请求中的RCE&代码分析
字数 1442 2025-08-29 08:30:06

ExtJS Direct请求中的RCE漏洞分析与代码审计

1. ExtJS Direct请求机制分析

ExtJS Direct是一个用于简化前端与后端通信的框架,允许前端通过JSON格式发送请求到后端,并由后端处理这些请求。

1.1 请求参数结构

典型的ExtJS Direct请求包含以下参数:

  • action: 指定后端类名
  • method: 指定要调用的方法
  • data: 传递给方法的参数
  • type: 请求类型
  • tid: 事务ID

1.2 路由处理

在审计案例中,发现存在/xxx/xxx/router路由,通过全局搜索发现存在一个Ext_Direct类文件,这是一个典型的基于ExtJS Direct的后端处理逻辑,用于处理前端发送的RPC(远程过程调用)请求。

2. 远程代码执行(RCE)漏洞分析

2.1 漏洞发现过程

  1. 通过全局搜索危险函数如exec(shell_exec((加括号可提高搜索准确性)
  2. 在resource文件下发现shell_exec函数调用
  3. 跟进发现xxage函数中存在用户输入可控问题

2.2 漏洞代码分析

// 示例漏洞代码(简化)
function xxage($input) {
    // 主要逻辑为删除文件
    // 但存在用户输入可控问题
    shell_exec($input); // 用户输入直接传入shell_exec
}

2.3 漏洞利用

  1. 确认类名为xxx_resource
  2. 构造ExtJS Direct请求payload:
    • action: xxx_resource(类名)
    • method: xxage(方法名)
    • data: 数组形式传入命令参数

2.4 验证利用

通过构造请求成功实现命令执行,并通过DNSLog外带出服务器用户名。

3. 其他逻辑缺陷分析

3.1 用户注册逻辑缺陷

  1. 发现register条件中存在用户名添加逻辑
  2. 调用adduserreview函数处理注册请求
  3. 需要传入参数:用户密码、邮箱等
  4. 可添加用户但需要管理员审核

3.2 302跳转/XSS漏洞

  1. href参数可在cookie头中添加identify参数
  2. 可造成302跳转或XSS攻击

3.3 密码处理函数问题

  1. 从SQL语句中获取用户名
  2. 根据用户名获取密码
  3. 问题:获取的密码为null
  4. 对用户名进行爆破无效

4. 文件下载漏洞

  1. 存在文件下载功能
  2. 尝试目录穿越读取/etc/passwd文件
  3. 受限于basename函数,只能下载指定目录下的文件
  4. 通过RCE发现目录下存在敏感文件:
    • 包含敏感信息的.txt文件
    • 网站请求路径信息(但利用价值有限)

5. 验证码漏洞

  1. 发现图形验证码生成逻辑
  2. 可对图形验证码进行伸缩扩大
  3. 可能造成类似DDOS的效果

6. 防御建议

6.1 ExtJS Direct请求安全

  1. 严格验证actionmethod参数
  2. 实现白名单机制限制可调用的类和方法
  3. 对用户输入进行严格过滤和转义

6.2 RCE防御

  1. 避免直接使用shell_exec等危险函数
  2. 如需使用,应严格过滤输入参数
  3. 实现命令白名单机制

6.3 其他安全建议

  1. 用户注册逻辑应增加验证机制
  2. 修复302跳转/XSS漏洞
  3. 密码处理应确保正确获取和验证
  4. 文件下载功能应限制目录范围
  5. 验证码生成应限制请求频率

7. 总结

本案例展示了通过ExtJS Direct请求机制发现的RCE漏洞及其他逻辑缺陷,强调了:

  1. 对前端路由机制的深入理解重要性
  2. 全局代码审计中危险函数搜索的技巧
  3. 用户输入可控问题的危害性
  4. 多种漏洞类型组合利用的可能性

ExtJS Direct这种类型的路由请求在实战中较为少见,但一旦存在漏洞往往危害严重,需要特别关注。

ExtJS Direct请求中的RCE漏洞分析与代码审计 1. ExtJS Direct请求机制分析 ExtJS Direct是一个用于简化前端与后端通信的框架,允许前端通过JSON格式发送请求到后端,并由后端处理这些请求。 1.1 请求参数结构 典型的ExtJS Direct请求包含以下参数: action : 指定后端类名 method : 指定要调用的方法 data : 传递给方法的参数 type : 请求类型 tid : 事务ID 1.2 路由处理 在审计案例中,发现存在 /xxx/xxx/router 路由,通过全局搜索发现存在一个 Ext_Direct 类文件,这是一个典型的基于ExtJS Direct的后端处理逻辑,用于处理前端发送的RPC(远程过程调用)请求。 2. 远程代码执行(RCE)漏洞分析 2.1 漏洞发现过程 通过全局搜索危险函数如 exec( 、 shell_exec( (加括号可提高搜索准确性) 在resource文件下发现 shell_exec 函数调用 跟进发现 xxage 函数中存在用户输入可控问题 2.2 漏洞代码分析 2.3 漏洞利用 确认类名为 xxx_resource 构造ExtJS Direct请求payload: action : xxx_resource (类名) method : xxage (方法名) data : 数组形式传入命令参数 2.4 验证利用 通过构造请求成功实现命令执行,并通过DNSLog外带出服务器用户名。 3. 其他逻辑缺陷分析 3.1 用户注册逻辑缺陷 发现 register 条件中存在用户名添加逻辑 调用 adduserreview 函数处理注册请求 需要传入参数:用户密码、邮箱等 可添加用户但需要管理员审核 3.2 302跳转/XSS漏洞 href 参数可在cookie头中添加 identify 参数 可造成302跳转或XSS攻击 3.3 密码处理函数问题 从SQL语句中获取用户名 根据用户名获取密码 问题:获取的密码为null 对用户名进行爆破无效 4. 文件下载漏洞 存在文件下载功能 尝试目录穿越读取 /etc/passwd 文件 受限于 basename 函数,只能下载指定目录下的文件 通过RCE发现目录下存在敏感文件: 包含敏感信息的.txt文件 网站请求路径信息(但利用价值有限) 5. 验证码漏洞 发现图形验证码生成逻辑 可对图形验证码进行伸缩扩大 可能造成类似DDOS的效果 6. 防御建议 6.1 ExtJS Direct请求安全 严格验证 action 和 method 参数 实现白名单机制限制可调用的类和方法 对用户输入进行严格过滤和转义 6.2 RCE防御 避免直接使用 shell_exec 等危险函数 如需使用,应严格过滤输入参数 实现命令白名单机制 6.3 其他安全建议 用户注册逻辑应增加验证机制 修复302跳转/XSS漏洞 密码处理应确保正确获取和验证 文件下载功能应限制目录范围 验证码生成应限制请求频率 7. 总结 本案例展示了通过ExtJS Direct请求机制发现的RCE漏洞及其他逻辑缺陷,强调了: 对前端路由机制的深入理解重要性 全局代码审计中危险函数搜索的技巧 用户输入可控问题的危害性 多种漏洞类型组合利用的可能性 ExtJS Direct这种类型的路由请求在实战中较为少见,但一旦存在漏洞往往危害严重,需要特别关注。