首页 > 编程知识 正文

文件上传漏洞,常见的上传漏洞及利用方法

时间:2023-05-05 01:36:07 阅读:21677 作者:1100

个人资料

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利用等问题将得到解决。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。