针对windows系统做应用服务器-文件上传%00截断

概述

使用Flask的Sample写了个文件上传Demo,模拟下文件上传%00截断

上传代码如下(注释掉文件名称的安全过滤方法,保留了文件后缀名校验)


针对windows系统做应用服务器-文件上传%00截断_第1张图片
注释掉文件名称的安全过滤

正常情况下,后缀名为.py的文件是不能上传的,出现如下情况:

针对windows系统做应用服务器-文件上传%00截断_第2张图片
上传tt.py


针对windows系统做应用服务器-文件上传%00截断_第3张图片
后端有后缀校验


但因为应用服务器是windows,可以使用%00截断绕过

1-修改tt.py的名称为tt.py%00.jpg,重新上传,使用burpsuite拦截上传请求,并将%00做URL-Decode

针对windows系统做应用服务器-文件上传%00截断_第4张图片
拦截请求,将%00做URL-Decode


URL-Decode后

2-释放请求,可以看到文件上传成功


针对windows系统做应用服务器-文件上传%00截断_第5张图片
文件上传成

文件上传,应该怎样做

1-后端安全过滤文件名称,去除特殊符号或标志(.. %00 等等),极端的话完全重命名,使用其他方式记录安全过滤后文件名称(如果有必要)

2-后端判断安全过滤后名称的后缀

3-更严格的话,可以读取文件,根据文件头特征再次判断文件类型

4-再保险可以存储文件到数据库中

你可能感兴趣的:(针对windows系统做应用服务器-文件上传%00截断)