记一次对wuzhicms的审计(一)

简介: 记一次对wuzhicms的审计

前言

在网上漫游发现的一个cms cnvd也是有提交的

也是初次审计这种

官网:https://www.wuzhicms.com/

现在也已经好像没更新了

也是先看了一会代码 才知道这是MVC的 之前由于也没有了解过MVC 就很懵

开始啥都没看懂

后来经过百度 和 求助了一波团队的时候 总算是有一点点明白了 能把代码走动

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。(百度的)

而在之后的路径中会看见m f v这几个参数

m就是文件夹 f就是文件 v就是方法

就先大概介绍这些

下面开始审计

sql注入肯定是容易找的 就先找sql注入了

工具:seay phpstorm phpstudy

第一处 sql注入(可惜是后台的)

先直接全局搜索select

7b6ab03bfab64e5d534d2b5d0b6bb5f4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


这个函数 展示没有发现有过滤

然后找哪里调用了这个函数

061fa2d33a2e9d1a9a5b724491ab024f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

通过全局搜索 在这个地方 发现调用了这个函数

然后查看传递的参数

主要传递的是55行这个$where参数 传到了函数

然后我们看$where参数的组成 里面有两个变量$siteid $keywords

我们是可能可控的

先看$keywords 因为这个没调用函数 但是调用了一个$GLOBALS来获取值

这里就又要介绍下$GLOBALS 因为刚开始我也没懂这个是怎么用来获取值的 知道我百度一阵之后

和代码翻翻之后 在一个文件中发现了

1f32d00afee0fdd112e0bd5e97d8b2dd_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


这个cms用$GLOBALS来获取全部的变量 直接把GET POST代替了

具体怎么代替的就不跟进解释了 一句话 就是$GLOBALS可以取到get post的传的值

那么这个keywords 前面又没有定义变量啥的 大概率是 传参的 (后面经过验证 也的确如此)

那另一个参数就不用看了 就先控制这个参数才进行注入了

有了可控参数 现在就需要找到整个payload了

可能熟悉MVC的师傅 就知道该怎么构造payload了 但我没学过MVC 也不了解 就只能用其他方式来找了

515e048ed8fc36f154261e05a0426351_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png



在这个文件看见了广告管理的注释

那我就去后台找这个功能了


e4d896b2f23bcd3eca667543f2438adb_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png



又因为调用的函数是search嘛 那就是这个搜索框 八九不离十了

直接输入1 然后搜索 但是这样看不出来

就输入1然后抓包 看看包了

24057c856c0118f6083a59cda63dc2e7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

好了 这样路径参数什么的也出来了

就全部复制到url

然后构造

payload :SELECT COUNT(*) AS num FROM wz_promote_place WHERE siteid=’1’ AND name LIKE ‘%1%’ or extractvalue(1,concat(0x7e,(select database())))%23

闭合%‘%23

这里我尝试了下 盲注 和报错都是可以的

ff2432d3d26cb03e247285d15c596d17_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


如果现在到过头来看 就一个简单的搜索框的注入没什么花里胡哨的 过滤也没 但审计来看 还是绕了一大圈子


第二处 前台sql注入

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

1d3321b2f5d8969f13a488755711fa55_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


然后我们搜索哪里调用了这个函数

首先是在api目录下的sms_check文件中发现调用了get_one函数 并且参数是通过前面的$code拼接


afb2f33f448fba82b409dd37aba2b5a6_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

我们可以看到code 先是通过$GLOBALS来获取参数param的值 从前面的介绍可以知道 $GLOBALS是可以获取post get的值 这个文件前面没有定义param变量 那么 这个param应该就是post 或者get 就是我们可控的 这也是导致注入的点

c0f79b52769fc3bce859911f48087cb2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

code还通过strip_tags() 函数 而这个函数的作用是剥去html标签 应该是过滤xss吧大概

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

e95542d442b3585fb06c0a58f178755d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

这个函数应该是调用的这个文件里面的

来到这个文件

22dc9d7c99f6bf9d86955c04a36bd679_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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

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

5d4abd2308c35875f6d07d029f9ba855_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

可以看到这个函数是用来过滤的

如果是数组 这进入if 把括号 单引号这些过滤掉

不是则走else 过滤 %20 %27

然后返回参数

但也就是这个过滤的地方 没有防护到位

我们传的参数不是数组 所以就没有走if

而else里面过滤的却是 %20 %27

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

但是二次编码的就不一样了 因为web服务器只解码一次

如果是二次编码这里的else过滤就起效果

return 调用的get_one 则是最开始看见的mysql.class文件里面了

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

a360ce381fb7210fab3466c15f6d3f00_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

单引号报错

闭合显示正常页面

1e1cef9c3a24981b21f8265bc3b96548_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

就进行盲注

我用的报错

payload:[http://192.168.1.7/wuzhicms/api/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)

a8d826ce9f7ecea2709dcc7cecff8646_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


相关文章
|
SQL 存储 安全
第4章 数据库安全性——4.4 审计
第4章 数据库安全性——4.4 审计
|
4月前
|
存储 安全 数据挖掘
|
存储 监控 安全
网络安全之认识日志采集分析审计系统
日志对于大家来说非常熟悉,机房中的各种系统、防火墙、交换机、路由器等等,都在不断地产生日志。无数实践告诉我们,健全的日志记录和分析系统是系统正常运营与优化以及安全事故响应的基础。我们一起来认识日志采集分析审计系统。
309 0
|
存储 监控 Shell
日志审计服务
本场景介绍如何使用日志审计服务。
|
存储 SQL 安全
Oasys 系统审计
Oasys 系统审计
|
SQL 缓存 前端开发
记一次对wuzhicms的审计(二)
记一次对wuzhicms的审计
111 0
记一次对wuzhicms的审计(二)
|
安全 NoSQL Java
JPA 的审计功能
简单介绍下JPA框架实现的审计功能
|
弹性计算 监控 负载均衡
云上日志集中审计
简介:在SLS的日志审计应用的基础上,集中汇聚云安全产品日志、Web服务日志等,进行集中审计。
258 0
云上日志集中审计
|
弹性计算 监控 安全
云上资源操作审计和配置审计
本方案是面向云上资源的操作审计和配置审计,提供的最佳实践。适用于企业型客户。通过最佳实践帮助客户在本场景下更好的使用阿里云,涉及到配置审计、操作审计、函数计算、SLS、OSS等服务的实践操作。
云上资源操作审计和配置审计