1.分析

CMS下载地址:http://bbs.gxlcms.com/article/9

版本:GxlcmsQY v1.0.0713

\Lib\Lib\Action\Admin\TplAction.class.php

程序通过$this->dirpath()获取当前目录,然后通过new Dir($dirpath)创建目录对象,接着就把目录下的文件输出到页面。

 

跟进函数dirpath(),将GET参数id传入admin_ff_url_repalce(),然后判断$dirpath中是否有关键字Tpl,如果没有,则报错。

 

函数admin_ff_url_repalce()的作用是将array('|','@','#','||')替换为array('/','=','&','//')

 

整个过程中,都没有判断参数id是否包含了“..”,所以存在目录穿越漏洞。

该文件中,函数add()将GET参数id放到read_file()中。

 

而read_file()中直接通过file_get_contents()读取文件,也没有做任何的判断,所以可以读取任意文件。

 

 

2.poc

目录穿越:

http://127.0.0.1/gxlcms/index.php?s=Admin-Tpl-***

http://127.0.0.1/gxlcms/index.php?s=Admin-Tpl-***

任意文件读取:

http://127.0.0.1/gxlcms/index.php?s=Admin-Tpl-***