某微盘源码审计
字数 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();
    // ...省略后续代码...
}
  1. 漏洞成因:

    • 直接使用 input('param.pid') 获取用户输入
    • 将用户输入直接拼接到SQL查询语句中('pid='.$pid
    • 未使用参数化查询或预处理语句
  2. 利用方式:
    构造恶意请求,在pid参数中注入SQL语句:

    /index.php/index/goods/ajaxkdata?pid=1) and updatexml(1,concat(0x7e,user(),0x7e),1) #
    
  3. 漏洞影响:

    • 可导致数据库信息泄露
    • 可能获取管理员凭证
    • 可能导致数据库被篡改

修复建议

  1. 使用ThinkPHP的预处理方式:

    $data = Db::name('productdata')->where('pid', $pid)->find();
    
  2. 或使用参数绑定:

    $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);
    // ...省略后续代码...
}
  1. 漏洞成因:

    • 直接使用外部传入的URL参数进行curl请求
    • 未对URL进行任何过滤或白名单校验
    • 关闭了SSL证书验证(CURLOPT_SSL_VERIFYPEER设为false)
  2. 利用方式:

    • 攻击者可构造恶意请求访问内网服务
    • 可用来探测内网拓扑
    • 可能访问到内网敏感服务
  3. 漏洞影响:

    • 可能导致内网服务被探测
    • 可能被用来攻击内网脆弱服务
    • 可能被用来绕过防火墙限制

修复建议

  1. 对传入的URL进行严格校验:

    if(!preg_match('/^https?:\/\/(www\.)?example\.com/', $url)){
        die('Invalid URL');
    }
    
  2. 启用SSL验证:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    
  3. 限制可访问的协议和端口:

    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

漏洞分析

  1. 认证逻辑缺陷:

    • 仅检查cookie中是否存在userid
    • 检查token是否为"nimashabi"的MD5值(3c341b110c44ad9e7da4160e4f865b63)
    • 检查otype是否为3
  2. 利用方式:
    构造如下cookie即可伪造管理员身份:

    think_var=zh-cn;denglu=think:{"otype":"3","userid":"1","token":"3c341b110c44ad9e7da4160e4f865b63"}
    
  3. 漏洞影响:

    • 可完全控制后台
    • 可执行任意管理员操作
    • 可能导致系统被完全控制

修复建议

  1. 使用更安全的认证机制:

    • 实现基于session的认证
    • 使用ThinkPHP的Auth类
  2. 增加CSRF防护:

    use think\middleware\Csrf;
    
  3. 使用更复杂的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();
        }
    }
    // ...省略后续代码...
}
  1. 漏洞成因:

    • 文件上传处理未进行任何过滤
    • 未检查文件类型和内容
    • 上传的文件直接保存到可访问目录
  2. 利用方式:

    • 上传PHP等可执行文件
    • 通过web直接访问上传的恶意文件
  3. 漏洞影响:

    • 可能导致服务器被完全控制
    • 可上传webshell
    • 可能导致数据泄露

修复建议

  1. 严格限制上传文件类型:

    $info = $file->validate(['ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads');
    
  2. 检查文件内容:

    if(!getimagesize($file->getRealPath())){
        $this->error('非法文件');
    }
    
  3. 设置文件不可执行:

    • 配置服务器禁止上传目录执行脚本
    • 修改上传文件权限

五、综合防护建议

  1. 输入验证:

    • 对所有用户输入进行严格过滤
    • 使用白名单而非黑名单机制
  2. 安全配置:

    • 关闭调试模式
    • 设置正确的文件权限
    • 定期更新框架和组件
  3. 日志审计:

    • 记录所有敏感操作
    • 监控异常行为
  4. 安全开发:

    • 遵循最小权限原则
    • 实施防御性编程
    • 进行代码安全审计

六、总结

通过对该微盘系统的审计,我们发现了几类常见的安全漏洞,这些漏洞可能导致系统被完全控制。开发人员应重视安全开发实践,对所有用户输入保持警惕,实施多层防御策略,并定期进行安全审计和测试。

微盘源码安全审计教学文档 前言 本文档基于某微盘系统的源码审计结果,详细分析其中发现的安全漏洞,包括SQL注入、SSRF、后台认证绕过和任意文件上传漏洞。通过本教学文档,您将学习到如何识别和利用这些常见的安全漏洞。 一、前台SQL注入漏洞 漏洞位置 \application\index\controller\Goods.php 文件中的 ajaxkdata() 方法 漏洞分析 漏洞成因: 直接使用 input('param.pid') 获取用户输入 将用户输入直接拼接到SQL查询语句中( 'pid='.$pid ) 未使用参数化查询或预处理语句 利用方式: 构造恶意请求,在pid参数中注入SQL语句: 漏洞影响: 可导致数据库信息泄露 可能获取管理员凭证 可能导致数据库被篡改 修复建议 使用ThinkPHP的预处理方式: 或使用参数绑定: 二、SSRF漏洞 漏洞位置 \application\index\controller\Api.php 文件中的 post_curl() 方法 漏洞分析 漏洞成因: 直接使用外部传入的URL参数进行curl请求 未对URL进行任何过滤或白名单校验 关闭了SSL证书验证( CURLOPT_SSL_VERIFYPEER 设为false) 利用方式: 攻击者可构造恶意请求访问内网服务 可用来探测内网拓扑 可能访问到内网敏感服务 漏洞影响: 可能导致内网服务被探测 可能被用来攻击内网脆弱服务 可能被用来绕过防火墙限制 修复建议 对传入的URL进行严格校验: 启用SSL验证: 限制可访问的协议和端口: 三、管理后台登录凭证伪造 漏洞位置 \application\admin\controller\Base.php 漏洞分析 认证逻辑缺陷: 仅检查cookie中是否存在userid 检查token是否为"nimashabi"的MD5值(3c341b110c44ad9e7da4160e4f865b63) 检查otype是否为3 利用方式: 构造如下cookie即可伪造管理员身份: 漏洞影响: 可完全控制后台 可执行任意管理员操作 可能导致系统被完全控制 修复建议 使用更安全的认证机制: 实现基于session的认证 使用ThinkPHP的Auth类 增加CSRF防护: 使用更复杂的token生成机制: 四、后台任意文件上传漏洞 漏洞位置 \application\admin\controller\Setup.php 文件中的 editconf() 方法 漏洞分析 漏洞成因: 文件上传处理未进行任何过滤 未检查文件类型和内容 上传的文件直接保存到可访问目录 利用方式: 上传PHP等可执行文件 通过web直接访问上传的恶意文件 漏洞影响: 可能导致服务器被完全控制 可上传webshell 可能导致数据泄露 修复建议 严格限制上传文件类型: 检查文件内容: 设置文件不可执行: 配置服务器禁止上传目录执行脚本 修改上传文件权限 五、综合防护建议 输入验证: 对所有用户输入进行严格过滤 使用白名单而非黑名单机制 安全配置: 关闭调试模式 设置正确的文件权限 定期更新框架和组件 日志审计: 记录所有敏感操作 监控异常行为 安全开发: 遵循最小权限原则 实施防御性编程 进行代码安全审计 六、总结 通过对该微盘系统的审计,我们发现了几类常见的安全漏洞,这些漏洞可能导致系统被完全控制。开发人员应重视安全开发实践,对所有用户输入保持警惕,实施多层防御策略,并定期进行安全审计和测试。