1098 字
5 分钟
第49天:WEB攻防-文件上传

WEB攻防-文件上传&存储安全&OSS对象&分站&解析安全&解码还原&目录执行#

50321de96d41fb3e387391db3e6d424b

目录#

一、知识点概览#

  1. 文件上传-安全解析方案-目录权限&解码还原
  2. 文件上传-安全存储方案-分站存储&OSS对象

二、演示案例#

  • 文件-解析方案-执行权限&解码还原
  • 文件-存储方案-分站存储&OSS对象
  • 实例-解析存储-传输&分站&OSS存储

三、文件-解析方案-执行权限&解码还原#

image-20250829134659342

1、执行权限#

文件上传后,存储目录不给执行权限。

原理#

开启禁止目录执行,将服务器的文件上传后存储目录,取消读取和执行的权限。

操作与现象#

  • 未开启禁止目录执行时:由于文件上传功能未做过滤,直接上传包含后门的木马文件1.php,上传成功后访问该文件,phpinfo被执行,文件被解析为PHP脚本。
  • 开启禁止目录执行后:在小皮网址配置中,选择安全配置→开启禁止目录执行→将禁止执行的目录设置为上传目录(/1/upload);开启后再次访问上传的木马文件,报错403,文件上传漏洞无法被利用。

image-20250829134859199

image-20250829134915704

image-20250829135002703

image-20250829135022283

2、解码还原#

3b8763c308496fef6dd281d1e3f138c5

数据做存储,解析固定(与文件后缀名无关);文件上传后利用编码传输,再进行解码还原。

核心逻辑#

当服务器把上传的文件利用Base64编码转换为数据存储,从根本上解决文件上传漏洞问题——以数据形式存储时,无其他类型文件解析,即使上传后门文件,最终也会被当成图片解析,由固定协议(data:image/png;base64,base数据)解析数据。

实现代码(PHP)#

<?php
// 处理文件上传
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
// 获取上传的文件信息
$file = $_FILES['file'];
// 获取文件名和临时文件路径
$filename = $file['name'];
$tmpFilePath = $file['tmp_name'];
// 将文件内容转换为Base64编码
$base64Data = base64_encode(file_get_contents($tmpFilePath));
// 输出Base64编码的文件内容
echo $base64Data;
// 如果是图片文件,可以将其在页面上显示
echo '<img src="data:image/jpeg;base64,' . $base64Data . '" alt="上传的图片">';
}
?>

b9a3b34a9da263ea673f5b6467aa9ef9

1f0b84ea1f3e5230be753924385abd9b

8abecb81df3a02ea32e67163c5a84671

四、文件-存储方案-分站存储&OSS对象#

1、分站存储#

  • 上传域名:upload.xiaodi8.com(用于接收文件上传)
  • 存储域名:images.xiaodi8.com(对应另一台服务器,目录权限锁死,仅提供存储服务,不提供解析服务——即使上传木马文件,连接后门也无效)

af53aa23b1905aaf4225ca27daaafaa3

46ceae64dc45fd3924b2dd5cfc7d3bf7

额外安全措施#

存储图片的服务器上,对上传文件还会使用Base64编译为数据,进一步降低文件上传隐患。

2、OSS对象#

基于Access控制的OSS对象存储,核心是Bucket对象

核心特性#

上传的文件仅作为“网盘文件”存在,不提供解析服务,只支持下载操作。

afb67bc810bd7a934a5837edb19b207c

07ea7a200c947156c3fdad20f0fb4591

五、如何判断对应安全方案#

  1. 判断“目录无执行权限”:若目录下已上传木马文件,访问其上传路径时报错403禁止访问,可能是文件上传后存储目录未给予执行权限。04da26684d11bba1713cca3d0981ea9c
  2. 判断“解码还原”:上传文件时抓取数据包,若发现数据由固定协议(data:image/png;base64,base数据)传输,则为解码还原方案。7d731d24a3252a21165b86ae56996fe2
  3. 判断“分站存储”:上传图片后,查看图片URL地址的域名与目标上传地址是否一致,若不一致则为分站存储。ec8b54845b6be53d33b7d2a53cef9bf7
  4. 判断“OSS对象存储”:访问上传的文件路径时,仅能实现访问及下载操作,多半是OSS对象存储。07ea7a200c947156c3fdad20f0fb4591

六、安全绕过#

以上安全方案中,除“目录设置权限”可通过换目录解析绕过外,其他方案均无解。

绕过逻辑#

控制上传文件的存储目录,绕开已开启“禁止执行”限制的目录(该绕过方式实际作用有限,属于“鸡肋”操作)。

25ee9298b0759bbd3ae83771c3058324

69617143f4c98f05ed3a18e60d6f7ac7

第49天:WEB攻防-文件上传
https://konwait12.github.io/my-kon-blog/posts/049web攻防/
作者
k-on!--wait
发布于
2025-08-26
许可协议
CC BY-NC-SA 4.0