通过前面的爆破和这次上传就发现,后端校验比前端校验更安全,更可靠,一切在前端做的安全措施都是不靠谱的,仅起到辅助作用,但是前端校验可以增加用户体验。也就是一句话“前端校验防君子,后端校验防小人”😀
点击去另外爆破篇
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
- getimagesize():它是php提供的,判断目标文件是否为图片
- 通过该文件的前面几个字符串,来判断文件类型。
- getmagesize()返回结果中有文件大小和文件类型。
- 思路:getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否为图片的话,会存在问题
- 因此可以通过伪造十六进制的头部字符串来绕过getimagesize()函数,从而达到上传的效果。
- 十六进制的头部的前面的几个字符串基本上是一样的,操作如下图,将png图片ikun1.png copy 一下,生成ikun.png 进行伪造,在图片16进制末尾插入想要的代码。
- 上传显示成功
- 包含了恶意代码的图片即使绕过了Getimagesize,但图片里的php代码,并未执行因此要结合本地包含文件漏洞使用。有时间在做吧。