php=7.2.10
步骤如下:
成功后如图:
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_Infraction继承于vB_Api_Content_Text
而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;):
经过清洗后返回的数据依然不变:
最后返回:
直接拼接不做处理
最后返回结果:
官方已发布最新安全补丁,请及时更新补丁: