接上文
知了堂:知了堂《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下,按照以上配置哀求配置好的集成环境
下载地址:https://github.com/c0ny1/upload-labs/releases
集成环境绿色免安装,解压即可利用。
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————————————