文件上传漏洞--理论

什么是文件上传漏洞?

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
过滤()和反引号 不能正常上传恶意代码,考虑使用日志注入
相关推荐
儒道易行8 分钟前
【Pikachu】目录遍历实战
网络安全
冰水°3 小时前
3.1_文件上传漏洞
安全·网络安全·文件上传·条件竞争·.htaccess·文件上传绕过
Wh1teR0se4 小时前
[ACTF2020 新生赛]Upload 1--详细解析
web安全·网络安全
23zhgjx-NanKon8 小时前
华为eNSP:RSTP
网络·安全·网络安全·华为
javachen__12 小时前
从美国大选,看软件安全风险与挑战
网络·安全·web安全
y0ungsheep16 小时前
[FBCTF 2019]rceservice 详细题解
安全·web安全·网络安全·正则表达式·php
follycat17 小时前
羊城杯2020Easyphp
网络·学习·网络安全
白总Server17 小时前
UI架构解说
大数据·服务器·网络·数据库·web安全·架构·数据库架构
dal118网工任子仪17 小时前
xss的过滤和绕过(2)
笔记·学习·计算机网络·网络安全·xss