首页 > 其他分享 >YzmCMS代码审计

YzmCMS代码审计

时间:2023-11-01 11:15:37浏览次数:21  
标签:审计 跟进 YzmCMS 代码 --- application yzmphp php class

YzmCMS代码审计

代码审计 #CMS

0x01 通读

index.php

image-20220514154916322

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

foreach(get_defined_constants(true)['user'] as $k=>$v){
    echo $k.'---'.$v."\r\n";
}
APP_DEBUG--- 
URL_MODEL---3 
YZMPHP_PATH---x:\cms\yzmcms-master\ 
IN_YZMPHP---1 
YP_PATH---x:\cms\yzmcms-master\yzmphp\ 
YZMPHP_VERSION---2.7 
APP_PATH---x:\cms\yzmcms-master\application\ 
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:\cms\yzmcms-master\,实际上是包含了当前目录下的/yzmphp/yzmphp.php文件

跟进文件

yzmphp.php

image-20220514161026201

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

image-20220514161224892

image-20220514161325020

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

image-20220514161603815

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

image-20220514161811644

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

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

image-20220514162020963

image-20220514162101391

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

image-20220514170442208

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

回到index.php

image-20220514175344302

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

image-20220514202711234

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

image-20220514203807467

因为起初传递的$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

image-20220515150807304

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

param.class.php

image-20220515152039034

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

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

image-20220515152457799

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

image-20220515152834587

这里都是配置信息

回到param.class.php

image-20220515154007816

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

image-20220515154303006

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

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

image-20220515154547134

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

image-20220515154656690

image-20220515154707490

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

image-20220515154852622

这里进行了addslashes()过滤。

每个方法中这部分

image-20220515155007401

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

回到application.class.php

image-20220515155224489

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

image-20220515155515786

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

image-20220515155758058

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

框架总结

  • 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
    • 所对应的方法则是传递过来的方法

标签:审计,跟进,YzmCMS,代码,---,application,yzmphp,php,class
From: https://www.cnblogs.com/encr/p/17775132.html

相关文章

  • 前端面试题之代码输出(十七)
    书接之前代码输出题目,异步&事件循环前端面试题之代码输出前端面试题之代码输出二前端面试题之代码输出三前端面试题之代码输出四前端面试题之代码输出五前端面试题之代码输出六前端面试题之代码输出七前端面试题之代码输出八前端面试题之代码输出九前端面试题之代码输出十前端面试题......
  • Linux时间校准、时间同步(ntpdate及C代码NTP客户端代码校准示例)
    背景机器每次机启后时间就会出现异常,因为机器无法访问外网,只能访问局域网的ntp服务,所以需要保证局域网内部有ntp服务,如何安装ntp服务,参考Ubuntu20.04Ntp服务安装及验证。网络时间协议NetworkTimeProtocol(NTP)是一种确保时钟保持准确的方法。如果可以访问互联网,只需安装ntp......
  • 一款成熟的文件外发审计管控系统,应具备哪些价值?
    在信息化高速发展的时代,电子文件泄密事件层出不穷,比如文本文档、图像、音频、视频、电子表格等,都是日常会接触到的文件类型。像制造业企业,会有比较多的上下游协作交流,外发的电子文档以明文的形式提供给合作伙伴,这就导致明文电子文档在外发过程中会处于失控状态,存在着巨大的泄密风......
  • 代码
    `#include <stdio.h>include<stdlib.h>include<string.h>include<sys/types.h>include<sys/wait.h>include<unistd.h>include <signal.h>define MAXARGS 20define ARGLEN 100char*makestring(cha......
  • Ardour 8.0 开放源代码 DAW 发布
    导读Ardour8.0近日发布了,这是一款功能强大、免费、开源、跨平台的DAW(数字音频工作站),适用于GNU/Linux、macOS和Windows系统。Ardour8.0的亮点包括:全面支持NovationLaunchpadPro控制器、可对区域进行分组以一起移动或修剪、新的自动化绘图风格、重新设计的MI......
  • 开源 2 年、打磨 13 年、300 万行代码的开源项目
    从刻在石壁上的甲骨文,再到写在纸上的汉字,每一次信息载体的变更都是文化进步的重要标志。在如今这个信息数字化的时代,我们在享受着数字化便利的同时,数据也在我们看不见的地方飞速增长着,数据的重要性不言而喻。那应该如何将海量数据完整、有序、持久化地保存下来呢?程序员小伙伴看......
  • 《代码大全2》读后感
    代码改进,这部分包括以下几个主题,协同、测试、调试、重构、调整。这里的测试是开发者测试,应该是指单元测试了,现有很多合适的工具,比如NUnit、CppUnit、JUnit等等。调试主要难点在于寻找和定位问题,解决问题虽然也不容易,但需要的是远见,因为再不济,总会存在一种打补丁的方法可以临时解......
  • 代码生成器 CodeBuilder 3.2 正式版发布
    CodeBuilder是一款强大的代码生成工具,目前发布了3.2版本,大家可以前去下载体验官方主页。1、多种数据源基于ADO.NET的数据驱动PowerDesignerPDManerDbSchemaSwagger这几种数据源基本上已经覆盖了我们常用的数据环境了,如果你有能力的话,可以自己开发数据源......
  • 代码大全2读后感4
    《代码大全》看完前面觉得有很多值得回味的地方,而且每部分之后作者还推荐了不少经典书籍。本书的思想管理软件项目的本质是管理复杂性。代码承载的是人与人之间的交流。在这,作个读书心得。全书的主题是软件构建,大致看了一下目录,关于软件构建问题的方方面面均有涉及,共分7个部分,从软......
  • 代码 测试用例 测试用例 测试结果 26. 删除有序数组中的重复项
    给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通......