PhpCmsV9后台GetShell

###0x01 背景
最近在做测试的时候遇到一个阉割版的phpcms,权限也很低。尝试网上的常规getshell手法无果,忽然想起16年和大佬一起挖过PhpCms_v9后台的getshell,但是过去这么久细节也记不清了。只记得大概方向。遂上官网下载了最新版本的源码审计一番。

版本信息:

###0x02 代码执行
后台Getshell最方便的还是代码执行,先上Seay大佬的代码审计工具搜索一下。寻找存在代码执行的位置在/phpcms/libs/functions/global.func.php第289-302行发现string2array()这个函数存在eval()。于是我们寻找一下那些位置调用了这个函数。

在/phpcms/modules/admin/site.php第169存在调用,但是$data变量的内容是从数据库来得,我们得找个地方将数据插入到数据表里去.

###0x03 Getshell
在后台模块-数据源中可以自定义我们的SQL,从而导致我们可以将恶意构造的数据插入到数据表去,然后进行利用getshell。具体步骤为 模块->数据源->添加数据源->自定义SQL ,然后插入我们的SQL,最后访问执行,这里提供可触发上述漏洞的SQL语句:

UPDATE v9_site SET setting=’array();phpinfo();’ WHERE siteid=’1’

如图所示:

访问调用代码下方的URL地址

访问调用代码之后再回到系统设置,点击站点管理,点击修改即可Getshell

###0x03 后言
通过全局搜索可以发现系统多处都调用了string2array()这个函数,所以在后台通过string2array这个函数来拿shell还是很简单的。