文件上传漏洞--理论

什么是文件上传漏洞?

Web应用允许用户上传文件,但是没有对上传的文件进行严格的过滤和检测,导致网站执行了文件中包含的恶意代码。

漏洞的基本利用方式 是:
成功上传 包含恶意代码的文件,并在服务端成功执行该文件。

可见实现该漏洞的两个要点在于上传 与执行。

一句话木马

指仅由一行代码构成的木马文件。通过在服务端植入这行代码,就能获取到执行服务端命令的权限。

下面是最基本的一句话木马:

php 复制代码
//shell.php
<?php @eval($_POST[1]);?>
@指即使后面发生错误也不报错。
eval()函数将函数中的内容当作php代码执行。
$_POST[1]表示通过POST向网页传递名为1的参数。

当我们成功上传木马程序后,只要能找到它在目标服务器的对应位置,就能打开该程序并执行系统命令。

一句话木马的其他形式:

php 复制代码
<?=@eval($_POST['cmd']);?>     //短标签,适合过滤php时使用
<% @eval($_POST['cmd']);%>     //asp风格
<script language='php'>@eval($_POST['cmd']);</script>   //<script>风格,适合过滤<?时使用

常见的文件上传漏洞

前端校验

有些网站将对上传文件的检测及过滤功能写在了前端,导致攻击者能够轻松绕过检测。

例如下面这个界面,就是将检测功能写在了前端。
我们注意到该页面只允许上传后缀为png的文件。对于这种情况,我们常用的绕过方法有两种。

第一种: 修改前端代码。

F12--查看器,将相应的位置修改为php,就可以上传php后缀的文件。

第二种: 将我们的.php文件修改为.png文件,然后上传并抓包,在请求体中将后缀名修改回.php,同样绕过了前端检测。

MIME验证

对文件的媒体类型进行检测,媒体类型信息在请求头中位于文件的Content-Type位置,如果不符合上传要求,就会被拦截。

对于这种检测,我们的绕过方式是将Content-Type修改为允许上传的类型。
常见的图片格式媒体类型:

image/jpeg:JPEG格式图片;

image/gif:GIF格式图片;

image/png:PNG格式图片;

后端过滤后缀名(.user.ini)

在服务端的后端定义了一个后缀名黑名单,并会检测用户上传文件的后缀名是否位于该黑名单中。如果在,则拒绝上传。

对于这种过滤,我们只能将木马程序的后缀名修改为合法的后缀名 才能成功上传。

但是这种情况下,服务端就不会将我们的木马程序解析为PHP程序,也就不能正常执行我们的木马。

为了让服务器能够以正常执行我们的程序,可以上传 .user.ini 文件。

php 复制代码
//.user.ini
auto_prepend_file=shell.png

这个文件的作用是:在访问主页文件时,会自动包含shell.png文件,将其文件内容当做php代码执行。

如果我们上传的文件在/upload目录下,那么upload就是shell.png的主页文件。我们访问/upload时,会自动包含并以php代码形式执行shell.png中的恶意代码。

文件内容过滤

即服务器后端对文件的内容进行了检测,如果其中包含不合规的内容,就会拒绝文件上传。

常见过滤及绕过:

php 复制代码
过滤php 使用短标签 <?= 绕过
过滤[] 使用{}绕过
过滤[]和{} 不能使用一句话木马,直接上传RCE代码
过滤() 使用反引号执行RCE
过滤()和反引号 不能正常上传恶意代码,考虑使用日志注入
相关推荐
P1Browser1 小时前
浏览器指纹参数校验:时区、语言、分辨率的一致性原理
web安全·api·前端开发·跨境电商·环境隔离·浏览器指纹
白帽攻防录3 小时前
SRC 挖洞:PowerPoint 四个 RCE,预览窗格怎么变成零点击入口
网络安全·powerpoint·文档安全
无障碍研究院5 小时前
2026TADC|李璀:从标准走向落地,拆解无障碍产品合规实操方案
安全·web安全
酒神dnspup5 小时前
DNS 泄露检测怎么做:从随机权威域名、递归解析器出口到 HTTP 出口一致性
网络安全·dns·网络排查·dns泄露
学逆向的7 小时前
C 选择结构的执行效率分析
c语言·开发语言·算法·网络安全
愤怒火龙果8 小时前
AI攻防 LLM中间件
人工智能·网络安全·中间件
科技小登8 小时前
网页防篡改与 WAF 方案怎么选?内容拦截、篡改监测与自动恢复实战测评
网络·web安全·ddos
持敬chijing8 小时前
白盒测试与代码审计-JS 数据逆向
javascript·网络·安全·web安全·网络安全·网络攻击模型·安全威胁分析
白帽攻防录17 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全