通过前面的爆破就发现,后端校验比前端校验更安全,更可靠,一切在前端做的安全措施都是不靠谱的,仅起到辅助作用,但是前端校验可以增加用户体验,前端校验防君子,后端校验防小人
client check
首先只能上传图片,
查看源码,上传位置有HTML onchange该元素 “在元素值改变时触发”
将“checkFileExt(this.value)“属性删除,再次上传php就成功了
MIME type
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。 https://baike.baidu.com/item/MIME/2900607?fr=aladdin#1
尝试上传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
php getimagesize 函数 – 获取图像信息 | 菜鸟教程 可参考
getimagesize():它是php提供的,判断目标文件是否为图片
通过该文件的前面几个字符串,来判断文件类型。
getmagesize()返回结果中有文件大小和文件类型。
思路:getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否为图片的话,会存在问题
因此可以通过伪造十六进制的头部字符串来绕过getimagesize()函数,从而达到上传的效果。
十六进制的头部的前面的几个字符串基本上是一样的,操作如下图,将png图片ikun1.png copy 一下,生成ikun.png 进行伪造,在图片16进制末尾插入想要的代码。
上传显示成功
包含了恶意代码的图片即使绕过了Getimagesize,但图片里的php代码,并未执行
因此要结合本地包含文件漏洞使用。有时间在做吧。