欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > PbootCMS V3.2.9前台SQL注入漏洞(上)

PbootCMS V3.2.9前台SQL注入漏洞(上)

2024/12/27 4:58:17 来源:https://blog.csdn.net/C20220511/article/details/144693521  浏览:    关键词:PbootCMS V3.2.9前台SQL注入漏洞(上)

0x01 前言

PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统,是一套高效、简洁、 强悍的可免费商用的PHP CMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。

PbootCMS在国内有非常大的客户使用量,属于国内最流行的企业官网建站程序。截止本文发出前,其github最新版本为V3.2.9。通过互联网资产测绘平台搜索指纹header="PbootCMS",搜索结果有超过34W+互联网案例。

图片

在最新版的PbootCMS V3.2.9中存在前台未授权SQL注入漏洞,攻击者可以通过此漏洞读取系统数据库中的敏感信息,包括后台用户的用户名和密码。

0x02 漏洞分析

之前因为某任务进行批量任务扫描时发现很多目标都在报DVB-2021-2510漏洞,其POC大致如下,返回数据匹配到your SQL syntax或syntax error。

POST /index.php?p=search
1=select

此漏洞是很早以前已经曝出的安全漏洞,对应CVE编号为CVE-2021-28245,但是最大的问题是我在最新版本的V3.2.9上测试仍然存在此漏洞。也就是官网一直都没有修这个漏洞,如下图所示。

图片

由于ddpoc上面的这个脚本主要做poc探测和验证,并不带直接的漏洞利用,需要跟踪源码分析漏洞逻辑。跟踪到漏洞对应的文件apps/home/controller/SearchController.php。

图片

PbootCMS有一套复杂的模版替换的逻辑,其中模板替换分成多个步骤,在SearchController类中会通过parserSearchLable方法对模板内容进行解析,跟踪parserSearchLable方法。parserSearchLable方法逻辑很复杂,我直接定位到最关键的部分如下。

图片

其中$receive来自于外部输入,遍历$receive变量,会生成新的数组$where3。$where3是后期漏洞利用的关键,但是这里先关注$value = request($key, 'vars'),看一下这里对数据的过滤逻辑。跟进request方法。

图片

跟进filter方法,如下图所示,当传入的d_type(也就是request方法的第二个参数)为vars时,只能包含中文、字母、数字、横线、点、逗号、空格!。而这也为后面的SQL注入的利用埋下了伏笔。

图片

回到刚才提到的$where3变量,$where3变量会传入getList方法。

图片

继续跟进getList方法,传入的$where3传入到变量$select。

图片

跟进变量$select,如下图所示,可以看到其中的$select传入了where方法,这个方法是用于组合SQL语句的查询条件。

图片

继续跟进where方法,如下图所示。当$key也就是传入的数据是一个整数时,会直接拼接$value的值,导致SQL注入漏洞。这里为什么不用$key来注入呢?因为$key前面的图里面有限制,只能输入\w\-\.,不允许空格和特殊字符导致无法直接利用此注入点。

图片

0x03 漏洞利用

漏洞的整个流程已经梳理清楚了,下一步就是漏洞如何利用的问题了。这里由于request($key, 'vars')限制导致不能使用特殊字符。不能使用括号、单引号、注释和逗号会极大的限制整个漏洞的利用方式。

为方便大家直观看到SQL语句效果,我临时把SQL语句打印出来,如下图所示,大致是直接在括号中拼接SQL语句。

图片

只能使用\w和空格的注入,极大的限制了注入点的利用,但是仍然可以通过BOOL盲注的方式来达到注入的效果。

1)  使用下面的payload访问目标,显示有搜索结果

1=select 1 from ay_user where username like 0x6125 limit 1

图片

2)使用下面的payload访问目标,显示无搜索结果

1=select 1 from ay_user where username like 0x6225 limit 1

图片

由此可以证明目标站点ay_user(管理员用户表)第一个用户的username的第一个字母是a(第一个用户默认一般是admin)。

这里很巧妙的使用mysql的like语句支持16进制编码的特性来避免使用其它特殊字符,但是整个利用过程还是有下面的注意点:

1)仅支持PbootCMS安装选择mysql数据库的网站,PbootCMS默认情况下使用的是sqlite数据库,如果是sqlite数据库,暂时不知道如何在不引入特殊字符的情况下进行注入。

2)因为不能使用逗号,所以不能通过limit 1,1这样的方式来注第二个用户,但是可以通过增加条件的方式来进行注入,例如下面的payload

1=select 1 from ay_user where username like 0x25 and username not like 0x61646d696e25 limit 1

0x04 结论

DVB-2021-2510(CVE-2021-28245)是一个很好的漏洞,互联网案例足够多,影响大。这是一个经典的有条件的SQL注入漏洞,值得小伙伴们学习研究。

在下一篇文章中,作者会带来PbootCMS更多有意思的漏洞和利用方式。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com