1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP Collab中CVE-2017-6089和CVE-2017-6090漏洞的复现与简单分析

作者:用户 来源:互联网 时间:2017-11-30 18:21:52

漏洞php简单分析2017cve复现Collab60896090

PHP Collab中CVE-2017-6089和CVE-2017-6090漏洞的复现与简单分析 - 摘要: 本文讲的是PHP Collab中CVE-2017-6089和CVE-2017-6090漏洞的复现与简单分析, Phpcollab是一款开源的Web系统,可被多个组织用来通过互联网合作完成一个项目。有安全工作者发现其中存在SQL注入以及文件上传漏洞,下面作简要分析。 一、SQL注入漏洞(CVE-2017-6089) CVE官网信息如下:

Phpcollab是一款开源的Web系统,可被多个组织用来通过互联网合作完成一个项目。有安全工作者发现其中存在SQL注入以及文件上传漏洞,下面作简要分析。


一、SQL注入漏洞(CVE-2017-6089)

CVE官网信息如下:



漏洞被描述为:在phpcollab 2.5.1以及更早版本中存在SQL注入漏洞,允许远程攻击者执行任意的SQL指令。漏洞存在于3处,topics/deletetopics.php中project参数和id参数,bookmarks/deletebookmarks.php中的id参数,以及calendar/deletecalendar.php中的id参数。


在本地虚拟机中搭建此系统,逐一查看这些SQL注入点。


1.1 topics/deletetopics.php中的SQL注入漏洞点

首先创建一个“项目”并且在其中添加一则“讨论”,来到删除“讨论”的位置,我虚拟机中对应的URL如下:


http://192.168.32.132/phpcollab/topics/deletetopics.php?project=1&PHPSESSID=2k0heng9qlb3ll5cg7cdcbd0i6&id=1


首先针对参数project执行注入指令:


192.168.32.132/phpcollab/topics/deletetopics.php?project=1′+and+(SELECT+SLEEP(5)+FROM+members+where+login+like+0x61646d696e)+and+’2′=’2&PHPSESSID=2k0heng9qlb3ll5cg7cdcbd0i6&id=1


执行成功后网页截图如下:



针对参数id的注入语句如下:


http://192.168.32.132/phpcollab/topics/deletetopics.php?project=1&PHPSESSID=2k0heng9qlb3ll5cg7cdcbd0i6&id=1+and+ (SELECT+SLEEP(5)+FROM+members+where+login+like+0x61646d696e)


网站执行的结果和上图相同,都使得数据库sleep了5秒钟。


查看源代码phpcollab/topics/deletetopics.php的9~18行对应了id参数的漏洞点



这段代码在确定了用户发起的delete操作之后,首先对id参数中出现的星号替换为逗号,随后通过字符串组合形成查询语句,最后通过connectSql来执行两个SQL语句,从这个过程中可发现,并没有对变量id做任何安全操作。


查看源代码phpcollab/topics/deletetopics.php的27~34行对应了project参数的漏洞点



针对这段代码我们可见,从URL处拿到project的变量后直接在变量tmpquery中应用,同样也未作任何安全措施。


1.2 bookmarks/deletebookmarks.php中的SQL注入漏洞点

第二处SQL注入点位于删除bookmark的位置,首先要创建一个书签,随后来到操作删除标签的位置。



我的环境下对应的URL位置为:


http://192.168.32.132/phpcollab/bookmarks/deletebookmarks.php?id=1&PHPSESSID=2k0heng9qlb3ll5cg7cdcbd0i6


针对id参数,执行额外的SQL语句:


http://192.168.32.132/phpcollab/bookmarks/deletebookmarks.php?id=select+sleep (5)+from+members+where+login+like+0x61646d696e&PHPSESSID=2k0heng9qlb3ll5cg7cdcbd0i6


SQL语句正常执行,页面没有报错。看一下文件所对应的代码,


问题集中在phpcollab/bookmark/deletebookmarks.php文件的第32~38行



此处与上面的漏洞点原理相同,先用str_replace函数替换参数中出现的星号为逗号,随后通过字符串拼接,构建SQL语句,最终利用connectSql函数来执行。


1.3 calendar/deletecalendar.php中的SQL注入漏洞点

第三处SQL注入的点位于日历操作的位置,首先创建一个日历信息,随后来到删除操作的位置,我搭建的环境对应的URL为


http://192.168.32.132/phpcollab/calendar/deletecalendar.php?id=1&PHPSESSID=2k0heng9qlb3ll5cg7cdcbd0i6



执行的SQL注入语句为:


http://192.168.32.132/phpcollab/calendar/deletecalendar.php?id=select+sleep (5)+from+members+where+login+like+0x61646d696e&PHPSESSID=2k0heng9qlb3ll5cg7cdcbd0i6


此处漏洞对应的源码为phpcollab/calendar/deletecalendar.php中第31~37行



漏洞的成因与上面相同,因此不再赘述。


这里我们需要展示一下,当注入的SQL语句不正确,指令未能成功执行时,导致页面异常的样子。


例如,如果我们不执行sleep操作,想把一个不存在的叫做username的列通过select显示出来,执行之后网页上就会显示错误信息。



二、文件上传漏洞(CVE-2017-6090)


漏洞被描述为:在phpcollab 2.5.1以及之前的版本中,文件clients/editclient.php存在无限制的文件上传漏洞,允许远程已经认证的用户通过上传一个具有可执行后缀的文件来执行任意代码,后续可直接访问logos_clients目录下对应的这个文件。


漏洞点存在于/phpcollab/clients/editclient.php文件的第63~70行。



代码首先在第63行通过对文件名的字符串操作,取得了小写的后缀名。


在第65行通过函数move_uploaded_file来完成上传操作,值得注意的是,新文件的名称为”../logos_clients/”.$id.”.$extension”,也就是保存到logos_clients文件夹下,文件名为$id对应的值,并且后缀名不变。此处是上传logo的位置,并未限制后缀名必须为图片类型,因此出现了漏洞。


在浏览器中操作,对应的URL为:


http://192.168.32.132/phpcollab/clients/editclient.php?&PHPSESSID=2k0heng9qlb3ll5cg7cdcbd0i6



在“标志”位置,可以上传任意类型的文件,此处我们上传一个php一句话木马。编辑完成之后点击“保存”,随后在列表中会出现刚刚创建的内容。



通过复制图片的地址,能够得到所上传的webshell的路径。用中国菜刀连接一句话木马,最终成功。


以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索漏洞 , php , 简单 , 分析 , 2017 , cve , 复现 , Collab , 6089 6090 ,以便于您获取更多的相关知识。