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 漏洞发现过程
- 通过全局搜索危险函数如
exec(、shell_exec((加括号可提高搜索准确性) - 在resource文件下发现
shell_exec函数调用 - 跟进发现
xxage函数中存在用户输入可控问题
2.2 漏洞代码分析
// 示例漏洞代码(简化)
function xxage($input) {
// 主要逻辑为删除文件
// 但存在用户输入可控问题
shell_exec($input); // 用户输入直接传入shell_exec
}
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这种类型的路由请求在实战中较为少见,但一旦存在漏洞往往危害严重,需要特别关注。