安全路透社
当前位置:安全路透社 > 网络转载 > 正文

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

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

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

CVE官网信息如下:

CVE-2017-6089信息.JPG

漏洞被描述为:在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

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

deletetopics-project.JPG

针对参数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参数的漏洞点

SQL注入漏洞1-1源码部分.JPG

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

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

SQL注入漏洞1-2源码部分.JPG

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

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

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

deletebookmarks.JPG

我的环境下对应的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行

SQL注入漏洞2.JPG

此处与上面的漏洞点原理相同,先用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

deletecalendar.JPG

执行的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注入漏洞3.JPG

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

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

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

网页报错.JPG

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

CVE-2017-6090.JPG

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

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

文件上传漏洞.JPG

代码首先在第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

文件上传点.JPG

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

文件上传点2.JPG

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

shell.JPG

*本文作者:navyofficer,转载请注明来自 FreeBuf.COM

未经允许不得转载:安全路透社 » PHP Collab中CVE-2017-6089和CVE-2017-6090漏洞的复现与简单分析

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册