news 2026/2/9 1:59:07

文件上传漏洞原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
文件上传漏洞原理

一,文件上传漏洞定义

文件上传漏洞是web系统中常见的一种功能,通过文件上传能实现上传图片、视频,以及其他类型的文件,但是随着web中包含的功能越来越多,潜在的网络安全风险也就越大。

如果恶意用户上传了可执行的文件或者脚本,就会导致网站被其控制甚至会使其服务器沦陷,以至于引发恶意的网络安全事件。

二,文件上传漏洞原理

通尝来说文件上传功能是没有问题的,主要是服务器如何对上传的文件如何进行处理。

若WEB未对用户上传的文件进行有效的审查,若存在恶意用户对其上传一句话木马,从而实现控制WEB网站的目的。
下面是一句话木马的简单介绍

<?php @eval($_POST['attack']);?>简单的一句话木马

常见的一句话木马:php的一句话木马: <?php @eval($_POST['pass']);?>
asp的一句话是: <%eval request ("pass")%>
aspx的一句话是: <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

这句话什么意思呢?

(1)php的代码要写在<?php ?>里面,服务器才能认出来这是php代码,然后才去解析。
(2)@符号的意思是不报错,即使执行错误,也不报错。

为什么密码是cmd呢?

那就要来理解这句话的意思了。php里面几个超全局变量:$_GET、$_POST就是其中之一。$_POST['a']; 的意思就是a这个变量,用post的方法接收。

注释:传输数据的两种方法,get、post,post是在消息体存放数据,get是在消息头的url路径里存放数据(例如xxx.php?a=2)

如何理解eval()函数?

eval()把字符串作为PHP代码执行。】


三,文件上传思路

常规类
扫描获取上传,会员中心头像上传,后台系统上传,其他途径上传。

cms类
已知道的cms源码。

编辑类
ckeditor,fckeditor,kindeditor,xxxxeditor。

其他类/CVE
代码审计,平台或第三方应用。

web界面存在的风险点
上传头像、上传身份认证、上传文件以及有存在文件上传的地方就可能存在相关的漏洞,但不是有文件上传就一定有漏洞,但有文件上传就能进行测试。

文件上传实战思路
上传文件和文件执行是两个东西

漏洞分类:解析漏洞、cms漏洞、其他漏洞(编辑器漏洞、cve漏洞、安全修复)

思路:

如果有一个网站,要从文件上传的方向开始

第一步:先看中间件,看是否存在解析漏洞/CMS/编辑器漏洞/CVE/

如果有,如何找:

字典扫描:扫描会员中心,文件上传的位置

找到后,如何利用:

验证/绕过

四,解析漏洞


1.解析漏洞解释


解析漏洞就是指服务器应用程序在解析某些精心构造的后缀文件的时候,会将相关的文件解析成网页的脚本,从而导致实现控制网站,同时大部分的解析漏洞都是由应用程序产生的。

IIS解析漏洞
IIS5.0/6.0
目录解析

在以. asp文件名的文件夹下的任何文件都将作为asp文件执行。

也就是当目录为XX.asp的时候,那么当访问下面的图片的时候,如XX.aps/1.jpg就会被当作ASP执行。

2,文件解析

如果文件为1.asp;.jpg,由于IIS不解析;后面的内容,使用就会把文件当作1.asp进行解析,同时还存在.asa、.cer、.cdx可以进行解析。

修复建议

1)限制上传目录的执行权限,不允许执行脚本。

2)不允许创建目录。

3)上传的文件进行重命名。

IIS7.0/IIS7.5
IIS7.0/IIS7.5Fast-CGI

在Fast-CGI开启的状态下,在类似1.jpg后面加上/1.php,变成/1.jpg/1.php路径会解析成PHP文件。需要进入php.ini里面修改cig.cgi_ pathinfo=1。

将1.txt文本文件中的后门代码写入到1.jpg图片的二进制代码:

copy 1.jpg/b + 1.txt/a 1.jpg

1.txt的文件内容为:

<?PHPfputs(fopen('shell.php','w'),'<?php eval($_POST[password])?>');?>
当在图片文件中写入后门代码,当访问这个图片的时候加上/.php的时候就会在当前目录下生成一句话木马shell.php。

修复建议

配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序

apache解析漏洞
apache解析漏洞
在apache1.x和apache2.x中存在解析漏洞。

当一个文件为1.php.yy.xx的时候就会被当作php执行,这是由于在apache解析文件的时候有一个原则就是,以.后面的扩展名来解析,当遇见不认识的扩展名的时候,就会向前解析,直到遇到能够解析的后缀名为止。

如:1.php.yy.xx,首先会解析xx,xx无法解析就会去解析yy,yy无法解析就会去解析php,那么php是能够解析了,那么就会结束。

这种方式多用于绕过黑名单的检查。

修复建议
1)更新至最新版本。

将上传的文件进行重命名。

解析漏洞
nginx<8.03
nginx配置文件错误

由于nginx默认是用cgi解析php的,因此和iis一样可以制作图片马进行上传。

当在图片文件中写入后门代码,当访问这个图片的时候加上/.php的时候就会在当前目录下生成一句话木马shell.php。

修复建议

1)配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序

2)或如果需要使用到cgi.fix_pathinfo这个特性(例如:Wordpress),那么可以禁止上传目录的执行脚本权限。 或将上传存储的内容与网站分离,即站库分离。

3)或高版本PHP提供了security.limit_extensions这个配置参数,设置security.limit_extensions = .php

nginx 0.5/0.6/0.7<=0.7.65/0.8<=0.8.37
nginx空字节任意代码执行

当使用PHP-FastCGI执行PHP时,遇到url里面存在%00空字节时与FastCGI的处理不一致,导致可在非PHP文件中嵌入PHP代码,通过访问url+%00.PHP来执行其中的PHP代码。

比如上传一张图片马1.jpg,那么当访问这个图片马的时在1.jpg后面添加%00.php就会将图片马以php执行。

修复建议

1)升级nginx版本。

3,编辑器漏洞


介绍
编辑器也就是在线的web编辑器,比如在搭建博客后需要发布文章,那么用来发布文章的界面就是web编辑器。当然web编辑器有很多,如:UEDITOR(百度)、eWebEdit、FCKeditor、CKEditor(新版fck)、Kindeditor、DotNetTextBox、CuteEditor等等。

五,WAF绕过


5.1.WAF绕过解释


waf绕过其实就是将数据包截获到,对里面的内容进行解析,比如对文件的后缀名就判断是否在相应的黑名单中,文件内容中是否存在webshell代码。

总的来说文件上传都是在数据包中进行各种操作来进行绕过。

5.2.上传参数名解析


Content-Disposition :一般可更改

name:表单参数值,不能更改

filename:文件名,可以更改

例如应用bp修改

Content-Type:文件MIME,视情况更改

5.3.绕过方式
5.3.1.数据溢出
5.3.1.1.form-data与name之间

在form-data;与name="upload_file"; filename="2.php"之间添加大量的垃圾数据,可以边添加边测试直到上传上去,主要添加的垃圾数据需要在后面添加一个";"进行结尾。

5.3.1.2.name与filename之间

当然这里不单单可以插入在form-data;与name="upload_file"; filename="2.php"之间,也可以在name="upload_file"; 与filename="2.php"之间。但是数据不能乱插入,比如你插在2.php中,那肯定不行,一般情况下,文件名称长度都可能存在限制,并且太长也上传不上去。


5.3.2.1.filename符号变异

符号变异也就是将单双引号变换使用,或者单双引号缺失一部分进行使用,或者不使用单双引号来进行绕过。目前测试好像是无法通过了。

Content-Disposition: form-data; name="upload_file"; filename="2.php

Content-Disposition: form-data; name="upload_file"; filename='2.php

Content-Disposition: form-data; name="upload_file"; filename=2.php

5.3.2.2.form-data符号变异

Content-Disposition:"form-data"; name=upload_file; filename="2.php"

Content-Disposition:'form-data'; name="upload_file"; filename='2.php'

5.3.3.数据截断
5.3.3.1.回车换行

通过换行来实现绕过,但是中间不能有空行。


5.3.3.2.分号截断

若WAF匹配文件名到分号截止,则可以绕过。

5.3.4.字段名变换
5.3.4.1.大小写变换

对这三个字段进行大小写进行变换,比如将name换成Name、Content-Disposition换成content-disposition等等。

5.3.4.2.顺序颠倒

针对name和filename这两个字段,我们可以尝试交换name和filename的顺序。(由于有规定Content-Dispositon必须在前面,因此我们不能修改该字段的内容)

5.3.5.重复数据


通过设置多个参数进行匹配,避免被匹配到。

Content-Disposition: form-data; name="upload_file";filename="2.jpg";filename="2.jpg";filename="2.jpg";filename="2.jpg";......filename="2.php";

最全的文件上传漏洞之WAF拦截绕过总结:干货 | 最全的文件上传漏洞之WAF拦截绕过总结-腾讯云开发者社区-腾讯云

本文参考了部分csdn大佬写的博客论文,内容仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 0:37:42

php图形验证码生成系统源码 支持api接口调用 提供SDK 轻量级简单易用

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 图形验证码生成系统是一个基于php开发的轻量级验证码服务&#xff0c;提供安全可靠的图形验证码生成、显示和验证功能。系统采用无数据库设计&#xff0c;使用JSON文件存储数据&#xff…

作者头像 李华
网站建设 2026/2/8 6:11:45

终端渲染天花板:永恒的工具

表达凝聚全世界&#xff0c;一行统摄天下终。 笔记模板由python脚本于2026-01-27 12:44:36创建&#xff0c;本篇笔记适合研究终端渲染的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Python官网&…

作者头像 李华
网站建设 2026/2/9 0:26:17

springboot古诗词鉴赏在线学习系统_3krsp-vue

目录系统概述技术架构核心功能特色亮点应用场景开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 SpringBoot古诗词鉴赏在线学习系统是一个结合前后端技术的Web应用&#xff0c;后端基于SpringBoot框架&#xff0c;前端…

作者头像 李华
网站建设 2026/2/6 19:14:07

导师严选2026 AI论文平台TOP9:专科生毕业论文写作全攻略

导师严选2026 AI论文平台TOP9&#xff1a;专科生毕业论文写作全攻略 2026年专科生论文写作工具测评&#xff1a;选对平台&#xff0c;事半功倍 随着人工智能技术的不断进步&#xff0c;AI论文平台已成为越来越多专科生撰写毕业论文的重要辅助工具。然而&#xff0c;面对市场上琳…

作者头像 李华
网站建设 2026/2/8 0:09:37

亲测好用!自考毕业论文必备9款AI论文工具深度测评

亲测好用&#xff01;自考毕业论文必备9款AI论文工具深度测评 自考论文写作的智能助手&#xff1a;AI工具如何提升效率 随着自考人数逐年攀升&#xff0c;毕业论文成为每位考生必须面对的挑战。然而&#xff0c;从选题到成稿&#xff0c;整个过程往往耗时耗力&#xff0c;尤其对…

作者头像 李华
网站建设 2026/2/8 2:43:18

电脑系统打开软件出现mfc71d.dll丢失问题 免费下载方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华