• wuzhicms代码审计


    零基础学黑客,搜索公众号:白帽子左一
    
    • 1

    作者:掌控安全—柚子

    环境搭建

    源码下载官网:https://www.wuzhicms.com/

    放到本地phpstudy根目录下,访问install路径进行安装。

    图片

    图片

    图片

    访问后台:

    图片

    访问前台:

    图片

    敏感信息泄露

    直接后台挂个链接:

    图片

    图片

    代码分析

    图片

    图片

    前台sql注入

    漏洞分析
    搜索select的时候 发现在mysql.class文件下有一个函数里面有select 并且后面的拼接也没有任何的过滤

    图片

    搜索哪里调用了这个函数,先是在api目录下的sms_check文件中发现调用了get_one函数 并且参数是通过前面的$code拼接。

    图片

    我们可以看到code 先是通过$GLOBALS来获取参数param的值 从前面的介绍可以知道 $GLOBALS是可以获取post get的值 这个文件前面没有定义param变量 那么 这个param应该就是post 或者get 就是我们可控的 这也是导致注入的点
    code还通过strip_tags 函数 而这个函数的作用是剥去html标签,过滤xss。

    之后就直接传入了函数 继续更进函数 因为这个文件前面还引入了db类。

    图片

    图片

    可以看到这个get-one函数里面 还调用了一个array2sql函数来处理$where

    那先来看看这个函数的作用。

    图片

    可以看到这个函数是用来过滤的。如果是数组 这进入if 把括号 单引号这些过滤掉。

    不是则走else 过滤 %20 %27。然后返回参数,但也就是这个过滤的地方 没有防护到位。我们传的参数不是数组 所以就没有走if,而else里面过滤的却是 %20 %27。

    我们传参的时候尽管是经过url编码的 但是web服务器会自动解码一次 所以 我们传到后端代码处的时候是没有进行url编码。

    但是二次编码的就不一样了 因为web服务器只解码一次,如果是二次编码这里的else过滤就起效果,return 调用的get_one 则是最开始看见的mysql.class文件里面了。

    下面就可以开始直接构造payload了 这里通过代码分析可以看到是单引号闭合。

    图片

    漏洞复现
    payload:

    sms_check.php?param=1%27+or%20extractvalue(1,concat(0x7e,(select%20database)))%23](http://192.168.1.7/wuzhicms/api/sms_check.php?param=1'+or extractvalue(1,concat(0x7e,(select database)))%23)
    
    • 1

    图片

    后台sql注入一

    漏洞分析
    在www\api\sms_check.php中:

    图片

    传参param给$code,然后直接拼接到sql语句中,导致sqli:

    漏洞复现
    图片

    后台sql注入二

    在eframe\app\promote\admin\index.php中:

    图片

    获取$keywords直接拼接到sql语句中,导致sqli:

    图片

    后台任意文件读取、删除

    coreframe\app\attachment\admin\index.php中存在dir方法:

    图片

    分析逻辑发现,将…/,./,.\,…\替换成空再添加/结尾,这里可以通过多写绕过:

    图片

    同时发现读取到的文件是可以删除的,每个后面都有删除的链接。
    找到del方法:

    图片

    通过url获取路径后,检测了ATTACHMENT_URL参数,替换为空,

    define(‘ATTACHMENT_URL’,‘http://www.wuzhicmstest.com/uploadfile/’);//附件路径

    然后没有其他过滤,传入my_unlink:

    图片

    达到删除的目的。

    逻辑漏洞

    在\api\uc.php中:
    图片

    通过传参可以调用uc_note类的任意方法:

    图片

    可以更改用户名和密码等。

    后台RCE

    漏洞分析
    在coreframe\app\core\libs\function\common.func.php中set_cache方法:

    图片

    写入内容没有过滤,再搜索哪里调用了set_cache:

    member模型中存在调用。

    图片

    发现直接获取setting写入缓存。

    利用,写入phpinfo:

    图片

    在这里插入图片描述

    漏洞复现

    后台访问

    图片

    拓展

    全局搜索发现,同样的利用还有很多:

    图片

    图片

    图片
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    基于深度学习的红肉新鲜过期判决系统matlab仿真
    [Vue 代码模板] Vue3 中使用 Tailwind CSS + NutUI 实现侧边工具栏切换主题
    K8S 1.20 弃用 Docker 评估之 Docker CLI 的替代产品 nerdctl
    Mathorcup数学建模竞赛第四届-【妈妈杯】B题:基于协同过滤的书籍推荐模型
    【智能家居】7、主程序编写+实现语音、网络和串口功能
    【机器学习】实验4布置:AAAI会议论文聚类分析
    爬虫(2) - Requests(1) | Requests模块的深度解析
    分布式锁三种方案
    Java实现连接SQL Server解决方案及代码
    FATFS介绍及相关参数计算
  • 原文地址:https://blog.csdn.net/hackzkaq/article/details/125595758