危害:可能直接getshell

产生原因:一般是过滤不严谨

防御:

  1. 在服务端采用白名单校验检查扩展名与MIME。
  2. 检查文件内容来判断文件类型。
    ​ 3. 对传过来的图片重新命名,并不显示上传到哪个路径。
  3. 用GD库对图片重新渲染
  4. 限制上传文件大小,以避免服务器资源耗尽(最低成本DDOS)。
  5. 在中间件限制上传目录执行脚本权限。

练习:
1.前端js验证
在浏览器关掉JS

CheckFile.png

closeJS.JPG

这种方法比较好用,还有个地方可以让它不执行JS脚本,它是提交表单是调用这个方法我们可以双击把这双引号内内容删掉,就不会触发检测了。

elements.png

也可以在本地写一个HTML表单进行提交。

2.文件MIME验证

他的验证方式是mime方式,只有匹配上了才放你通过。

MimeSourceCode.png

我们将原来的mimeContent-Type: application/octet-stream改为图片的mime就可以绕过了。

MIME

3.文件后缀验证

它这里黑名单验证,会把名字转换为小写并重新用时间+随机值命名,文件后缀无法加空格绕过。

ExtendFormat.JPG

尝试过:pht、phpt、phtml、php3、php4、php5、php6,都不解析。可能跟我的php版本有关,此时用的是5.6.27。大小写会被转换。

其他方法:

  • 验证文件内容或后缀可以上传图片一句话,制作图片马—>将shell追加到图片中去(Linux)
  • %00截断version<5.3.7
  • 中间件解析漏洞
  • 编辑器漏洞

标签: none

添加新评论