文件上传基本概述
1.1文件上传简述
顾名思义,文件上传就是将客户端的文件上传到服务器的过程称为文件上传。比如QQ空间发表说说上传的图片、招聘网上传简历、合天网安实验室修改头像、将文件上传到网盘等,这些都是文件上传。
1.2文件上传漏洞简述
上传文件的时候,如果服务器端后端语言未对上传的文件进行严格的验证和过滤,就容易造成上传任意文件的情况。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。
1.3文件上传漏洞的危害
攻击者通过上传恶意文件传递给解释器去执行,然后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理、命令执行等恶意操作。从而控制整个网站,甚至是服务器。
1.4文件上传漏洞的必备条件
·文件上传功能能正常使用
。上传文件路径可知
。上传文件可以被访问。上传文件可以被解析
1.5 为什么要进行文件上传
危害最大化
1.6检测上传文件的方式
客户端JavaScript检测(检测文件扩展名)
服务端MIME类型检测(检测content-type内容)
服务端文件扩展名检测(检测跟文件extension相关的内容)
服务端文件内容检测(检测内容是否合法是否含有恶意代码)等。
2.1客户端浏览器检测
当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台脚本检测扩展名
2.1.1绕过客户端检测实现上传
在本地浏览器客户端禁用JS:可使用火狐浏览器的Noscript插件、浏览器禁用JS等方式实现。
实战
启动pikachu
随意上传一个图片文件
显示上传成功
如果上传非图片文件
显示不成功
因为在JavaScript中进行判断
方法:
禁用火狐JavaScript,则上传文件不能被判断
在桌面创建一个php文件
<?php
eval($_POST['a']);
?>
然后刷新pikachu,重新上传
上传成功,并且路径为uploads/1.php
根目录中也有相应上传的文件
还可以使用一些扩展进行javascript绕过 (no-script)
客户端及MIME类型检测
2.2服务器端检测MIME类型
当浏览器在上传文件到服务器的时候,服务器对所上传文件的Content-Type类型进行检测,如果是允许的则可以正常上传,否则上传失败。
2.2.1 MIME理解
MIME (Multipurpose Internet Mail Extensions)是描述消息内容类型的因特网标准。用来表示文档、文件或字节流的性质和格式。在http数据包中在Content-Type字段显示。
2.2.2绕过MIME检测实现文件上传
利用Burp Suite
截取并修改
数据包中的Content-Type字段
的值为正常值从而进行绕过。
发到reperate中改成image/png
点击send发送后成功上传
连接后可通过蚁剑连接