前台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
那先来看看这个函数的作用。
可以看到这个get-one函数里面 还调用了一个array2sql函数来处理$where
那先来看看这个函数的作用
可以看到这个函数是用来过滤的
如果是数组 这进入if 把括号 单引号这些过滤掉
不是则走else 过滤 %20 %27
然后返回参数
但是二次编码的就不一样了 因为web服务器只解码一次
如果是二次编码这里的else过滤就起效果
return 调用的get_one 则是最开始看见的mysql.class文件里面了
下面就可以开始直接构造payload了 这里通过代码分析可以看到是单引号闭合。
后台sql注入
从前面两个分析 我发现的注入的地方就存在两个函数中get_list get_one
然后直接全局搜索这两个函数 看看什么地方调用
可以看到 在copyfrom.php中listing函数下调用了这个函数,主要传进去的就一个$where 和 $page
我们看看where 在if内部 想要进入if 就需要通过GLOBALS获取到keywords
相当于就要传参,这里也可以看出 闭合方式是百分号单引号 %'
我们在来到mysql文件中定义的这个函数 也可以看到 是对where没有过滤处理的
那么 有了前面的基础 直接来构造payload:
http://192.168.1.7/wuzhicms/index.php?m=core&f=copyfrom&v=listing&_su=wuzhicms&keywords=%27
rce漏洞
源代码分析:/wuzhicms/coreframe/app/attachment/admin/index.php
当用户传递动态函数sumit时,web程序会引用set_cache()方法,其中M为当前模块名attachment,继续跟进:
$cache_path为web服务器的缓存路径目录,$filename为缓存文件名,然后通过file_put_contents方法,毫无过滤地将$data写入到缓存文件中,那么如果该缓存文件被包含,则可以造成RCE的问题。
当对象创建时会调用魔术方法__construct(),然后会引入get_cache()方法,继续分析:get_cache()方法会包含并返回缓存文件,那么就可以造成RCE的问题。
敏感信息泄露
看一看代码,没有做任何处理和限制。
逻辑漏洞
和zzcms2021利用方法是一样的。
具体可以参考https://xz.aliyun.com/t/10432
www\api\uc.php中:
通过传参可以调用uc_note类的任意方法:
REF:
https://www.sohu.com/a/529635812_99907709