几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi

几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi

TikiWiki是一个开源软件,提供基于wiki风格的内容管理系统。它拥有超过125万次下载和大约170万行代码的大型代码库。在这篇博文中,我们逐步演示了如何使用领先的RIPS代码分析解决方案在几分钟内检测并验证SQL注入漏洞
扫描

TikiWiki具有许多内置功能。对安全问题这么庞大的代码库进行人工审计需要大量的时间和专业知识。使用RIPS对TikiWiki的170万行代码进行自动安全性分析大约需要14分钟。扫描完成后,在用户界面中报告了SQL注入类型的漏洞

几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi

通过在RIPS UI中选择SQL注入类别,我们可以看到受影响的代码行的摘要(顶部),问题描述(右侧)和原始代码作为参考(底部)。

几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi

在代码摘要中,我们可以看到攻击者的入口点是一个$_REQUEST参数,并且在tiki-user_tasks.php文件中执行易受攻击的SQL查询tasklib.php

独特的SQL上下文选项卡功能一目了然地显示易受攻击的SQL查询的外观以及用户输入结束的位置(突出显示为红色):

几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi

很明显为什么RIPS将此注入报告为不带引号的 SQL注入:在未使用引号的上下文中,将经过处理的用户输入连接到SELECT查询中。看起来攻击者可以将自己的SQL语法作为show_history参数注入,例如传统的1 or 1=1-- -

此时,我们将问题的审核标签更改为可疑,以通知我们的团队我们正在调查此问题,然后我们继续检查问题在何种情况下可利用。

验证

报告的SQL注入漏洞的入口点位于以下文件中tiki-user_tasks.php

几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi

用户输入$_REQUEST['show_history']用作TaskLib::get_task()文件中定义的方法的第三个参数lib/tasks/tasklib.php

几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi

这里,第三个参数$task_version确实是嵌入到SQL查询中的。请注意此SQL查询是如何在多个并置语句中构造的,并且已在SQL上下文选项卡中显示为完整重构查询。

补丁

RIPS提供了SQL注入的一般描述,攻击者如何滥用它,在哪里可以找到更多信息以及与哪些行业标准相关。通常,RIPS建议使用预准备语句,但在遗留代码中并不总是这样。作为一个解决方案,RIPS然后为这个特定的SQL注入提出了以下补丁,这个补丁很容易实现:

SQL查询中检测到的注入点周围没有使用引号。因此,所有用于转义数据的应用操作都是不够的,因为不必为了注入SQL语法而破坏引号。在预期数值的情况下,应对用户输入执行类型转换操作。

31
$query .= "`t_history`.`task_version` = ".(int)$task_version." and ";

利用

检测到的问题隐藏在TikiWiki 的“ 用户任务”功能中。激活此功能后,任何具有使用权限的经过身份验证的用户都可以利用此漏洞从数据库中提取他无法访问的机密数据。一项小测试显示,当用户创建任务然后预览任务时,会调用易受攻击的代码:

几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi

执行的SQL查询中的注入点位于WHERE子句中。我们没有在页面上显示的运行查询的完整输出,因此,这是一个盲目的SQL注入。此时,攻击者可以通过发送一系列基于时间的注入来迭代并揭开构成它的字符,从而轻松提取代表管理员密码的哈希。这种注射可以例如通过使用以下有效载荷来完成:

/tiki-user_tasks.php?taskId=1&offset=0&sort_mode=priority_desc&tiki_view_mode=view&find=&show_history=0 and if(substring((SELECT hash FROM users_users WHERE userId = 1),1,1)='x', sleep(5), false) --

这导致执行以下SQL查询:

1
select distinct `t_head`.*, `t_history`.* FROM `tiki_user_tasks_history` AS `t_history`, `tiki_user_tasks` AS `t_head`, `users_users`, `users_usergroups` WHERE `t_head`.`taskId` = `t_history`.`belongs_to` AND`t_history`.`task_version` = 0 and if(substring((SELECT hash FROM users_users WHERE userId = 1),1,1)='x', sleep(5), false) -- AND `t_head`.`taskId`= 1 ...

在示例注入中,如果密码哈希的第一个字符是a,则服务器的响应将延迟5秒x。可以借助脚本轻松迭代所有可能的字符和位置以提取整个哈希。

时间线

日期 什么
2017年10月25日 漏洞报告给开发团队。
2017年12月5日 要求进步。
2017年12月7日 供应商要求补丁审查。
2017年12月10日 已审核并确认补丁。
2018年3月8日 供应商发布补丁。

总结

在这篇博客文章中,我们演示了RIPS代码分析在检测复杂和大型代码库中的安全漏洞方面的效率和节省时间。作为示例应用程序,我们查看了TikiWiki版本17.1,其中包含超过170万行代码。TikiWiki的代码库在大约14分钟内被扫描。我们查看了一个典型的SQL注入漏洞,并演示了如何使用有用的功能轻松验证和修补它。

该漏洞被负责地披露给TikiWiki的开发人员,并在17.2版本中进行了修补。还可以使用不同版本分支12.x,15.x和16.x的修补程序。如果您仍在使用旧版本,我们鼓励更新。


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明几分钟内扫描,修复和验证:TikiWiki 17.1 SQLi
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址