一处代码执行引发的思考

作者:媒体转发 时间:2018-09-16 16:22

字号

YCCMS是一款PHP版轻量级CMS建站系统,程序页面设计简洁,生成静态html,后台功能强大,利于优化、超强收录、超强排名,适合做关键词排名、淘宝客程序,是个人、企业建站的理想选择。最近偶然间在互联网上看到了一个关于YCCMS代码执行的漏洞,详情并没有公开,因为有前段时间Echsop代码执行的事件,让我对代码执行的成因很感兴趣,所以我就下载了代码看了看。因为这个cms比较小众影响并不会大,所以这里直接把漏洞详情就写出来了。

漏洞解构

如果想做实验请在网上自行下载YCCMS3.3也就是最新版。

搭建好环境之后,访问一下首页看看它加载了哪些页面顺便看一下入口。

看一下入口

看一下入口

在这里可以看到你访问首页的时候,其实直接跳到了count.php文件中执行代码了,这里我们直接去看这个文件。

看这个文件

看这个文件

这个文件起到了一个中转站的作用,按照指引进入run.inc.php文件中。

进入run.inc.php文件

进入run.inc.php文件

这里使用了魔术方法,在运行文件的时候自动将项目中的类进行了加载,并且执行了圆圈中的类里的方法,进入这个文件中看一下。

查看文件

查看文件

这里首先调用了一个内部函数,看一下这个函数的作用。

调用了一个内部函数

调用了一个内部函数

这里再回到上一个函数中。

再回到上一个函数中

再回到上一个函数中

圈中的部分作用不是很大,唯一的作用就是将这个漏洞限制在了admin这里面,不然的话a这个参数将变成不可控的。

再接下来,就到了重点了,这里使用了file_exists这个函数判断一个文件存不存在,不存在的话就执行a=index的操作,接下来就直接将用户可控的变量传入了eval函数中。这里没有进行过滤,如果能绕过file_exists函数就能达到命令执行的效果了。看一下file_exists函数:

看一下file_exists函数

看一下file_exists函数

返回值是布尔值。这个函数允许传入的路径中含有特殊符号。具体来看一下。

查看文件

查看文件

这里在ceshi1目录下有一个文件:

查看目录

查看目录

访问测试路径,证明文件存在。

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接