PublicCMS任意文件写入漏洞到Getshell

  • A+
所属分类:网络安全文章

0x00 漏洞概览

漏洞编号:CVE-2018-12914

漏洞危害:用户通过在压缩文件中构造包含有特定文件名称的压缩文件时,在进行解压时,会导致跨目录任意写入文件漏洞的攻击。进而有可能被Getshell,远程控制。

影响版本:PublicCMS V4.0.20180210

漏洞加固:更新到最新版本 。

PublicCMS是一套使用Java语言编写的开源内容管理系统(CMS)。项目地址:https://github.com/sanluan/PublicCMS 。PublicCMS 4.0.20180210版本中存在一个上传漏洞,当上传一个包含jsp文件的压缩文件,在执行解压操作时,会将jsp文件写到指定的目录中。

0x01 漏洞利用

搭建环境后登录。
PublicCMS任意文件写入漏洞到Getshell
由此可以推断出项目在服务器上的真实路径为C: omcatapache-tomcat-7.0.81apache-tomcat-7.0.81webappspubliccms。根据数据目录可以知道上传的文件路径为C:datapubliccmswebsite_1(由于该目录不在web目录下,所以直接上传jsp文无效)。

构造一个zip压缩文件。
PublicCMS任意文件写入漏洞到Getshell
其中文件名为

  1. ../../../../../../../../tomcat/apache-tomcat-7.0.81/apache-tomcat-7.0.81/webapps/publiccms/cmd.jsp

然后上传该zip文件。
当经过上传和解压后,cmd.jsp会写入在publiccms目录下。
从而可以获取一个cmdshell。
PublicCMS任意文件写入漏洞到Getshell

0x02 漏洞分析

该漏洞触发条件不是很复杂,所以分析起来也比较简单。

根据当点击解压缩时,请求的URI为:

  1. /publiccms/admin/cmsWebFile/unzip.do?path=%2Ftest.zip

在其中调用了doUnzip方法

由于这里点击的是解压缩,所以调用了com.publiccms.common.tools.ZipUtils.unzip方法。
通过获取targetPath(由于调试环境与漏洞利用环境并非同一个,所以这里的targetPath为D盘下的目录)和压缩文件中的名字进行拼接,然后将文件写入,这里由于文件名中有../从而进行目录的跳跃,最终可以将文件写入到指定的位置。

目前该漏洞已经修复。对比补丁 发现在获取压缩文件中的文件名字时,如果其中含有”..”时则被替换为空。
至于POC的生成可以参考CVE-2018-1261 中压缩文件的生成方式,这里就不再赘述了。

0x03 总结

漏洞产生的原因是因为在处理压缩文件中文件名时没有进行过滤,因此在进行解压时采用../可以将文件写入到指定的目录,从而可以获取webshell。该漏洞和Spring Integration Zip不安全解压(CVE-2018-1261)漏洞有点类似,所以就简单的利用和分析了一下。

目前来说,该CMS用户和名气较少,大部分也都是自用,所以才会被碰巧发现这个漏洞。分析中如有不足,请多指教。

CE安全网

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: