码农知识堂 - 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系列攻击(超详细篇)

  • 相关阅读:
    sql注入information_schema代替,无列名注入之[SWPU2019]Web11
    怎么压缩word文档的大小?
    三招帮你缓解胆囊结石疼
    IO模型介绍(select、poll、epoll)
    隆云通楼宇二氧化碳传感器
    在Ubuntu使用Git向Github发布自己的项目
    云原生之kubectl命令详解(二)及pod的相关操作
    java和vue学生定位打卡小程序人脸识别打卡系统源码网站学生考勤系统
    任职超18年,Go团队技术主管Russ Cox官宣卸任!
    嵌入式学习——网络编程(TCP)——day31
  • 原文地址:https://blog.csdn.net/qq_41490561/article/details/126202427
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号