VBulletin 核心插件 forumrunner SQL注入(CVE-2016-6195)漏洞分析

分析所用版本4.2.1

漏洞的本质是forumrunner/includes/moderation.php文件中, do_get_spam_data()函数()对参数postids和threadid过滤不严导致SQL注入漏洞, 核心代码如下:

VBulletin程序中并不直接使用$_GET等全局变量获取输入数据,而是使用clean_gpc() 和 clean_array_gpc() 函数来过滤输入数据,而这两个函数并未对STRING类型做严格过滤,而传入的参数postids是作为SRING类型解析,参数postids随后拼接在SQL语句中进行查询,导致SQL注入漏洞。
寻找调用或包含do_get_spam_data()函数的代码,发现forumrunner/support/common_methods.php

继续回溯,发现forumrunner/request.php文件包含support/common_methods.php.

上面代码中process_input()函数(forumrunner/support/utils.php), 会从$_REQUEST中取值,进行简单的类型转换,STRING类型则原样返回,根据上面代码,可以通过$_REQUEST[‘cmd’]参数调用get_spam_data()函数, 进而调用do_get_spam_data()函数。设置$_REQUEST[‘d’]参数将打开错误报告,有助于SQL注入,当然也可以不设置$_REQUEST[‘d’]参数,这对触发SQL注入漏洞没有影响。剩下的就是使用postids参数构造SQL payload
postids参数注入

设置断点及变量取值,注入结果如下:
1
从图中可以看出SQL注入语句执行成功,$post[‘title’]变量已经获取了用户名和密码,其中forumid设置为1, 保证下面代码不会进入if条件判断语句中。

补丁分析
includes/general_vb.php文件, fr_clean_ids函数对id类变量进行了整数转换,从而阻止SQL注入攻击。

Author: janes(知道创宇404安全实验室),原文地址:http://paper.seebug.org/116/

原文链接:,转发请注明来源!

发表评论

要发表评论,您必须先登录