从PbootCMS审计到某狗绕过

作者: 黑客网 分类: 正规黑客联系方式 发布时间: 2022-05-27 15:14

之前审计发现的PbootCMS2.0.3前台RCE,看了最近的版本更新漏洞被修复了,就放出之前的POC顺便看看能不能绕过补丁。

项目地址: https://github.com/hnaoyun/PbootCMS

PbootCMS自己实现了一个模板标签功能,在解析{pboot:if}标签的函数中使用了eval导致的任意代码执行。

1.PbootCMS2.0.3前台RCE

该cms在前台有留言功能,可以通过控制留言内容实现代码执行,但是需要在后台设置将留言内容显示。

1)留言板插入标签代码

在2.0.3版本中留言板留言具体代码在\app\home\controller\IndexController.php的addMsg函数,

从PbootCMS审计到某狗绕过

其中第270行有处过滤,使用双写即可绕过过滤,如pbootpboot:if:if, 去留言板测试一下

从PbootCMS审计到某狗绕过

去后台可以看到插入成功

从PbootCMS审计到某狗绕过

2)解析if标签函数绕过

下面进入正戏 解析if标签的函数为\app\home\controller\ParserController.php的parserIfLabel函数 通过正则提取出所有if标签,

从PbootCMS审计到某狗绕过

如刚才提交的内容,此时为变量matches之后会将pboot:if标签()中的payload赋值给matches,如之前提交的内容,此时matches=1,接着再进行过滤, 提取出左括号前的字符串,判断字符串是否是函数或者字符串为eval,并且字符串不在白名单中(date,in_array,explode,implode),

从PbootCMS审计到某狗绕过

这里正则有点瑕疵,一顿测试之后发现函数名与括号之间插入空格可以绕过该正则,并且不影响执行,如图,

从PbootCMS审计到某狗绕过

具体的原理后来看到一篇文章,  https://www.leavesongs.com/PENETRATION/dynamic-features-and-webshell-tricks-in-php.html, 在函数名和括号间可以插入控制字符[\x00-\x20],PHP引擎会忽略这些控制字符, 接下来还有最后一处过滤就到了eval,胜利在望,此处正则匹配了一些常用的字符串,

从PbootCMS审计到某狗绕过

个人测试时喜欢执行phpinfo,这个过滤了phpinfo, 那就编码一下吧,还过滤了base64_decode,用chr拼接一下,注意chr和括号间也要插入空格, 最终payload,插入之后需要后台管理员显示该留言,触发phpinfo{pbootpboot:if:if((eval ( chr (0x70).chr (0x68).chr (0x70).chr (0x69).chr (0x6e).chr (0x66).chr (0x6f).chr (0x28).chr (0x29).chr (0x3b))))}!!!{/pbootpboot:if:if}

从PbootCMS审计到某狗绕过

2.PbootCMS2.0.7前台RCE

2.0.3之后过了一段时间再次看下这个cms,发现更新到了2.0.8,在2.0.8中暂时只能后台RCE,在2.0.7中还是可以留言板RCE的,只是加了一点点难度。 用之前的payload调试一下,发现在core\basic\Model.php的1255行,加了一处过滤,对最终的插入数据库的sql语句进行了一次过滤,

从PbootCMS审计到某狗绕过

又过滤了一次pboot:if,那就在payload中再多加一层就好了,现在的payload变成这样,{pbootpbootpboot:if:if:if((eval ( chr (0x70).chr (0x68).chr (0x70).chr (0x69).chr (0x6e).chr (0x66).chr (0x6f).chr (0x28).chr (0x29).chr (0x3b))))}!!!{/pbootpbootpboot:if:if:if}之后又在\apps\home\controller\ParserController.php的parserIfLabel中加了些黑名单,没有加assert,可见黑名单的防御方式还是不太靠谱的,

从PbootCMS审计到某狗绕过

因此,将eval变成assert即可执行代码,payload变成这样,{pbootpbootpboot:if:if:if((assert ( chr (0x70).chr (0x68).chr (0x70).chr (0x69).chr (0x6e).chr (0x66).chr (0x6f).chr (0x28).chr (0x29).chr (0x3b))))}!!!{/pbootpbootpboot:if:if:if}测试一下,依旧可以执行成功。

从PbootCMS审计到某狗绕过

3.PbootCMS2.0.8后台RCE

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

标签云