什么是WBCE
WBCE CMS是一个通用的内容管理系统。它附带了一些用于简单文本页、新闻、联系人表单的模块,并包括有用的管理工具。
安装与配置
通过以下链接可以下载源码,通过提前配置数据库,访问/install就可以安装在phpstudy上。
https://github.com/WBCE/WBCE_CMS/releases
安装成功后就可以进入到登录首页
直接使用安装的账号、密码进入就好
CVE-2022-25099漏洞复现
在/admin/languages/index.php路径下面存在一个文件上传的路口,可以进行木马测试。
一开始正常传递一个木马
出现报错,我观察了后端,没有文件传上去,那有可能是在前端就解析了,要验证猜想,直接传递一个phpinfo就可以知道了。
前端直接解析并返回了。
那我们直接尝试命令执行。
虽然报错,但是实际上已经rce成功了。
原理分析
我们发现前端解析的网址为
也就是install.php
定位到源码
在68行经过了一个if判断,就是判断我们传入的文件是否有language_code这个参数。如果没有,就是会进行报错,也就是我们之前无法进行文件上传的原因。那为什么我们无法上传文件还是可以解析呢?
在这里他没有经过然后过滤就直接使用了file_get_contents()去获取文件内容,也就直接导致了命令执行。
至此CVE-2022-25099的内容分析完毕。
代码审计的新发现(webshell上传)
之前我们的文件无法上传是因为对于一个变量$language_code是否存在进行了判断,
也是就这里的68行到75行
那我们给我们的木马加上这个内容进行一下魔改,就可以绕过这个if。
我们看一下界面
除去$language_code还有一个name,我们都加上放原本没有的
上传
直接上传成功。
并且可以查询。看后台会自动改名为$language_code的名称
尝试连接
通过对于代码的审计发现了if绕过的新方法,就可以上传木马。并达到使用webshell管理工具进行控制的效果,这个的便捷程度还是比原本cve的利用方式还是高的。
视野展开(Templates、moudle又两个文件上传的webshell)
看到了原本功能中language的安装
还有templates的安装和modules的安装。黑白结合需要对这种功能有一些敏感的。出洞有时候就是感觉。
点击Templates进去
先随便安装一个php文件。
显示需要zip文件,
那我们代码审计一下
根据url判断源码位置
同时根据上文Invalid WBCE CMS installation file. Please check the *.zip format.
的反馈,在phpstorm中进行全局find
发现是一个全局变量,看看install.php中引用在哪
这里看到需要有一个info.php。然后又需要我们传入zip,名称还是模板,就不难想到是一个主题的功能。然后这个平台有预制的主题。我们寻找下源码
在templates目录下找到了,那就简单,直接copy一份出来。
在里面放入木马直接上传。
安装
显示已经安装。根据提示继续find
他会在文件里面寻找info.php,并且判断template_directory字是否相同,这样就是已经安装。那我们进行一下修改。
顺手把名字也改一下。打包上传。注意,因为解压的原因,需要打两层的包。
muma.php也已经上传成功。
新的shell。
同理我们在moudle功能处进行尝试,直接copy一个新的moulde出来
还是一样的提示。
代码审计,也是对info.php进行查重。
那我们如法炮制。
重新安装成功。
尝试连接,成功!
本次对与WBCE这个cms系统进行了代码审计,对于网上爆出来的cve本身,大部分文章都是没有分析代码,甚至只是到了前端代码执行就结束了。这里我对代码也进行原理分析,并给出了新的传入webshell的绕过方法。同时对于其他功能,漏洞挖掘的时候也需要保持一定的敏感度,类似的功能往往也会存在相同类型的漏洞,很多时候,修改一小部分,剩余如法炮制就好了。