Kentico CMS(<9.0.42)SQLI 漏洞分析

Kentico CMS是使用ASP.NET编写的并用于构建网站、电子商务商店和其他Web应用程序的内容管理系统。

在实验室环境下对CMS进行审查期间,我遇到了一个SQL注入漏洞,由于使用复杂的正则表达式来防止SQL注入漏洞,因此觉得非常有趣。

Kentico CMS支持用户通过基于REST的API来查询一个网站的能力。虽然使用不同级别的授权来限制访问,但是针对没有特殊凭证的站点注册的用户可以使用多个API调用。例如,用户期望从电子商务站点购买产品通常被允许注册帐户。

一旦用户注册,可以访问以下URL以从CMS检索包含信息的XML响应:

http://example/com/rest/content/all

查看REST API的文档:https://docs.kentico.com/display/K8/Getting+data+using+REST,我们看到有一些可选参数可以通过过滤查询响应,例如:

http://example.com/rest/content/all?format=json&where=NodeID=1

围绕“where”URL参数,我们发现通过反汇编.NET dll,下面的正则表达式用于验证参数值:

7fdc

如果参数值通过正则表达式检查,则它包含在对后端Microsoft SQL Server数据库所做的SQL查询中。

经过一点试验和错误,我们可以看到,有可能制定一个查询绕过这个正则表达式,允许对后端数据库执行任意查询。

例如,以下exploit将检索Kentico CMS数据库中所有注册用户的副本:

2bb0

kentico_sqli

Kentico CMS用户可以使用修复程序,建议尽快应用此修复程序。

感谢Kentico的快速响应和整个修复过程的沟通。

披露时间表:

  • 9月6日 – 与Kentico的初步联系;
  • 9月8日 – Kentico确认漏洞,漏洞已被复现;
  • 9月15日 – 联系Kentico更新;
  • 10月11日 – 修复版本7.0.105,8.0.23,8.19.19,8.2.50,9.0.42发布。

原创文章,作者:Sam,如若转载,请注明出处:http://www.mottoin.com/article/web/90634.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code