不安全的文件上传漏洞-服务端验证
MIME介绍
不同的文件类型,文件名是不一样的
$_FILES()函数
这个函数在你向服务器传输文件的时候可以向服务器传输一些信息
案例讲解
我们来到pikachu界面
我们可以先上传一张图片试试
没有问题,我们再上传一个.php的文件
被拒绝了
我们来看一下后台是怎样的
这边后台指定了只能上传jpg,jpeg,png这三个类型,并且调用函数来检查
我们来看一下这个函数是怎么写的
这里做了一个MIME type的验证,如果符合就会过去,不符合就会return一个对应的信息
这个地方的关键点就在于他通过$_FILES
来获取了文件的类型,之后在把这个类型和他定义好的$_mime
去进行了比较,这个问题出就出在FILES上,这个全局方法是从浏览器的http头里面获取了Content type,这是前段用户可以去控制的 。
我们来做一下对应的测试
还是先上传一个正常的图片,再传一句话木马
然后我们去抓包
这是我们上传图片提交成功的请求
它的content type 是imge jpeg 说明上传成功
下面这个就是我们上传失败的一句话木马
我们把这个数据包发送到repeat里面去
之后我们把它的content type换成是imge jpeg就行了
改掉之后去提交
我这个burp有乱码,这个是成功提交的提示
这样我们通过头的修改,绕过了这个限制,这个一句话木马上传成功以后,下面的步骤就一样了