前言
承接flystart师傅的文章,具体跟了一下,也想分享一下个人具体跟入的过程,有什么问题欢迎师傅们指出。
环境搭建
php=7.2.10
步骤如下:
- 将config.php.bkp重命名为config.php(ren config.php.bkp config.php)
- 进入/ upload / core / includes目录。
- 将config.php.new重命名为config.php(ren config.php.new config.php)
- 编辑config.php并更改这些值以匹配您的信息。
- $ config ['Database'] ['dbname'] ='数据库名称';
- $ config ['Database'] ['technicalemail'] ='dbmaster@example.com ';
- $ config ['MasterServer'] ['servername'] ='localhost'; //可以称为主机名
- $ config ['MasterServer'] ['port'] = 3306;
- $ config ['MasterServer'] ['username'] ='用户名';
- $ config ['MasterServer'] ['password'] ='密码';
- 对于vBulletin Connect的基本安装,无需在此文件中更改其他值。
- 将htaccess.txt重命名为.htaccess
- 其他按照系统引导安装就行
- 安装成功后要记得删除/ upload / core /install目录
成功后如图:
漏洞描述
cve披露的信息似乎比较轻描淡写:
5.5.6pl1之前的vBulletin,5.6.0pl1之前的5.6.0和5.6.1pl1之前的5.6.1具有错误的访问控制。
实际是nodeId未授权sql注入漏洞,且危害较大。
影响范围
vBulletin 5.5.6pl1之前版本
vBulletin 5.6.0pl1之前的5.6.0版本
vBulletin 5.6.1pl1之前的5.6.1版本
复现
payload:
nodeId[nodeid]=1 AND text.nodeid = 1 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,user(),19,20,21,22,23,24,25,26--
分析
vBulletin在/core/vb/api/实现ajax API调用
下面是栈调用情况
详细分析
payload:
nodeId[nodeid]=1 UNION SELECT 26,25,24,23,22,21,20,19,20,17,16,15,14,13,12,11,10,"cve-2020-12720",8,7,6,5,4,3,2,1;--
首先要说的是:
而vB_Api_Content_Text继承于vB_Api_Content
因此vB_Api_Content_Infraction拥有vB_Api_Content的方法
vB_Library_Content_Infraction也是同理,下图是类的继承关系:
下面我们来看vB_Api_Content->getIndexableContent(upload/core/vb/api/content.php):
调用了vB_Library_Content->getIndexableContent(upload/core/vb/library/content.php):
向下跳转,调用fillContentTableData
具体方法如下:
调用了getRow(upload/core/vb/db/assertor.php):
因为getRow传入getContentTablesData方法,我们跟进getContentTablesData(upload/core/packages/vbforum/db/mysql/querydefs.php)
调用cleanArray进行数据清洗:(upload/core/vb/cleaner.php)
进一步调用clean():
因为vartype为0,跳转到doclean方法(const CONVERT_SINGLE = 100):
因为type为0,直接跳转到TYPE_NOCLEAN(因为const TYPE_NOCLEAN = 0;):
经过清洗后返回的数据依然不变:
最后返回:
直接拼接不做处理
最后返回结果: