YzmCMS代码审计

admin 2023年5月3日09:40:36评论73 views字数 4202阅读14分0秒阅读模式

免责声明

由于传播、利用本公众号狐狸说安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号狐狸说安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉,谢谢!

0x01 通读

index.php

YzmCMS代码审计

里面有很多的define,用这个代码运行下

foreach(get_defined_constants(true)['user'] as $k=>$v){    echo $k.'---'.$v."rn";}
APP_DEBUG--- URL_MODEL---3 YZMPHP_PATH---x:cmsyzmcms-master IN_YZMPHP---1 YP_PATH---x:cmsyzmcms-masteryzmphp YZMPHP_VERSION---2.7 APP_PATH---x:cmsyzmcms-masterapplication SYS_START_TIME---1652515504.1375 SYS_TIME---1652515504 SERVER_PORT---http:// HTTP_HOST---xhcms.cc HTTP_REFERER--- EXT---.class.php IS_CGI---1 PHP_FILE---/index.php SITE_PATH---/ SITE_URL---http://xhcms.cc/ STATIC_URL---http://xhcms.cc/common/static/ MAGIC_QUOTES_GPC--- YZMCMS_VERSION---V6.3 YZMCMS_UPDATE---20220110 YZMCMS_SOFTNAME---YzmCMS内容管理系统 ROUTE_M---index ROUTE_C---index ROUTE_A---init

21行有个requirerequire==x:cmsyzmcms-master,实际上是包含了当前目录下的/yzmphp/yzmphp.php文件

跟进文件

yzmphp.php

YzmCMS代码审计

33行调用了yzm_base下的load_sys_func()方法,跟进这个类,PHPstorm中按住ctrl+鼠标左键进行跟踪

YzmCMS代码审计

YzmCMS代码审计

这里进行了文件包含操作,实际上包含的是yzmphp/core/function/global.func.php

YzmCMS代码审计

整体上看一下,只是定义了方法。回到yzmphp.php

YzmCMS代码审计

这里是判断是否开启GPC,开启则定义MAGIC_QUOTES_GPCTrue,否则为False,上面输出的常量中也写出为1。

70-72行中调用了load_common方法,跟进下

YzmCMS代码审计

YzmCMS代码审计

这里也是文件包含,看一下传入的三个不同的参数文件内都是什么

YzmCMS代码审计

version.php文件只是定义了常量,extention.func.php文件什么也没做,system.func.php中定义了一些方法。继续跟进yzmphp.php,yzmphp.php在后面定义完类之后就没有任何操作

回到index.php

YzmCMS代码审计

这里有个创建应用的方法,跟进下

YzmCMS代码审计

传值进入load_sys_class静态方法中,然后再传入_load_class静态方法中,在load_sys_class方法中设置$initialize的值为1,跟进下该方法

YzmCMS代码审计

因为起初传递的$path为空,进入104行,此时$pathx/cms/yzmphp/core/class,然后115行进行了文件包含,EXT.class.php,即包含了/yzmphp/core/class/application.class.php,然后进入到117行,实例化了applocation类并且赋值给$classes静态变量中,121行将application返回

application.class.php

跟进application.class.php

YzmCMS代码审计

因为实例化了application类,会自动调用__construct构造方法,主要看第20行,前面是debug的,这里给load_sys_class传入了param参数,在上面已经跟进过load_sys_class静态方法了,实际上这里是包含的/yzmphp/core/class/param.class.php。OK,跟进下,在这里打个断点

param.class.php

YzmCMS代码审计

这里标记了个C方法,跟进下,跟读遇到没见过的就跟进

/yzmphp/core/function/global.func.php

YzmCMS代码审计

这里有个$path,此时的值为/common/config/config.php,跟进下

YzmCMS代码审计

这里都是配置信息

回到param.class.php

YzmCMS代码审计

这里有个路由设置,default在/common/config/config.php出现过,这部分是定义路由。第19行Cfalse,看到20行有个pathinfo_url(),跟进

YzmCMS代码审计

这里主要是做网站伪静态的,同时增加了个路由指定方法-$_GET['s']

回到application.class.php,继续通读

YzmCMS代码审计

跟进下调用的三个方法,在param.class.php

YzmCMS代码审计

YzmCMS代码审计

每个方法中都带有$ = $this->safe_deal($);,跟进下这个方法。

YzmCMS代码审计

这里进行了addslashes()过滤。

每个方法中这部分

YzmCMS代码审计

是判断$_GET['a']是否存在,不存在则返回默认路由

回到application.class.php

上面调用了init(),32行又调用了load_controller(),跟进下

YzmCMS代码审计

59行实际上是application/$_GET[m]/controller/$_GET[c].class.php,然后62行对其包含,然后64行是实例化包含进来的类,回到上一步

YzmCMS代码审计

这里有个call_user_func方法,来调用$_GET[a]方法。

0x02 框架总结

http://www.xxx.com/模块名/控制器/方法
    所对应的文件路径为 ./application/模块名/controller/控制器.php
    所对应的方法则是传递过来的方法。
http://www.xxx.com/?s=模块名/控制器名/方法名
    所对应的文件路径为 ./application/模块名/controller/控制器.php
    所对应的方法则是传递过来的方法。
http://www.xxx.com/?m=模块名&c=控制器名&a=方法名
    所对应的文件路径为./application/模块名/controller/控制器.php
    所对应的方法则是传递过来的方法

0x03 学习时刻

YzmCMS代码审计

023 年的【炼石计划@PHP代码审计】主题是【挖 0day,交 CNVD】,目标是今年将带每个人冲刺三张 CNVD 证书(两中一高,你只需认认真真的学习,我则用心手把手的教你。

首先冲刺第一张,其次冲刺第二张,最后冲刺第三张,最后恭喜你获得三张专属于自己的 CNVD 证书!

是不是看我说的还挺简单的,要我说,确实不难,毕竟世上无难事,只怕有心人!

另外这事又遇到了【炼石计划@PHP代码审计】,那就又简单了些。

【炼石计划@PHP代码审计】这里是一个专注 PHP 代码审计,系统化从基础入门到实战提升学习 PHP 代码审计的地方。这里不仅注重夯实基础,更加专注实战进阶。从基础概念知识开始学习,配合项目级系统实战演练,共六大学习阶段,一百二十余篇原创教程,带你提升真正的 PHP 代码审计技术!利用碎片化时间学习也会让你有不菲的收获,总之这里一定是你不错的选择。加上 2023 年主题是【挖 0day,交 CNVD】,目标是带大家挖掘两中一高 CNVD 证书,激情碰撞下来,收获最多的一定是你!


毫不夸张说,认真学习下来,相当于 96 元买了三张 CNVD 证书和一身 PHP 代码审计的技术,随随便便挖个漏洞都是这个数的好几倍!

如果说一年认真学习下来,你还没拿到证书,这事我负责!


来,下面跟随我一起瞅瞅学习计划,看看我们是如何完成这个目标的!

【第一阶段】

入门学习 PHP 语言基础与 WEB 安全漏洞(约 10 篇)

我们首先关注 PHP 语言,掌握 PHP 基础语法。其次关注 WEB 漏洞入门学习,并掌握 WEB 常见漏洞概念。


【第二阶段】

学习 PHP 代码审计中的 WEB 常见漏洞(约 12 篇)

学习 PHP 下常见的 WEB 安全相关漏洞代码,并且补充学习常见的 WEB 安全漏洞。

这部分主要关注常见的 WEB 漏洞函数,关键在于了解和记住,进而在下一阶段活学活用。


【第三阶段】

实战代码审计24套基于PHP开发的系统(约 50 篇)

提升 PHP 代码审计能力,一定要从实战出发。我们选取 24 套开源 CMS 系统进行代码审计手把手讲解。从挖掘 CNVD 角度出发,发现和理解常见的 WEB 漏洞,为提交 CNVD 证书打下实战基础。

下面是目前分享的系统,剩余还在调试选型中。代码审计漏洞讲解越往后分享的系统越新鲜热乎。


【第四阶段】

PHP相关系统历史漏洞复现(约 50 篇)

该阶段与前面阶段进行穿插分享。主要关注历史和最新的 PHP 相关系统漏洞复现,并且着重从代码审计层面进行分享。让大家逐渐有独立分析的能力,而不是只会使用 POC。

并且在有着历史漏洞分析的基础上,进而可以对其他版本的系统进行代码审计,发现和挖掘漏洞!

YzmCMS代码审计

到这,我们基本就可以上手针对相关系统进行漏洞挖掘了,着手提交 CNVD 证书了,提交重复撞洞不可怕,这都是对自己的磨炼,有问题我们可以一起探讨!

下面是进阶学习阶段。


【第五阶段】

PHP 反序列化漏洞讲解与利用链分析(约 12 篇)

反序列化可以说是代码审计中非常重要的一部分。但很多朋友学着那是一个痛苦,云里雾里的。

在这里我们将系统学习 PHP 反序列化漏洞。先从PHP反序列化基础知识讲起。在从简入深学习POP链。让你真正掌握PHP反序列化。


【第六阶段】

系统学习ThinkPHP框架与代码审计分析(约 12 篇)

近几年 ThinkPHP 框架漏洞可以说是 PHP 系统漏洞的主力军。

是非常值得我们需要学习的,在这个阶段,我们从 ThinkPHP 框架基础学起,配合历史漏洞代码深入分析。让大家可以对 ThinkPHP 框架有个深入的了解。

从框架角度出发,分析漏洞,总结经验,在框架面前,可以更加得心应手!


好啦,上面就是我们的学习计划,实际上分享会更加精彩!

心动不如行动,赶紧加入,犹豫就会败北!

早加入早内卷,早拿 CNVD 证书!


YzmCMS代码审计



原文始发于微信公众号(哈拉少安全小队):YzmCMS代码审计

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月3日09:40:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   YzmCMS代码审计http://cn-sec.com/archives/1703930.html

发表评论

匿名网友 填写信息