发现CVE-2018-11512-wityCMS 0.6.1 持久型XSS

CMS(内容管理系统)很适合被用来做代码审计,尤其是现在CMS系统越来越流行,很多人愿意使用CMS搭建自己的项目。由于大部分CMS是一种开源项目,所以对于CMS的审计属于白盒测试,白盒测试让我们可以发现更多的安全漏洞,而且一旦我们发现了这些漏洞,由于其被广泛使用,所以它的漏洞的影响范围也是呈指数级增长的。这是因为通过白盒测试我们可以查看到程序的内部结构,从而更清楚的理解程序的工作原理。

WityCMS就是一个由creatiwiwiwiwiwity制作的CMS系统,它帮助管理不同用途的内容,如个人博客、商业网站或任何其他定制系统。在本文中,我将介绍如何设置CMS,查找web应用程序问题,以及如何复现CVE-2018-11512漏洞。

环境安装(windows下安装xampp)

  • 1.下载WityCMS0.6.1的源代码
  • 2.把/witycms-0.6.1 目录复制到C:\xampp\htdocs\ 下 或者是你自己安装xampp的的htdocs目录
  • 3.运行Apache和MySQL然后访问http://localhost/phpmyadmin/index.php.
  • 4.点击"databases"(中文版本的"数据库")
  • 5.创建一个名为"creatiwity_cms"的数据库

  • 6.浏览器进入http://localhost/witycms-0.6.1/ 可以查看你的程序
  • 7.填下"Site name(站点名称)"之类的内容,我添加了一个"Test",然后可以点击next进入下一步了
  • 8.然后是定义系统的主页,你可以从选项中选择任何一个。比如:
  • 9.接着设置数据库,第5步那里我建了一个名为"creatiwity_cms"的数据库,所以在这我们要这样设置
  • 10.输入管理员账号,然后点击"Launch install!(开始安装)"
  • 11.安装成功后的页面长这样:

查找漏洞

因为这篇文章主要是关于CVE-2018-11512的,所以我今天就只找这个程序中的持久型XSS的洞,开始之前,我们先了解下什么是持久型XSS。

根据OWASP的介绍,"跨站脚本攻击(xss)是一种注入类型的攻击手段,它允许恶意web用户将代码植入到提供给其它用户使用的页面中"。这意味着只要一个网站上存在注入点,xss就可能被触发。目前有三种类型的XSS,但是本文我将讨论常见的XSS,即反射型XSS和持久型XSS。

当输入的数据被在发出请求后被返回给我们时,反射型XSS就会被触发。对于反射型XSS来说,网站的搜索功能可以作为一个测试反射型XSS的很好的例子。当用户在搜索框中输入一段payload后,该搜索功能可能会受到反射型XSS的影响。

另外,持久型XSS也被称为"存储型XSS"。这种类型的XSS值会被保存在系统中的某个数据库或是文件中。XSS的利用点通常存在于可以让用户随时更改的设置操作中,比如用户的个人信息页,可以设置用户的电子邮件,姓名,地址之类的地方。也可能存在于用户可以自己更改的某些系统设置中。

对于wityCMS,我的目标是找到可以在系统中保存数据的利用点。这基本上可以手工完成,也可以通过工具自动找到这些利用点。由于我已经在Windows中安装了它,所以我必须使用命令“findstr”而不是“grep”(抱歉,喜欢用"grep"的同学们)。可以在这里找到"findstr"的相关信息。

恶意代码的文件,我们可以使用以下命令:">要列出可以输入恶意代码的文件,我们可以使用以下命令:

/S = Recursive searching
/P = Skip files with non-printable characters
/I = Case insensitive
/N = Prints the line number
/c:<STR> = String to look for

代码:

findstr /SPIN /c:"<input" "c:\xampp\htdocs\witycms-0.6.1*.html"

命令行运行后的结果:

这个结果肯定很让人惊喜,因为可能存在XSS的地方太多了。登录到管理员面板后,我们可以轻松的在输入框中输入我们的payload。通过访问http://localhost/witycms-0.6.1/,我们可以看到一个很明显的值,如图所示:

我们安装这个CMS的时候设置了这个站点名称,它现在显示在主页上,不知道这个站点名称会不会存在持久型XSS,现在我们看看能不能在管理设置里修改这个值。

使用安装时设置的管理员账号密码登录到管理面板,登录后,管理面板中会有一个这样的小链接:

点击"Administration"后,网页会被重定向到我们安装时的执行设置操作的页面,第一个设置值也是网站名称。

插入一个非常简单的XSS代码试试:

script>alert(1)</script>

点击"save(保存)"后,返回值为:

可以注意到<script>和</script>标签被过滤了,因此我们可以知道该系统中存在一个防护机制,所以现在我们需要找到这个防护机制的运行原理。

当数据被保存到数据库中时,会处理一个请求。在这种情况下,我们应该能够识别请求方法是POST还是GET,在页面空白处右键单击"审查元素"查看源代码后,可以确认该方法是POST请求。

从这点来看,我们应该尝试找到POST请求发生的地方,这样顺下去我们就可以看到防护机制的运行点。因此,在cmd中输入以下命令:

findstr /SPIN /c:"$_POST" "c:\xampp\htdocs\witycms-0.6.1*.php"

这个命令类似于我们之前查找包含“input”标记的文件,但是这次,我们尝试在.php文件中查找引用"$_POST"的地方。

因为其他文件都与默认包含的库有关,这些都pass掉。所以命令的结果指向文WMain.hp,WRequest.php和WSession.php。浏览这些文件将我们发现在WRequest中有一个有趣的函数。如下所示,当防护机制发现脚本标示符时,这些标示符将被一个空字符串替换:

由于过滤器函数没有递归,所以过滤器只能拦截这样的输入:

所以输入这种内容是可以绕过过滤器的:

在我们设置站点名称的输入框中输入以下内容,我们将会得到以下结果:

一旦这个payload被设置为站点名称,访问网站的用户将会触发这个脚本,即使TA并没有经过身份验证。

这就开启了新世界的大门,因为当用户访问网站时会执行某些恶意脚本可能会造成比较严重的后果。比如可以将用户重定向到钓鱼站点,在用户不知情的情况下执行矿机脚本,或者其他很多操作。

处理CVE编号

由于这个bug容易引起安全问题,并且这个CMS正在被数以千计的人使用,所以我决定给这个程序申请一个CVE编号,以此来获得一个公开的CVE条目。

信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。cnas(cve-numbering-authorities)根据程序类型分别处理这些cve编号的漏洞。例如,如果联想设备中发现了安全问题,应该向联想的产品安全应急响应团队报告,在评估了漏洞后,他们将会给这个漏洞一个cve编号。">CVE 的英文全称是"Common Vulnerabilities & Exposures",CVE就好像是一个字典表,为广泛认同的计算机信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。CNAs(CVE Numbering Authorities)根据程序类型分别处理这些CVE编号的漏洞。例如,如果联想设备中发现了安全问题,应该向联想的产品安全应急响应团队报告,在评估了漏洞后,他们将会给这个漏洞一个CVE编号。

这说明,如果同样是在CNA公司的产品或项目中发现了漏洞,他们评估后可以直接给出一个CVE编号,在CNAs的CVE的漏洞列表中可以通过编号直接找到这个漏洞。而对于wityCMS, CreatiWity这两个产品,其创建者没有注册到CNA,所以我们可以向MITRE公司申请这个持久型XSS漏洞的CVE编号,下面是处理CVE漏洞事件的步骤:

  • 1.确认产品是否由CNA管理。如果由CNA管理,则报告该特定CNA的漏洞。如果不是,则报告给MITRE公司。
  • 2.通过google确认发现的漏洞是否已经分配了一个CVE编号。经常检查产品更新,以确认漏洞是否已经公开。
  • 3.对于wityCMS的情况,我使用了MITRE公司的CVE申请表单,可以在这里找到。
  • 4.在表格中填写所需的详细信息。关于wityCMS的这个漏洞,我是这样填的:
  • Vulnerability Type: Cross-Site Scripting
  • (漏洞类型:xss)
  • Product: wityCMS
  • (厂商:wityCMS)
  • Version: 0.6.1
  • (版本:0.6.1)
  • Vendor confirmed the vulnerability? No (Not acknowledged yet at the time - of request)
  • 厂商是否已确认该漏洞 没有 (漏洞提交时厂商未确认)
  • Attack Type: Remote
  • 攻击类型:远程
  • Impact: Code execution
  • (影响:代码执行)
  • Affected Components: Source code files showing “site_title” as output
  • 受影响的组件:输出"site_title"的源文件
  • Attack Vector: To exploit the vulnerability, one must craft and enter a script in the Site name field of the system
  • 攻击方式:必须在系统的站点名称字段中手工注入脚本
  • Suggested Description: Stored cross-site scripting (XSS) vulnerability in the "Website‘s name" field found in the "Settings" page under the "General" menu in Creatiwity wityCMS 0.6.1 allows remote attackers to inject arbitrary web script or HTML via a crafted website name by doing an authenticated POST HTTP request to admin/settings/general.
  • 漏洞详情:在creatiwitycms 0.6.1的“设置”菜单下的“网站名称”字段中存在存储型XSS漏洞,允许远程攻击者通过一个经过验证的POST HTTP请求向admin/ Settings / General注入任意的web脚本或HTML。
  • Discoverer: Nathu Nandwani
  • (发现者:Nathu Nandwani)
  • Reference(s): https://github.com/Creatiwity/wityCMS/issues/150https://github.com/Creatiwity/wityCMS/co...229147de44
  • 参考

填写信息应该详细一点。为了让CVE处理的更快一些,描述中最好引用一些可以辅助理解漏洞的资料,并且详细地描述漏洞细节,如果可以,还应该写上漏洞可能有的修复方案。例如,在发送报告之前,我在这个项目的GitHub主页上发现了这个漏洞可能存在的点,因为有很多已经公开的关于存储型XSS的CVE漏洞,我找了其中的一个作为参考,然后通过这个漏洞想到了构造一个存储型XSS方法,并且注意到在这个GitHub项目中可能通过这个方法复现这个漏洞。

最后一点小贴士

    1. 如果细节已经公开,那么CVE号处理只需要一两天,所以最好先与开发人员或与项目相关的响应团队进行沟通,以便进行适当的修复。
    2. CVE漏洞的细节应该是准确的。更改发送给CNAs的报告的细节将减慢审核的速度,这意味着必须首先确认漏洞,不要浪费双方的时间。
    3. 更多关于CVE漏洞提交的细节可以在这里找到。
    4. VulDB提供漏洞公开服务。注册一个VulDB账号,你可以在那里提交一个条目。例如,这里是这个安全问题的VulDB条目。
    5. 也可以提交到exploit-db.com。这不仅显示出问题确实存在,而且还为CVE编号增加了可信的参考,因为安全团队尽其所能地测试验证漏洞是否存在。这里是一个exploit-db.com条目,请注意它目前正在等待验证。提交说明可以在这里找到

      我在这个wityCMS的一些版本中发现了其他持久型的XSS漏洞,但是我没有为它应用CVE编号。你能找到它们吗?期待听到您的意见或问题。(゜-゜)つロ 干杯~

      作者: nats</br>
      翻译:i春秋翻译小组-prison</br>
      翻译来源:https://greysec.net/showthread.php?tid=3202

大家有问题可以留言,也欢迎大家到春秋论坛玩耍哟~

原文地址:https://www.cnblogs.com/ichunqiu/p/9449456.html

时间: 2024-10-23 03:17:25

发现CVE-2018-11512-wityCMS 0.6.1 持久型XSS的相关文章

2018年第0次作业

1.翻阅邹欣老师的关于师生关系博客,并回答下列问题,每个问题的答案不少于500字: 1)最理想的师生关系是健身教练和学员的关系,在这种师生关系中你期望获得来自老师的哪些帮助? 邹欣老师列举了许多种师生之间的关系,提到了最理想的师生关系是健身教练和学员的关系,这点我非常认同,如同在健身房中教练会提供给我们好的器械和练习方法一样,在大学的学习中,老师会给我们最好的学习方式,这种学习方式需要我们自己来一直去体会,我们不会因为了解了学习方式就瞬间学到了知识,如果想得到知识,需要去不断请教老师,老师不会逼

2018最新SpringBoot2.0教程(零基础入门)

一.零基础快速入门SpringBoot2.0 1.SpringBoot2.x课程全套介绍和高手系列知识点 简介:介绍SpringBoot2.x课程大纲章节 java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 3.快速创建SpringBoot2.x应用之手工创建web应用 简介:使用Maven手工创建SpringBoot2.x应用 4.快速创建SpringBoot2.x应用之工具类自动创建we

EDEM 2018 + Fluent 19.0耦合

具体步骤参考流沙的文章即可,如果python版本较高,可能有个地方需要小小的改动一下: tools文件夹下的compile_lib_edem_coupling.py文件中,导入模块有个地方需要修改 其他的,就按照流沙的教程走就行. 原文地址:https://www.cnblogs.com/Jay-CFD/p/9606578.html

析测结Trimble TILOS v9.0 1CD

析测结Trimble TILOS v9.0 1CD Trimble Tilos可以使你的下一个项目的规划更简单快捷:· 整合时间和位置,让规划设计更加直观准确判断项目的工作位置.工作流程和生产力.· 通过优化方案,避免项目冲突.节省时间和成本.· 将CAD.测量数据和大众运输等空间数据与项目管理功能整合.· 生成专业.精确的成果.· 与其他项目规划软件数据交换.brLindo.WhatsBestn.vb v15.0.1.0 1CDMaterialise qmmmMagics 22.0.0.227

Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境

经过 3 个 RC 版本的社区体验之后,Nacos 正式发布 1.0.0 GA 版本,在架构.功能和 API 设计上进行了全方位的重构和升级. 1.0.0 版本的发布标志着 Nacos 已经可以大规模的在生产环境中使用,新版本不仅针对社区的需求和集群的稳定性相应地增加了一些新特性,而且还发布了服务发现模块的性能测试报告,以及完整的 API 列表和架构设计文档. Nacos演进历程 Nacos 自 2018 年 7 月份开源以来,有赖于社区的大力关注和参与,在不到一年的时间里,已经演进了 10+

Android Bluetooth 4.0深入学习

Android平台包含了对蓝牙网络协议栈的支持,它允许一个蓝牙设备跟其他的蓝牙设备进行无线的数据交换.应用程序可以通过Android蓝牙的API所提供访问蓝牙的功能.这些API会把应用程序无线连接到其他的蓝牙设备上,接下来让我们慢慢来走进 Android Bluetooth 4.0 , 希望对大家有一定 的帮助. 蓝牙API,Android应用程序能够执行以下功能: 1. 扫描其他蓝牙设备 2. 查询本地已经配对的蓝牙适配器 3. 建立RFCOMM通道 4. 通过服务发现来连接其他设备 5. 在

c++11特性与cocos2d-x 3.0之std::bind与std::function

昨天同事让帮忙写一小功能,才发现cocos2d-x 3.0 和 cocos2d-x 3.0rc0 差别还是相当大的. 发现Label这一个控件,3.0就比rc0版本多了一个创建函数,更为关键的是3.0内的Label锚点是在ccp(0.5,0.5),而一直3.0rc0是ccp(0,0). 累觉不爱.尽管cocos2d-x改变太快,兼容性一次次的暴露出不足,但是,总归是向好的方向进行.于是下载了3.0来玩玩~ cocos new 出新的项目之后,仔细阅读代码,才发现了一句3.0区别于2.0的代码:

Cocosd-x-3.0 创建(路径问题)

刚接触Cocos2dx不久,还停留在初学2.2的状态下,好似突然之间,3.0横空出世,技术的更新,是自身这种缓慢脚步无法追及的.默默哀悼了下,于是,重新折腾了一番,开始3.0之程. 首先是创建新工程 比起2.2 创建的方式,3.0不一样了,命令行变得更简洁了,也不用cd到project_creator目录下,直接cocos new 就可以了 下面是命令: cocos new hello -p com.cocos2d.org -l cpp -d d:games\cocos2d-x-3.0\proj

eclipse中Cannot change version of project facet Dynamic Web Module to 3.0的问题解决

在做web配置的时候,希望将web Module(Web模块)更换为3.0,发生如下错误: cannot change version of project facet Dynamic Web Module to 3.0. 解决方案是: 1 找到当前项目所在的文件夹 2 找到setting文件夹下的org.eclipse.wst.common.project.facet.core.xml 打开后将标红的地方改为3.0 然后在项目上右键->刷新 然后在菜单上选择project->clean 再次