个人资料
File Upload (文件上传漏洞)通常没有严格过滤和检查用户上传的文件类型、内容,因此攻击者上传木马、病毒、恶意脚本等简单来说,就是用户直接或通过各种旁路方式将webshell上传到服务器上执行使用。 例如,如果服务器是php环境,用户上传php一言特洛伊木马,然后通过菜刀连接获取webshell,则可能会篡改服务器文件或执行命令。
如何验证文件上传
客户端javascript检查(通常仅检查扩展名) ) ) ) ) ) ) ) )。
当客户端选择文件并单击上传时,客户端尚未向服务器发送任何消息,前端js脚本将检测文件的扩展名以确定它是否为可上传类型
服务端验证
文件头content-type字段检查后端按黑白列表检查过滤上载文件的MIME类型
文件内容的标头检查
每个文件都有不同的标头。 标头用于描述文件的重要属性,以将这些属性传达给打开和处理文件的程序。 还有一个上传界面,用于检测上传的文件头信息,以确定它是否是真正的文件类型。 例如,jpg格式的图像标头为JFIF,gif标头为GIF89a,png标头为%PNG。
确认文件大小
一些上传界面使用getimagesize ()函数等函数来检测上传图像的大小是否为正常图像大小,从而防止木马上传一句话。
扩展名黑名单检查
扩展名白名单检查
自定义正规检查
WAF设备检查
(因WAF产品而异)
绕过姿势
1 )客户端验证
首先,将上传文件的扩展名更改为符合脚本检测规范的扩展名,上传时在burpsuite中捕获数据包,撤消数据包中的文件扩展名,达到旁路的目的
在本地浏览器中直接禁用JS
2 )文件头内容类型字段检查
使用burpsurite、firebug等篡改http header内容类型的内容。 这意味着将content-type :应用程序/PHP更改为其他web程序允许的类型,如content-type3360image
典型的MIME类型:
文本/平面(纯文本)
文本/html (html文档)
文本/JavaScript (js代码)
应用程序/XHTML XML (XHTML文档)
image/gif(gif图像)
image/JPEG(JPEG图像)
image/png(PNG图像)
视频/mpeg (mpeg视频)。
应用程序/操作流(二进制数据) )。
ppplication/pdf(pdf文档)。
APP/(编程语言)该语言的代码
应用程序/ms word (Microsoft word文件) )。
消息/RFC 822 (RFC 822格式)
多点/备用(html邮件的html格式和纯文本格式,以不同格式表示相同内容)。
应用程序/x-www-form-urlencoded (开机自检方法提交的表单)
多重/表单-数据(开机自检提交时带有文件上传的表单)。
3 )文件内容标头检查
在上传脚本的开头添加相应文件的开头字节。 (即使php引擎跳过前面的内容而不将其解释为html文本,后面的代码也可以执行。)
附上各种格式文件的内容头表
get shell查找与上载文件类型匹配的文件,并将其与脚本文件合并以创建图像木马,上载新文件,然后与文件合并以包含漏洞
4 )检查文件大小
继续在上传的数据中填充垃圾数据,或者制作图像木马绕过。
5 )黑名单检查文件扩展名
查找和绕过缺少的文档类型
6 )其他旁路方法
舍去00
扩展名的大小写将被绕过
条件竞争
分析漏洞
总结:上传旁路方法要灵活运用,不变通,多种方法可以达到上传效果
实验
实验环境: phpstudy2016
靶机: dvwa文件上载高安全级别
源代码
可见,此级别采用白名单过滤,只允许上传jpg、jpeg或png格式的文件扩展名,文件大小小于100000字节。
在cmd中使用copy命令生成图像木马
p>发现一句话木马一插入图片尾部
上传成功
可见文件位于C:phpstudyWWWDVWAhackableuploads目录下
尝试用菜刀连接
发现出现错误,因为木马被当作图片解析而不被当作php解析
此时可利用文件包含漏洞
利用DVWA的File Inclusion漏洞来将图片解析为php
构造url
连接发现错误,这是为DVWA需要登陆
可以右键点击刚添加的shell,选择浏览网址,在菜刀自带的浏览器中登陆DVWA将安全等级设为high及以下.
然后就可以成功连接.
防护
1.文件上传的目录设置为不可执行
只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。
2.判断文件类型
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
3.使用随机数改写文件名和文件路径
文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。
4.单独设置文件服务器的域名
由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。