某微盘源码审计
字数 1480 2025-08-20 18:17:47
微盘源码安全审计教学文档
前言
本文档基于某微盘系统的源码审计结果,详细分析其中发现的安全漏洞,包括SQL注入、SSRF、后台认证绕过和任意文件上传漏洞。通过本教学文档,您将学习到如何识别和利用这些常见的安全漏洞。
一、前台SQL注入漏洞
漏洞位置
\application\index\controller\Goods.php 文件中的 ajaxkdata() 方法
漏洞分析
public function ajaxkdata() {
$pid = input('param.pid');
$data = Db::name('productdata')->where('pid='.$pid)->find();
// ...省略后续代码...
}
-
漏洞成因:
- 直接使用
input('param.pid')获取用户输入 - 将用户输入直接拼接到SQL查询语句中(
'pid='.$pid) - 未使用参数化查询或预处理语句
- 直接使用
-
利用方式:
构造恶意请求,在pid参数中注入SQL语句:/index.php/index/goods/ajaxkdata?pid=1) and updatexml(1,concat(0x7e,user(),0x7e),1) # -
漏洞影响:
- 可导致数据库信息泄露
- 可能获取管理员凭证
- 可能导致数据库被篡改
修复建议
-
使用ThinkPHP的预处理方式:
$data = Db::name('productdata')->where('pid', $pid)->find(); -
或使用参数绑定:
$data = Db::name('productdata')->where('pid=:pid', ['pid'=>$pid])->find();
二、SSRF漏洞
漏洞位置
\application\index\controller\Api.php 文件中的 post_curl() 方法
漏洞分析
public function post_curl($url,$data){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
// ...省略后续代码...
}
-
漏洞成因:
- 直接使用外部传入的URL参数进行curl请求
- 未对URL进行任何过滤或白名单校验
- 关闭了SSL证书验证(
CURLOPT_SSL_VERIFYPEER设为false)
-
利用方式:
- 攻击者可构造恶意请求访问内网服务
- 可用来探测内网拓扑
- 可能访问到内网敏感服务
-
漏洞影响:
- 可能导致内网服务被探测
- 可能被用来攻击内网脆弱服务
- 可能被用来绕过防火墙限制
修复建议
-
对传入的URL进行严格校验:
if(!preg_match('/^https?:\/\/(www\.)?example\.com/', $url)){ die('Invalid URL'); } -
启用SSL验证:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); -
限制可访问的协议和端口:
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); curl_setopt($ch, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); curl_setopt($ch, CURLOPT_PORT, 80); // 或443
三、管理后台登录凭证伪造
漏洞位置
\application\admin\controller\Base.php
漏洞分析
-
认证逻辑缺陷:
- 仅检查cookie中是否存在userid
- 检查token是否为"nimashabi"的MD5值(3c341b110c44ad9e7da4160e4f865b63)
- 检查otype是否为3
-
利用方式:
构造如下cookie即可伪造管理员身份:think_var=zh-cn;denglu=think:{"otype":"3","userid":"1","token":"3c341b110c44ad9e7da4160e4f865b63"} -
漏洞影响:
- 可完全控制后台
- 可执行任意管理员操作
- 可能导致系统被完全控制
修复建议
-
使用更安全的认证机制:
- 实现基于session的认证
- 使用ThinkPHP的Auth类
-
增加CSRF防护:
use think\middleware\Csrf; -
使用更复杂的token生成机制:
$token = md5(uniqid(mt_rand(), true));
四、后台任意文件上传漏洞
漏洞位置
\application\admin\controller\Setup.php 文件中的 editconf() 方法
漏洞分析
public function editconf() {
// ...省略权限检查...
$file = request()->file('pic_'.$_data['id']);
if($file){
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){
$_data['value'] = '/public' . DS . 'uploads/'.$info->getSaveName();
}
}
// ...省略后续代码...
}
-
漏洞成因:
- 文件上传处理未进行任何过滤
- 未检查文件类型和内容
- 上传的文件直接保存到可访问目录
-
利用方式:
- 上传PHP等可执行文件
- 通过web直接访问上传的恶意文件
-
漏洞影响:
- 可能导致服务器被完全控制
- 可上传webshell
- 可能导致数据泄露
修复建议
-
严格限制上传文件类型:
$info = $file->validate(['ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads'); -
检查文件内容:
if(!getimagesize($file->getRealPath())){ $this->error('非法文件'); } -
设置文件不可执行:
- 配置服务器禁止上传目录执行脚本
- 修改上传文件权限
五、综合防护建议
-
输入验证:
- 对所有用户输入进行严格过滤
- 使用白名单而非黑名单机制
-
安全配置:
- 关闭调试模式
- 设置正确的文件权限
- 定期更新框架和组件
-
日志审计:
- 记录所有敏感操作
- 监控异常行为
-
安全开发:
- 遵循最小权限原则
- 实施防御性编程
- 进行代码安全审计
六、总结
通过对该微盘系统的审计,我们发现了几类常见的安全漏洞,这些漏洞可能导致系统被完全控制。开发人员应重视安全开发实践,对所有用户输入保持警惕,实施多层防御策略,并定期进行安全审计和测试。