CVE-2020-12720 分析

前言

承接flystart师傅的文章,具体跟了一下,也想分享一下个人具体跟入的过程,有什么问题欢迎师傅们指出。

环境搭建

php=7.2.10

步骤如下:

  1. 将config.php.bkp重命名为config.php(ren config.php.bkp config.php)
  2. 进入/ upload / core / includes目录。
  3. 将config.php.new重命名为config.php(ren config.php.new config.php)
  4. 编辑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的基本安装,无需在此文件中更改其他值。
  1. 将htaccess.txt重命名为.htaccess
  2. 其他按照系统引导安装就行
  3. 安装成功后要记得删除/ 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;--

首先要说的是:

image-20200525101036652

而vB_Api_Content_Text继承于vB_Api_Content
image-20200525101316216

因此vB_Api_Content_Infraction拥有vB_Api_Content的方法

vB_Library_Content_Infraction也是同理,下图是类的继承关系:
image-20200526161849076

image-20200526161929838

下面我们来看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;):

经过清洗后返回的数据依然不变:

最后返回:

直接拼接不做处理

最后返回结果:

参考

https://www.exploit-db.com/exploits/48472

https://www.tenable.com/blog/cve-2020-12720-vbulletin-urges-users-to-patch-undisclosed-security-vulnerability

1 个赞

图片直接贴进来吧 复制就行了 不然全挂了

现在怎么样师傅

1 个赞

可以了