关于pbootcmsV1.3.2代码执行漏洞的分析 - 账号审核 - 90Sec
2019-09-06 01:44:03 Author: forum.90sec.com(查看原文) 阅读量:225 收藏

看了不少表哥的pbootcms的代码审计文章,决定从这里开始代码审计的学习与实践

漏洞文件:\apps\home\controller\ParserController.php 中的parserIfLabel函数:

image

image

代码执行问题出于2333行 的eval

当$content为可控前台参数时

这里可以通过使用手册提供的if标签来执行代码

{pboot:if(php code)}!!!{/pboot:if}

我们继续寻找可控参数点

image

get为我们获取外部数据,然后替换内容,造成解析内容我们可控

而作者也对此做了防护

在V1.3.1中

image
 $pattern = '/{pboot:if(([^}]+))}([\s\S]*?){\/pboot:if}/';  

这里正则将IF标签后面的内容取出进行过滤并执行

image

这里会用正则取出“(”前面的字符串取出并调用function_exists()函数 当字符串为已经定义的函数就返回 TRUE,意思是一切可执行的函数都会被过滤,但是大写EVAL实际是可以绕过并执行的……

image

所以在v1.3.2中作者将其修复,对eval判断不区分大小写

image
image

所以在1.3.2中其他表哥给出了其他过滤方法

image
image
image

但是这两种方法在我试图写入文件时失败,多次利用已知知识尝试混淆转义写入失败,回头寻找别的方法。

在执行代码之前,程序进行了一次解码:

image

\core\function\handle.php中发现decode_string还经过了stripcslashes()函数处理,stripcslashes函数会去除字符串中的反斜杠,所以其实我们只需要加入一个反斜杠就能通过function_exists函数检测并且可以执行所有代码……

image

image

而在最新版本V1.40中,作者不仅去除了最后一步decode_string函数,还禁止了从外部获取数据。

image

至此本菜鸟的pbootcms的代码执行审计学习到这里了,希望能和大佬多多学习。


文章来源: https://forum.90sec.com/t/topic/375
如有侵权请联系:admin#unsafe.sh