PHPCMS2008 getshell
应学校工程实践2要求。。每人分析一个cve。我选择了phpcms2008.
环境搭建
由于PHPCMS2008要求的MYSQL版本较低,于是在docker里拉取了mysql5.2进行搭建
漏洞分析
该漏洞发生在web根目录下的type,php文件里,主要漏洞点从第17行开始。
从代码中可知,$template参数可以直接由外部传入,也就是说用户可以控制此参数,这样就可以将恶意的参数给传递进来,而该参数只经过判空处理,没有其他的过滤函数去过滤该参数,并不安全,之后在第31行处传入了template()函数处理
于是接下来,我们跟进到template()函数中,在\include\global.func.php的第771行,很明显,这个global.func.php文件定义了所有cms里的函数
而在template函数里,我们发现$template继续被template_complie函数处理
继续跟进template_complie函数
最终,我们看到,$template参数被用于compiledtplfile的路径生成,然后被写入到content中,即compiledtplfile对应路径下的PHP文件中去。又由于$template参数未被过滤,只在之前被检查不能为空,所以该PHP文件下可以写入任意代码,最终造成任意代码注入漏洞。
漏洞复现
1 | Payload: |
接着访问http://52.36.15.23:8881/phpcms/data/cache_template/rss.tpl.php
即可访问后门文件,接着查看data/cache_template/rss.tpl.php,确实被写入了后门
批量利用
最后写了一个,从zoomeye里批量搜索phpcms的ip,然后再批量上poc打
链接:https://github.com/Hu3sky/phpcms2008_exp
(请勿做非法使用)