Pikachu对不安全文件上传的解释:
    不安全的文件上传漏洞概述
    文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
    所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
    —验证文件类型、后缀名、大小;
    —验证文件的上传方式;
    —对文件进行一定复杂的重命名;
    —不要暴露文件上传后的路径;
    —等等…

    我的理解:网站写了文件上传功能,比如上传头像,上传附件,但是由于种种原因,被黑客上传了危险的脚本文件(一句话木马),然后中间件还解析执行了,然后就被菜刀或者蚁剑getshell了。

    1. client check

    根据提示,这一关是靠前端来检测所上传文件是否符合要求的,既然是前端,那就完全相当于是毫无防护,因为javascript可以禁用。
    先上传一张正常图片试一试
    image.png
    image.png
    image.png
    上传成功,还返回了图片路径,访问试一下
    image.png
    然后试试上传恶意文件
    image.png
    image.png
    不允许上传,直接禁用javascript代码
    image.png
    image.png
    上传成功,访问看看
    image.png

    1. MIME type:

    据了解,这一关靠的是数据包的mime类型来判断上传文件是否合理,需要抓包,我们先上传正常文件。
    image.png
    image.png
    把它改成:application/octet-stream,后台一看,发现不是image/jpeg,岂不是会返回文件类型不正确
    image.png
    果然,文件符不符合要求,后台只看MIME,那这么说来,我上传shell.php,然后把MIME改成:image/jpeg,那岂不是也可以上传成功了?试试看
    image.png
    修改第②步
    image.png
    放包看结果
    image.png
    访问看看
    image.png
    成功,下一关

    1. getimagesize:

    这一关是严格的检测,你上传的文件必须是图片类型的,前面两个方法都没用了,这里只能上传图片马。图片马也有两个方法,一是本地制作,二是抓包正常图片加一句话木马,都行。
    演示第一种好了,毕竟博客是第二种。
    1)准备一句话木马文件和一张体积小的正常图片
    image.png