文件上传总结

文件上传的过滤

(1)针对文件后缀名 (php,jsp.asp)
多后缀绕过,空格,点号过滤,特殊后缀绕过,大小写绕过,::$data绕过(适用于windows)
(2)针对文件头 (GIF89a)
可以修改文件头
(3)针对文件类型 (MIME)
修改Content-Type:
可以修改文件的类型
(4)针对文件的内容进行过滤
比如过滤php,log,[].{},'',eval 等各种内容
(5)利用 .user.ini 和 .htaccess 进行绕过
.user.ini生效的前提是访问本文件夹内的php文件,它才能起到配置作用
也就是说,.user.ini的同级目录中必须存在php文件才能进行利用

.user.ini是 php特有的
auto_prepend_file=shell.png  代表在执行此目录下的第一个php文件时回包含shell.png,这样我们就可以上传一个 png文件进行文件包含

、ini的同级目录中必须存在php文件才能进行利用

.htaccess 是apache特有的
下面是意思是将 shell.jpg文件当成php文件执行
<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

(6)条件竞争

在文件上传中,假设存在如下流程:
上传文件后立即保存到服务器。
上传成功后进行文件格式的校验。
如果文件格式符合要求,则重命名该文件。
如果文件格式不符合要求,则删除该文件。
由于服务器在处理多个并发请求时,可能会出现以下几种情况:
访问时间点在文件上传之前:

此时,文件尚未上传到服务器,任何对该文件的访问请求将返回“文件不存在”。
访问时间点在文件上传成功后,但服务器尚未完成校验及处理:

在此时间窗口内,文件已经存在于服务器上,但尚未经过格式校验。任何对该文件的访问请求将会找到文件,但由于文件格式尚未验证,可能存在安全隐患。
访问时间点在服务器删除文件之后:

如果文件格式不符合要求,服务器会删除该文件。此时,任何对该文件的访问请求将返回“文件不存在”。
7 文件包含
上传某一个文件后可以包含文件
比如url/?file=xxxx
这样可以在上传文件的时候里面包含木马文件进行尝试包含
8 二次渲染
上传文件后,网站会对图片进行二次处理(格式,尺寸要求等),然后生成一个新图片保存在服务器中。
因此我们可以将一个正常显示的图片上传到服务器,寻找图片被渲染之后与原始图片部分对比仍然相同的数据块部分,将webshell代码插在该部分,进行上传
方法:
准备图片马
将原图片上传,下载渲染后的图片进行对比 ,可以利用工具找相同处,在相同的地方覆盖字符串,插入一句话木马,或者恶意指令
9 %00截断
这边有分为post和get类型。post需要通过hex模式进行修改后缀 (针对php<5.3)
参考:https://blog.csdn.net/qq_65165505/article/details/141370798
https://www.cnblogs.com/ddd-flag/articles/18563718

posted @ 2025-08-21 16:09  JuneCy  阅读(6)  评论(0)    收藏  举报