通过前面的爆破和这次上传就发现,后端校验比前端校验更安全,更可靠,一切在前端做的安全措施都是不靠谱的,仅起到辅助作用,但是前端校验可以增加用户体验。也就是一句话“前端校验防君子,后端校验防小人”😀
点击去另外爆破篇

client check

首先上传,弹出只能上传图片,查看一下源码


查看源码,上传位置有HTML onchange该元素 “在元素值改变时触发”

script :onchange发生时运行的脚本


将“checkFileExt(this.value)“属性删除,再次上传php就成功了

MIME type

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
点击可前往具体介绍MIME

尝试上传 kk.php ,毫无意外传不上去
在HTTP中,MIME类型被定义在 Content-Type header 中。
例如,假设你要传送一个Microsoft Excel文件到客户端。那么这时的MIME类型就是“excel”。在大多数实际情况中,这个文件然后将传送给Excel来处理(假设我们设定Excel为处理特殊MIME类型的应用程序)。在ASP中,设定MIME类型的方法是通过 Response 对象的 ContentType 属性。



使用 burp 修改 content-type 为图片类型,然后发送,通过HTTP头的修改,绕过了 MIME type 验证,上传成功,并使用kkk.php一句话控制。

Getimagesize

1
2
3
** getimagesize() **:它是php提供的,判断目标文件是否为图片
通过该文件的前面几个字符串,来判断文件类型。
** getmagesize() **返回结果中有文件大小和文件类型。

思路: getimagesize() 返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否为图片的话,会存在问题
因此可以通过伪造十六进制的头部字符串来绕过 getimagesize() 函数,从而达到上传的效果。
十六进制的头部的前面的几个字符串基本上是一样的,操作如下图,将png图片ikun1.png copy 一下,生成 ikun.png 进行伪造,在图片16进制末尾插入想要的代码。


上传显示成功

包含了恶意代码的图片即使绕过了 Getimagesize ,但图片里的 php 代码,并未执行因此要结合本地包含文件漏洞使用。有时间在做吧。