自学内容网 自学内容网

web网站的任意文件上传下载漏洞解析

免责申明

        本文仅是用于学习检测自己搭建的任意文件上传下载漏洞相关原理,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其所在国家地区相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 如您继续阅读该文章即表明您默认遵守该内容。

一、任意文件上传漏洞

1.1、任意文件上传漏洞介绍

        大部分的Web网站都拥有文件上传文件的接口(允许上传图片、视频、头像、文档等其他类型的文件到服务器上);但是如果Web网站的开发人员并没有对上传的文件相关参数、内容信息进行严格的过滤防护,未对安全进行考虑;那么攻击者就可以通过一些方法将恶意文件上传到服务器上,然后通过上传的恶意文件来访问甚至控制整个服务器。

        一般来说攻击者上传的恶意文件被称为网页后门(即WebShell)是一种木马程序,该后门的功能非常强大(可以进行查看服务器目录、服务器文件、执行系统命令、拉取或删除服务器文件等操作)。

1.2、任意文件上传漏洞测试流程

        Web网站中只要是有文件上传的位置都可以用来测试是否存在漏洞。

 1.3、任意文件上传漏洞绕过方式

任意文件上传漏洞测试方式
检测文件类型位置 说明
前端js校验绕过

1、针对前端对上传文件类型的校验,检查html元素直接将校验的js事件删除掉再测试上传文件(可通过火狐浏览器删除、谷歌和Edge浏览器好像不支持)

2、将我们需要上传的webshell文件复制一份,然后将复制的文件后缀类型修改为Web网站支持的后缀类型(如.jpg或.png),此时我们再上传修改了后缀的webshell文件,在点击上传按钮前开启抓包,抓取到包后将文件的后缀名称修改为webshell真实的后缀名称,放行即可上传文件

后端校验绕过

1、检查上传文件后缀

检查文件后缀也就是对文件类型的检验,我们可以采用黑名单、白名单的方式绕过:

《1》黑名单:指Web开发人员在编写文件上传功能对文件后缀进行校验功能编写的时候,直接将类似(.php、.asp、.aspx、.jsp)后缀内容直接加入黑名单,不然这类格式的文件上传到服务器上【这种黑名单过滤方式有缺陷,很容易绕过((如:后缀大小写混合、修改后缀名为php3、php5方法即可绕过))】。

2、检查上传文件内容

《1》MIME类型检查(MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型;主要用于设定某种扩展名的文件用一种应用程序来打开的方式类型。

【每个MIME类型由两部分组成:前面是数据的大类别、后面是具体的种类】)

常见 MIME 类型列表 - HTTP | MDN (mozilla.org)icon-default.png?t=O83Ahttps://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

# 常见的MIME类型如下:
application/octet-stream    //任意类型的二进制数据
application/json            //json字符串数据
text/xml                    //xml文档(.xml)
text/html                   //超文本标记标记语言内容(.html\.htm)
text/plain                  //普通文本(.txt)
application/pdf             //pdf文档(.pdf)
application/msword          //word文档(.word)
image/jpeg                  //jpeg图片(.jpg\.jpeg)
image/png                   //png图片(.png)
image/gif                   //gif图片(.gif)
video/mpeg                  //MPEG文件(.mpeg\.mpg)
video/x-msvideo             //AVI文件(.avi)
application/x-gzip          //GZIP文件(.gz)

绕过MIME类型检查的方法就是使用抓包工具去上传文件的包,然后将【Content-Type】内容修改为支持的MIME类型即可。

《2》代码使用getimagesize() 函数检查文件内容(getimagesize() 是php的一个函数,用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE 并产生一条 E_WARNING 级的错误信息)

# 绕过getimagesize()函数的三种方法:
1、直接伪造头部GIF89A;
2、CMD方法,copy /b test.png+1.php webshell.png(将需注入的文件与正常的文件合并为一个文件);
3、直接使用工具增加备注写入一句话木马(在正常文件后面添加木马内容);

1.4、以upload-labs为例进行说明上传文件漏洞绕过方式

GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场icon-default.png?t=O83Ahttps://github.com/c0ny1/upload-labs可以使用phpStudy搭配upload-labs搭建环境进行绕过测试学习任意文件上传漏洞(安装好pypStudy2016后直接将upload-labs内容放到phpStudy2016的网站根目录(www)下即可)如下图所示:


原文地址:https://blog.csdn.net/xiaochenXIHUA/article/details/142305919

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!