Vtiger CRM 几处SQL注入漏洞分析,测试工程师可借鉴

13次阅读

共计 1455 个字符,预计需要花费 4 分钟才能阅读完成。

本文由云 + 社区发表
0x00 前言
干白盒审计有小半年了,大部分是业务上的代码,逻辑的复杂度和功能模块结构都比较简单,干久了收获也就一般,有机会接触一个成熟的产品(vtiger CRM)进行白盒审计,从审计的技术难度上来说,都比公司内的那些业务复杂得多,而真正要提高自己技术水平,更应该看的也是这些代码。
vtiger CRM 是一个客户关系管理系统。
0x01 分析整体结构
https://www.vtiger.com/open-source-crm/download-open-source/ 代码下载下来,本地搭建。使用 phpstorm 进行审计。
主目录下的 vtigerversion.php 可以查看当前版本。

整体代码目录

其中主要得功能实现就在 modules 目录当中,也是我们重点审计的地方。libraries 目录是使用到的第三方的一些东西,includes 目录是路由加载,封装系统函数的地方。
整个系统代码量确实很多,真要审计完估计没有十天半个月是不行的,看了一个礼拜,只发现几个问题。
0x02 modules/Calender/actions/feed.php SQL 注入分析

一个成熟的产品,审计的难点就在于各种类,对象的封装和继承,A 调用 B,B 调用 C,C 调用 D ……
Vtiger_BasicAjax_Action 这个对象,是 modules 下 vtiger 目录里的,而 vtiger 这个也是核心的 module.
回到 feed.php, 直接定位有漏洞的代码,103 行后。

我图中标的,也正是注入点的位置。
$fieldName 参数由逗号分割成数组,如果分成后的数组值为 2 则进入逻辑,然后参数进入 SQL 语句形成注入。虽然整个系统采用了 PDO 的查询方式,但是如果有 SQL 语句存在直接拼接的话,还是有注入的风险。
这里 payload 不能使用逗号,可以采用 (select user())a join 的方法绕过。

往下走的话,SQL 注入漏洞更是多不胜数。也没有再看的必要了。

0x03 /modules/Documents/models/ListView.php SQL 注入
直接看漏洞代码

可以看到 sortorder 参数又是直接拼接。此处是 order by 后的注入,只能用基于时间的盲注。
直接上 SQLmap 吧,但是 sqlmap 的 payload 会使用 >,尖括号因为 xss 防御,已经被过滤所以需要使用绕过脚本。–tamper greatest 绕过。
poc:
index.php?module=Documents&parent=&page=1&view=List&viewname=22&orderby=filename&sortorder=and/**/sleep(5)&app=MARKETING&search_params=[]&tag_params=[]&nolistcache=0&list_headers=[%22notes_title%22,%22filename%22,%22modifiedtime%22,%22assigned_user_id%22,%22filelocationtype%22,%22filestatus%22]&tag=

0x04 写在最后
由于时间原因,只看了前几个模块,还有好多地方没有看。
漏洞都很简单,真正花费时间的是走通逻辑,验证漏洞,不停地跳转查看函数调用,和各种类对象的继承。这也是白盒审计的头疼之处,要忍着性子看开发跳来跳去,没准哪个地方就跳错了。有点难受,还没找到 getshell 的地方。
此文已由作者授权腾讯云 + 社区发布

正文完
 0