UP 文件上传漏洞模拟

模拟不安全的文件上传漏洞,演示攻击者如何上传 Webshell 控制服务器

[X] 漏洞代码
// 危险:无验证直接保存
move_uploaded_file(
    $_FILES['file']['tmp_name'],
    'uploads/' . $_FILES['file']['name']
);
[OK] 安全代码
// 安全:白名单 + 重命名
$allowed = ['jpg','png','pdf'];
$ext = pathinfo($name, PATHINFO_EXTENSION);
if (!in_array(strtolower($ext), $allowed)) {
    die('非法文件类型');
}
$newName = uniqid() . '.' . $ext;
move_uploaded_file($tmp, $dir . $newName);
[TIP] 攻击演示:切换到漏洞模式,上传以下内容的 PHP 文件:
<?php system($_GET['cmd']); ?>
保存为 shell.php 后上传,即可执行任意命令!
📤
点击或拖拽文件到此处上传
支持 JPG, PNG, GIF, PDF, TXT(安全模式)

[DEFENSE] 防御措施

  • 文件类型白名单:只允许 jpg, png, pdf 等安全类型
  • MIME 类型验证:检查文件的 Content-Type
  • 文件内容检测:使用 getimagesize() 验证图片头
  • 文件重命名:使用随机名称,避免可预测路径
  • 存储位置隔离:上传目录禁止执行脚本
  • 大小限制:防止上传超大文件耗尽磁盘

← 返回攻击模拟首页