• 文件上传漏洞


    • 用户上传一个可执行的脚本文件,获得了执行服务器端命令的能力
    • getshell最为常见、直接的方式
    • “文件上传”本事是一个正常的业务需求,问题在于如何安全的上传

    一、触发条件

    1. 用户能够从Web网页访问到被上传的文件(直接或间接)
    2. 上传的文件被Web容器解释执行
    3. 用户上传的文件通常不能被网站程序压缩、修改内容 

    二、直接上传一句话

    一句话木马是最基础的文件上传攻击

    • 很多上传点依赖于对访问上传页面的访问权限控制
    • 一旦上传页面暴露,直接就可以getshell

    三、常见的文件上传防御

    1.客户端JavaScript校验(前端校验)

    • 在浏览加载文件,但还未点击上传按钮时便弹出对话框
    • 内容如:只允许上传.jpg/.jpeg/.png后缀名的文件
    • 而此时并没有发送数据包

    ·抓包改包轻松绕过

    2.检查MIME类型

    浏览器在检查判断上传的文件类型后,在向服务器发送请求的包中添加MIME YTPE

    服务器在接受文件时,看到的是想要的MIME类型,就会接受文件,否则不会

    ·同样抓包改包

    3.随机文件名,随机文件地址

    根据业务需求的限制

    4.检查文件扩展名

    • 最直接有效的方法
    • web服务器根据文件扩展名来选择不同的方式解析
    • 可能使用白名单和黑名单

     后端使用到黑名单过滤: 

    1. $name = $_FILES['myfile']['name'];
    2. $ext_name = substr($name,-4);
    3. if($ext_name == ".php")
    4. die("NONONO");

     上面的代码先是获取上传文件的名字,判断名字的后四位是否是.php,如果是则不允许上传

    ·绕过: 因为黑名单往往很难列举全情况 

            php3、php5、phtml、PHP、pHp、phtm 这些都是php的等价代换,使用替换后缀绕过黑名单

    后端使用到白名单过滤:

    绕过办法:

    1.文件包含漏洞:

    2.截断绕过:test.php%00.jpg

    3.apache解析漏洞: 

    •         apache解析文件的规则是从右到左开始判断解析
    •         如果后缀名为不可识别文件解析,就再往左判断
    •         例如,test.php.owf.rar,如果白名单只允许上传rar文件,那么这个就可以利用apache解析漏洞上传php文件

    4.nginx解析漏洞:

    •         当cgi.fix_pathinfo开启时
    •         当访问www.xx.com/phpinfo.jpg/1.php时,且1.php不存在时,会将phpinfo.jpg当作.php进行解析

    四、例题

     1.只在前端使用js对上传文件类型进行控制

    上传图片格式的木马

     

    抓包将文件格式改回.php

     

    .php文件成功上传到服务器

    使用蚁剑 实现webshell

    2.使用MIME type上传文件过滤

     同样是抓包,之后更改文件后缀和Content-type为image/jpeg

    3.使用黑名单,不允许上传.asp,.aspx,.php,.jsp后缀文件!

     在抓包后改成.php5的后缀就能实现后面的绕过

  • 相关阅读:
    翻译docker官方文档(残缺版)
    提升工作效率的一些网站、应用、插件和小技巧(二)
    2023年 ZK Hack以及ZK Summit 亮点记
    Nanoprobes丨Nanogold®-抗体和链霉亲和素偶联物
    javafx简单介绍
    随机用户名获取易语言代码
    成考报名时间
    Linux常用的命令
    JAVA培训之数据库表关联关系
    小程序页面跳转
  • 原文地址:https://blog.csdn.net/weixin_68177269/article/details/132756044