漏洞复现指南:利用 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 潜入院子后,只需照着蓝图"复刻"一把,依然能打开你的防盗门。

相关推荐
Kagol2 小时前
🎉TinyVue v3.27.0 正式发布:增加 Space 新组件,ColorPicker 组件支持线性渐变
前端·vue.js·typescript
潍坊老登2 小时前
大前端框架汇总/产品交互参考UE
前端
方安乐2 小时前
获取URL参数如何避免XSS攻击
前端·xss
十二AI编程2 小时前
MiniMax M2.1 实测,多语言编程能力表现出色!
前端
鹿野素材屋3 小时前
技术闲聊:为什么网游会在固定时间点,刷出固定的道具?
前端·网络·unity
同学807963 小时前
🔥🔥高效易用的 Vue3 公告滚动组件:打造丝滑的内容滚动体验(附源码)
前端·vue.js
编程修仙3 小时前
第二篇 Vue指令
前端·javascript·vue.js·前端框架
frontend丶CV3 小时前
useMemo
前端·react.js