码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ShowDoc后台文件上传漏洞分析 CNVD-2020-49480(CVE-2021-41745)


    目录

    1.环境搭建

    2.漏洞分析

    3.漏洞修复

    4.Seay源码审计添加规则


    1.环境搭建

            github获取ShowDoc源码,版本:ShowDoc v2.8.2,使用phpstudy本地搭建环境。环境搭建参考官网:ShowDoc

    2.漏洞分析

            由于showdoc使用了ThinkPHP框架,需要对ThinkPHP路由熟悉。漏洞路由:?s=/api/page/uploadImg。可以在源码中Ctrl+Shift+F全局搜索/api/page/uploadImg,或者全局搜索uploadImg方法(一般路由最后几个字母就是对应的方法)。

            该方法在Home和Api目录均出现了。需要做后续的判断。判断方法:后台找到漏洞上传功能点,分别在这两个方法处下断点,看它走到哪个方法中。

     说明对应的是Api\Controller\PageController.class.php。之后F7、F8继续跟进。

            进入uploadImg方法可以看到checkLogin()方法首先做了登录判断。所以该漏洞利用的前置条件是需要进行登录。

    接下来上传png后缀的写入phpinfo()php文件,将$_FILES的文件name属性修改为:phpinfo.<>php,继续跟入。

    上图中217行代码使用allowExts()方法设置白名单仅允许上传以下文件类型

    $upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型

    可以看到经过strip_tags()方法处理之后,输入的phpinfo.<>php,成功变成.php。但是前面的allowExts()方法已经设置了白名单,那.php应该是无法上传成功的,那为什么上传成功了呢?继续走:

    strip_tags()方法:

    strip_tags()—函数剥去字符串中的 HTML、XML 以及 PHP 的标签。

    在这里我们可以看到,参与检测的是file变量的exts属性,而在上面设置的白名单属性是allowExts。猜测应该是开发者手误写错白名单变量属性,导致白名单失效。从而有了CNVD-2020-49480文件上传漏洞。使用这个方法上传的还有/api/page/upload接口。

    3.漏洞修复

    正确修复建议:

    将Api\Controller\PageController.class.php中的allowExts方法改为extss方法使白名单生效即可。

    $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型

    开发者修复:

    以上代码先将文件名转换为小写,然后再去除html相关标签,再检测文件中是否包含.php的后缀。

    4.Seay源码审计添加规则

    \b(strip_tags)

    测试:

    更多文章请前往:https://blog.csdn.net/qq_41490561

    更多精彩内容请关注我们

    往期推荐

    UEditor上传导致 XSS漏洞复现

    弹 弹 弹,弹回了shell又怎么样,又弹不进你的心 

    内网渗透pass系列攻击(超详细篇)

  • 相关阅读:
    第三十七章 构建数据库应用程序 - 在页面上使用对象
    探索 SK 示例 -- GitHub 存储库中的机器人
    OpenAI 变天:Sam Altman 被踢出局,原 CTO 暂代临时 CEO
    ElasticSearch环境配置-尚硅谷大数据培训
    2020年Github上最牛的Java进阶教程及Java实战项目都在这里了!
    2.策略模式
    【LeetCode】【剑指offer】【打印从1到最大的n位数】
    LabVIEW大量数据的内存管理
    Ubuntu查看端口开放情况
    MIKE水动力笔记20_由dfs2网格文件提取dfs1断面序列文件
  • 原文地址:https://blog.csdn.net/qq_41490561/article/details/126202427
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号