【粉丝福利】PHP代码审计之wuzhicms(三)

简介: 【粉丝福利】PHP代码审计之wuzhicms

前台sql注入

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

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

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

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

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

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

5763143e371772ca156ff752984271b1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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

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

080636fd5ee5ebd4bd9669f8142988f1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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

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

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

080636fd5ee5ebd4bd9669f8142988f1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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

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

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

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

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

不是则走else 过滤 %20 %27

然后返回参数

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

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

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

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

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

后台sql注入

从前面两个分析 我发现的注入的地方就存在两个函数中get_list get_one

然后直接全局搜索这两个函数 看看什么地方调用

091fe24848fe8bf090c853cc12eccafc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

可以看到 在copyfrom.php中listing函数下调用了这个函数,主要传进去的就一个$where 和 $page

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

我们看看where 在if内部 想要进入if 就需要通过GLOBALS获取到keywords

相当于就要传参,这里也可以看出 闭合方式是百分号单引号 %'

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

我们在来到mysql文件中定义的这个函数 也可以看到 是对where没有过滤处理的

那么 有了前面的基础 直接来构造payload:

http://192.168.1.7/wuzhicms/index.php?m=core&f=copyfrom&v=listing&_su=wuzhicms&keywords=%27

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

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

rce漏洞

源代码分析:/wuzhicms/coreframe/app/attachment/admin/index.php

92cc1e9cd39b4e7e4fedef27e2bb4a1d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

当用户传递动态函数sumit时,web程序会引用set_cache()方法,其中M为当前模块名attachment,继续跟进:

17e68a2c5553b1e49020ea6abad6d145_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

$cache_path为web服务器的缓存路径目录,$filename为缓存文件名,然后通过file_put_contents方法,毫无过滤地将$data写入到缓存文件中,那么如果该缓存文件被包含,则可以造成RCE的问题。

3da6fbfc241469af5f912fdb12686aeb_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

当对象创建时会调用魔术方法__construct(),然后会引入get_cache()方法,继续分析:get_cache()方法会包含并返回缓存文件,那么就可以造成RCE的问题。

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

74c4ebcddd53e9c64f045ec55c4ccb6b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

敏感信息泄露

53c72b65c001a72ea00f67c31b122e13_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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

看一看代码,没有做任何处理和限制。

9b503c91e9dc258a5dac8f58b0589db7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

逻辑漏洞

和zzcms2021利用方法是一样的。

具体可以参考https://xz.aliyun.com/t/10432

www\api\uc.php中:

63ae60690ccfd196460896245205a6a0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

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

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

REF:

https://www.sohu.com/a/529635812_99907709

https://blog.csdn.net/hackzkaq/article/details/125595758

https://www.jianshu.com/p/12d28873d4ee

相关文章
|
5月前
|
安全 小程序 PHP
PHP代码审计(七)Rips源代码审计系统使用教程
上一篇中提到的Seay源代码审计系统是由C#编写的winform程序,现在已经停止更新了,但是,还是比较好用的。 PHP代码审计还有另一个工具,也是一个神器Rips
179 0
|
5月前
|
安全 小程序 PHP
PHP代码审计(五)PHP代码审计方法与步骤
(1):获取到网站源码(这就是废话……) (2):将网站部署到你自己的环境中,能运行。 这里特殊说明一下我的习惯,我本地的环境与线上的环境基本上保持一致,这样在本地审计及线上部署的时候能发现更多的问题。不建议说是随便搭个环境能跑起来就行,这样不是很严谨。 (3):拿到源码之后,浏览大概的项目结构。
69 0
|
5月前
|
Shell PHP Windows
PHP代码审计(四)PHP文件操作函数(2)
改变文件所有者。如果成功则返回 TRUE,如果失败则返回 FALSE。 语法:chown(file,owner)
41 0
|
5月前
|
安全 小程序 PHP
PHP代码审计(六)Seay源代码审计系统使用教程
www.cnseay.com/ 当然,这个已经不能访问了。 软件的版本比较早,需要.NET framework3.5框架,我这里是软件启动的时候自动提醒安装,如果没有自动提醒,那么你需要手动安装.NET frameWork3.5框架,否则,程序应该是没有办法运行。
411 0
|
2天前
|
PHP
【攻防世界】easyphp(PHP代码审计)
【攻防世界】easyphp(PHP代码审计)
|
5月前
|
NoSQL 关系型数据库 MySQL
使用redis实现关注粉丝功能(php版) 2020-07-12染念 染
redis不用说啥了,比mysql有的是可以吹的地方,于是很多人选择用redis来实现这类操作频繁的场景 @(汗) 但是下午第一次安装redis花了好多时间... 这里借用[button href="https://www.jianshu.com/p/e3f0b98a78bc"]Redis实现用户关注功能[/button]的思路
28 0
|
5月前
|
XML 开发框架 .NET
代码审计之PHP基础铺垫
代码审计之PHP基础铺垫
61 0
|
5月前
|
小程序 Shell PHP
PHP代码审计(四)PHP文件操作函数(3)
改变文件所有者。如果成功则返回 TRUE,如果失败则返回 FALSE。 语法:chown(file,owner)
23 0
|
8月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
82 0
|
8月前
|
关系型数据库 MySQL 数据库连接
PHP 原生连接 Mysql
PHP 原生连接 Mysql
111 0