文件上传漏洞笔记
什么是文件上传漏洞?
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。
文件上传漏洞如何查找及判断
查找:得寻找web中,存在可以上传文件的地方。但可以上传不代表可以使用。那么就得判断是否能使用
前提1:可以任意上传文件,或者可以通过绕过任意上传文件,则代表拥有漏洞。
前提2:只能上传指定后缀的文件,但拥有文件包含漏洞,那么烨拥有文件上传漏洞。
验证/绕过
前端
JS类防护
这种最为简单,要么COPY下整个网页,删除掉JS代码,再运行。
要么直接使用浏览器自带的屏蔽JS功能,来保证功能的实现。
后端
黑名单(指通过识别并屏蔽掉特殊的后缀)
特殊解析后缀
如php5,phps,htmlphp等。
.htaccess解析
利用apache的特性,可以在执行文件的同目录下放入配置文件,可以直接将特点文件解析为PHP(或任意自身想要执行的)
前提:需要管理员配置过AllowOverride为NONE
<FilesMatch "\.jpg"> SetHandler application/x-httpd-php </FilesMatch>
大小写绕过
黑名单可能屏蔽不完善,那么可以利用
Php,PhP,pHp等方式绕过
点绕过
利用操作系统的特性,在文件后缀中
webshell.php.
尾部加入一个点,但在操作系统读取文件的时候,会自动删除掉尾部的点,使我们上传的文件为
webshell.php
空格绕过
利用操作系统的特性,在文件后缀中
”webshell.php “----此处有空格,使用双引号方便理解
尾部加入一个空格,但在操作系统读取文件的时候,会自动删除掉尾部的空格。
”webshell.php“
::$$DATA绕过
同上
webshell.php::$$DATA
读取结果
webshell.php
配合解析漏洞
利用中间件的漏洞,来使非PHP后缀的文件,以PHP的方式执行
双后缀名绕过
如果上传漏洞的地方,会过滤掉php后缀,使
webshell.php 过滤为 webshell.
那么则可使用双后缀
webshell.pphphp 进行绕过
(对多次过滤不生效)
白名单
MIME绕过
修改Content-Type的信息修改为
image/png
%00截断
在php读取文件中,可以直接截断后缀,就可以利用假后缀来上传文件
webshell.php%00jpg
拿去判断的参数是jpg,但真实上传的为
webshell.php
(在高于PHP5.3的版本中不可用)
0x00截断
雷同不赘述
0x0a截断
雷同不赘述
内容及其他
文件头检测
在web读取上传文件的时候
会查看文件内的编码,图片格式的头文件,都会有特定的编码
如jpg文件打开会有jpeg的前缀
这时候我们就需要将图片和php文件缝合在一起,可以利用cmd代码
copy 图片.jpg/b + 代码.php/a webshell.jpg
二次渲染
在web读取文件的时候,会重新对文件进行渲染。
即:服务器保存的文件为客户上传文件的复制
条件竞争
在web读取文件的时候,会将文件进行判断,符合要求则重新渲染,然后删除文件,否则直接删除
但会有一个步骤:先保存上传的文件,再进行删除
那么我们可以用力burp的instruder攻击器进行攻击,不断上传文件,然后在网页中进行刷新访问,如果删除的不及时,那么文件就会被我们访问到,然后被固定。
突破getimagesize
需要利用到工具,进行图片合成,才可以成功上传图片,直接使用copy会判断到图片和文件大小不符合。
突破exif_imagetype
直接copy图片绕过即可。
漏洞/修复
解析漏洞
根据中间件的不同,有不同的解析漏洞,具体可参考专门的笔记
IIS6/7
Apache
Nginx
CMS漏洞
根据开源的代码进行代码审计
分析程序编写人员因为疏忽产生的漏洞
其他漏洞
编辑器漏洞
就是很多网页中,包含发帖功能中的编辑器,这些也是包含漏洞存在的。
CVE等漏洞
这个属于公开漏洞,可以去vulhub去学习了解
安全修复
了解到攻击手段,就能了解如何防护