代码审计

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

字号+ 作者:知道创宇404安全实验 来源:转载 2016-12-24 14:19 我要评论( )

分析所用版本4.2.1 漏洞的本质是forumrunner/includes/moderation.php文件中, do_get_spam_data()函数()对参数postids和threadid过滤不严导致SQL注入漏洞, 核心......

分析所用版本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/


本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/hack/Code/479.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
暂时未开启评论功能~