系列目录
第一章 暴力破解
第二章 Cross-Site Scripting-pikachu
第四章 sql-injection
第五章 RCE
第六章 File inclusion
第八章 Unsafe fileupload
概述
不安全的文件上传漏洞概述
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;
--等等...
一、Client Check
页面提示我们只能上传图片

尝试上传其他类型的文件
发现存在一个校验

检查前端代码发现,前端进行的校验
我们有两种办法绕过校验
1.禁用js
直接禁用js

我们上传成功

我们上传了一个php一句话木马,所以我们使用蚁剑连接
php
<?php @eval($_POST['command']); ?>

2. 使用burpsuite
由于是前端的校验,那么我们只需要在前端提交一个图片文件
在发送数据的过程中,将数据包更改
就可以绕过这个前端校验了
抓到数据包以后,先去除掉图片的数据
修改文件名
添加文件内容


连接成功

二、MIME type



三、get image size
PHP中的getimagesize()函数是一个内置函数,用于获取图像的大小。Getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。

制作图片马,上传成功后

由于这是图片文件,php代码并没有执行
我们需要利用之前的文件上传漏洞,来让php代码执行