码迷,mamicode.com
首页 > Web开发 > 详细

文件上传漏洞

时间:2020-04-05 20:12:15      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:comm   tps   file   user   too   生效   path   站点   alt   

CTF考点总结-文件上传

前端检查

基本不存在

文件后缀名检查:php3457

该项为apache专属

关键点在/etc/apache2/mods-available/php5.6.conf这个文件,满足.+\.ph(p[3457]?|t|tml)$,都会被当作php文件解析。在apache2目录下grep -r x-httpd-php /etc/apache2找到对应文件就能知道解析哪些后缀

技术图片

请求头检查:content-type,MIME类型

将php文件的content-type:application/octet-stream修改为image/png等就可以

更多content-type:可以查看https://tool.oschina.net/commons/

中间件解析漏洞及语言漏洞

apache2

多后缀解析漏洞

在Apache 2.0.x <= 2.0.59,Apache 2.2.x <= 2.2.17,Apache 2.2.2 <= 2.2.8中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。

如1.php.abc,因apache2不识别.abc后缀,所以向前解析php

.htaccess

Apache提供了一种很方便的、可作用于当前目录及其子目录的配置文件——.htaccess(分布式配置文件)

当站点配置上标有AllowOverride All,并且rewrite_mod开启时,.htaccess文件就会生效。

当在.htaccess中写入AddType application/x-httpd-php abc时,就会把1.abc当作php文件解析

CVE-2017-15715

利用在上传文件时,文件名之后添加一个\x0a来绕过黑名单上传的限制

nginx

CVE-2013-4547

参考https://github.com/vulhub/vulhub/tree/master/nginx/CVE-2013-4547。

即上传一个1.gif,然后访问1.gif[0x20][0x00].php([0x20][0x00]为空格和\0不需要url编码),1.gif会被当作php解析

php-cgi漏洞

在php配置文件中,开启了cgi.fix_pathinfo,导致图片马1.jpg可以通过访问1.jpg/.php解析成php

.user.ini

当使用CGI/FastCGI 来解析php时,php会优先搜索目录下所有的.ini文件,并应用其中的配置。类似于apache的.htaccess,但语法与.htacces不同,语法与php.ini一致。因nginx实际上只是起到转发的作用,实际解析一般为php-fpm或fastcgi来解析,所以在.user.ini中写如auto_prepend_file=test.jpg,之后上传.user.ini与test.jpg,过一段时间等待.user.ini被加载后,会导致每个php文件解析之前先将test.jpg当作php解析。

php

00截断

php 版本为5.2.x,在上传文件时在文件后名后追加\0即可让上传的文件,最终变为以.php结尾的文件

文件标记检查:<?php,<?=,文件头

https://www.php.net/manual/zh/language.basic-syntax.phpmode.php

技术图片

其中第2种在php7种不可以使用,在php5中可以使用

get_imagesize(),exif_imagetype()检查

exif_imagetype()

该函数为获取图片的类型,常用于检测上传文件的类型

(1)可以使用在文件头添加魔术字节GIF89a即可绕过
(2)使用copy命令将木马放在一个正常文件之后

get_imagesize()

该函数为获取图片的长宽,常用于检测上传文件的类型
(1)可以在文件之前添加

#define width 1337                          
#define height 1337

即可绕过

二次渲染

当发现上传的图片被二次渲染时,可以把图片下载下来,再次上传,再次下载。将两次下载的图片进行比对,找到没有被重新渲染的部分,将木马写入其中即可绕过

多文件上传

当服务器支持多文件上传,但只对上传的第一个进行过滤时,可以一次上传多个文件进行绕过

文件上传解压

tar压缩包

linux环境

ln -s / 1.jpg 会在当前目录下生成一个名为1.jpg的软链接
tar cf 1.tar 1.jpg
上传到服务器,访问1.jpg,就可以在服务器中漫游了
也可以利用这个办法绕过php_admin_flag engine off

zip压缩包

如果服务器对上传的zip文件直接解压的话,就可以构筑这样一个文件来绕过
环境:/var/www/html/upload目录不解析php文件,解压文件默认在upload下

新建1234.php,内容任意
将1234.php压缩为1234.zip文件
使用hxd或者010editor等16进制编辑器编辑1234.zip文件,将所有字符串1234.php替换为../1.php(../1共四位所以使用1234为文件名,可根据需求修改),保存。
将修改后的1234.zip上传,经过服务器解压,会在/var/www/html下生成一个1.php

条件竞争

文件上传漏洞

标签:comm   tps   file   user   too   生效   path   站点   alt   

原文地址:https://www.cnblogs.com/kagari/p/12638765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!