您的位置 首页 php

知了堂《web安全-上传漏洞》课程讲解文档(下)

文章来源:知了堂冯老师

接上文

知了堂:知了堂《web安全-上传漏洞》课程讲解文档(上)

6 文件类型绕过代码分析

服务端处理上传文件的代码如下,服务端代码判断$_FILES[“file”][“type”]是不是图片的格式(image/gif,image/jpeg,image/pjpeg),如果不是,则不允许上传该文件,而$_FILES[“file”][“type”]是客户端请求数据包中的Congent-Type,所以可以通过修改Content-Type的值绕过该代码限制。

在php中还存在一种相似的文件上传漏洞,PHP函数gettimagesize()可以获取图片的宽、高等信息,如果上传的不是图片文件,那么getimagesize()就获取不到信息,则不允许上传,代码如下:

但是,我们可以将一个图片和一个webshell合并为一个文件,例如使用以下命令

Cat image.png wehshell.php > image.php

此时,使用getimagesize()就可以获取图片信息,且webshell的后缀是php,也能被apache解析为脚本文件,通过这种方式就可以绕过getimagesize()的限制。

7 文件截断绕过攻击

截断类型:PHP%00截断

截断原理:由于00代表结束符,所以会把00后面的所有字符删除。

截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态。

在上传文件时,服务端将GET参数jieduan的内容作为上传后文件名的第一部分,然后将按照时间生成的图片文件名作为上传后文件名的第二部分。

修改参数jieduan为1.php%00.jpg,文件被保存到服务器时,%00会把”.jpg”和按时间生成的图片文件名全部截断,那么文件名就剩下1.php,因此成功上传了webshell脚本。

8 文件截断绕过代码分析

服务端处理上传文件的代码如下,程序使用substr获取文件后缀,然后判断后缀是否是‘flv’,‘swf’,‘mp3’,‘mp4’,‘3gp’,‘zip’,‘rar’,‘gif’,‘jpg’,‘png’,‘bmp’中的一种,如果不是,则不允许上传该文件。但是在保存的路径中有$_REQUEST[‘jieduan’],那么此处可以利用00截断尝试绕过服务端限制

9 文件上传漏洞修复建议

针对文件上传的修复,建议:

• 1.通过白名单的方式判断文件后缀是否合法,对文件格式限制,只允许某些格式上传。

• 2.对上传后的文件进行重命名,例如rand(10,99).date(“YmdHis”).”.jpg”。

• 3.对文件格式进行校验,前端跟服务器都要进行校验(前端校验扩展名,服务器校验扩展名、Content_Type等)。

• 4.将上传目录放置到项目工程目录之外,当做静态资源文件路径,并且对文件的权限进行设定,禁止文件下的执行权限。

10 练习平台部署

Upload-labs

upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。

靶机包含漏洞类型分类

Install

环境要求

若要自己亲自搭建环境,请按照以下配置环境,方可正常运行每个Pass

Windows快速搭建

项目提供了一个Windows下,按照以上配置要求配置好的集成环境

下载地址:

集成环境绿色免安装,解压即可使用。

Linux快速搭建

创建镜像

$ cd upload-labs/docker

$ docker build -t upload-labs .

$ docker pull c0ny1/upload-labs

创建容器

$ docker run -d -p 80:80 upload-labs:latest

如何判断上传漏洞类型

练习:DVWA

————————————————end————————————

文章来源:智云一二三科技

文章标题:知了堂《web安全-上传漏洞》课程讲解文档(下)

文章地址:https://www.zhihuclub.com/150536.shtml

关于作者: 智云科技

热门文章

网站地图