审计某站泄露的源码
字数 1406 2025-08-22 18:37:22
ThinkPHP框架与易优CMS漏洞审计教学文档
一、漏洞点一:文件内容读取与日志写入漏洞
漏洞原理
- 存在一个可通过HTTP请求或伪协议(
php://input)控制$res变量的功能点 - 使用
file_get_contents读取内容但不输出结果 - 读取内容会被写入日志文件
利用方式
- 构造请求:
url=http://ip:8000/ct_ceshi.php&method=get&post[a]=111 - 尝试使用伪协议:
php://input可控制输入内容- 但由于无回显,需通过日志间接获取
日志文件特征
- 路径格式:
/soapGetDateXt/[日期]/[方法]/[时间]_[随机数].txt
示例:https://xxx.xxx/soapGetDateXt/2024-09-02/get/16_45_48_10000.txt - 日志内容包含
file_get_contents读取的数据
限制条件
- 文件名截断尝试:
%00截断:需PHP版本<5.3.4且magic_quotes_gpc=off- 长度截断:需PHP版本<5.2.8
二、漏洞点二:cURL利用漏洞
漏洞原理
- 使用
curl_exec执行请求但无输出 - 可控制请求目标
潜在利用方式
- 使用伪协议:
dict://:可探测Redis未授权等漏洞file://:读取本地文件gopher://:构造特定协议攻击
- 由于无回显,需结合其他漏洞利用
三、漏洞点三:文件上传漏洞
漏洞原理
- 存在文件上传功能
- 缺少
CURLOPT_POSTFIELDS的严格限制
利用条件
- 若存在
CURLOPT_POSTFIELDS选项,可实现文件读取 - 实际漏洞中该选项缺失,利用受限
测试方法
- 本地搭建环境验证
- 构造恶意上传请求
四、漏洞点四:SQL注入漏洞
漏洞原理
- ThinkPHP3框架SQL注入漏洞
- 未对输入参数进行充分过滤
参考资源
利用方式
- 构造恶意SQL语句
- 通过特定参数触发注入
五、漏洞点五:易优CMS任意文件删除漏洞
漏洞原理
- 头像上传功能存在缺陷
- 系统会删除上一次头像的路径
- 通过两次上传可删除任意文件
利用步骤
- 第一次上传:设置目标文件(如
/robots.txt)为头像路径 - 第二次上传:上传正常头像
- 系统自动删除第一次设置的路径
修复情况
- 新版易优CMS对
filename参数增加了限制 - 老版本仍存在此漏洞
六、漏洞利用综合防御建议
-
输入验证:
- 对所有用户输入进行严格过滤
- 限制文件路径参数中的特殊字符
-
日志安全:
- 日志文件不应存放在web可访问目录
- 对日志文件设置适当权限
-
框架更新:
- 及时更新ThinkPHP等框架到最新版本
- 特别关注已知漏洞修复版本
-
函数安全:
- 避免直接使用
file_get_contents处理用户输入 - 对
curl_exec等函数增加输出限制
- 避免直接使用
-
文件操作:
- 实现安全的文件删除机制
- 对删除操作增加权限检查和路径验证
七、实验环境搭建指南
- 使用虚拟机搭建测试环境
- 部署易优CMS老版本(存在漏洞版本)
- 配置PHP 5.2.x环境测试截断漏洞
- 使用Burp Suite等工具构造恶意请求
八、参考工具
-
漏洞验证:
- Burp Suite
- Postman
- cURL命令行工具
-
环境搭建:
- Docker
- XAMPP/WAMP
- 虚拟机软件(VirtualBox/VMware)
-
代码审计:
- RIPS
- PHPStan
- 手动代码审查