记一次ctf中代码审计分析
字数 1768 2025-08-25 22:59:10
CTF代码审计分析实战教学文档
一、信呼OA漏洞分析
1. 初始入口分析
- 入口URL参数分析:
m=index&a=getshtml&surl=aG9tZS9pbmRleC9yb2NrX2luZGV4&num=home&menuname=6aaW6aG1m参数:指定模块(index)a参数:指定动作(getshtml)surl参数:base64编码的路径(解码为"home/index/rock_index")num和menuname参数:用于导航控制
2. 关键代码路径
- 请求首先进入
View.php - 默认会再次调用自身(自调用机制)
- 可控参数:
m、a、d参数均可控
3. 漏洞利用链分析
-
文件包含点:
- 最终会包含
$mpathname变量 - 默认后缀被固定为
.html - 但可以通过
$xhrock->displayfile改变$mpathname的值
- 最终会包含
-
类方法调用限制:
- 可以调用任意
ClassAction类和任意Action方法 - 但被限制只能调用
indexClassAction类(因为m=index写死)
- 可以调用任意
-
关键方法分析:
indexClassAction类中有多个以Action结尾的方法- 通过
getshtmlAction方法可以修改displayfile属性:$this->displayfile = $file; - 从而将
displayfile修改为任意.php后缀文件
-
利用pearcmd.php实现RCE:
- 结合最近爆出的
pearcmd.php文件 - 通过文件包含实现远程代码执行
- 结合最近爆出的
4. 漏洞验证POC
http://xihu.com/?surl=Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vMQ%3D%3D&a=getshtml
surl参数为多层目录穿越的base64编码
二、PbootCMS漏洞分析
1. 路由分析
- 关键路由文件:
apps/common/route.php - 存在历史漏洞
2. 历史漏洞分析(逆向分析)
-
漏洞调用链:
parserIfLabel方法 →parserAfter方法 →SearchController类- 通过
keyword参数传递攻击载荷
-
过滤器绕过分析:
get函数过滤器严格,直接导致$data=null- 但
content已经渲染出来,存在漏洞利用空间
3. 参考资源
- 安su师傅的分析:https://xiaokou.top/article?key=e4Q6k0
三、代码审计实用技巧
1. IDE快捷键(基于PhpStorm/IntelliJ)
| 快捷键 | 功能描述 |
|---|---|
| F7 | 步入(进入方法内部) |
| F8 | 步过(执行当前行,不进入方法) |
| F9 | 继续执行到下一个断点 |
| ALT+F8 | 评估表达式 |
| Ctrl+F | 文件内查找字符串 |
| 双击Shift | 全局搜索(类、资源、配置、方法、路径等) |
| Ctrl+N | 按类名搜索类 |
| Ctrl+F12 | 查看当前类结构 |
| Ctrl+H | 查看类的层次关系 |
| Alt+F7 | 查找类或方法在哪被使用 |
2. 审计方法论
-
参数追踪:
- 从用户可控参数入手(GET/POST/COOKIE等)
- 追踪参数传递路径,直到最终使用点
-
危险函数定位:
- 文件包含:
include、require、include_once、require_once - 文件操作:
file_get_contents、file_put_contents、fopen等 - 命令执行:
system、exec、passthru、shell_exec等 - 反序列化:
unserialize
- 文件包含:
-
调用链分析:
- 从入口点到漏洞触发点的完整调用路径
- 注意中间可能存在的过滤和校验
-
历史漏洞参考:
- 相同CMS的历史漏洞往往有相似模式
- 修复方式可能引入新的问题
四、实战建议
-
环境搭建:
- 搭建本地测试环境
- 使用xdebug进行动态调试
-
工具辅助:
- 使用静态分析工具(如RIPS、SonarQube等)进行初步扫描
- 配合动态调试工具(xdebug、phpdbg)验证漏洞
-
漏洞利用:
- 优先尝试已知利用方式(如pearcmd.php)
- 注意不同PHP版本的特性差异
- 考虑各种过滤和限制的绕过方式
-
防御建议:
- 对所有用户输入进行严格过滤
- 避免动态包含用户可控路径
- 使用白名单机制限制可包含的文件
- 及时更新CMS和依赖库版本