YzmCMS代码审计

简介: YzmCMS代码审计

0x01 通读

index.php

里面有很多的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

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

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

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

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

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

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

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

回到index.php

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

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

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

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

param.class.php

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

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

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

这里都是配置信息

回到param.class.php

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

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

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

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

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

这里进行了addslashes()过滤。

每个方法中这部分

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

回到application.class.php

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

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

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

目录
相关文章
|
存储 Java
银行余额生成器,银行汇款回执单生成器, 银行转账p图【仅供娱乐学习用途】
这是一套基于Java的银行交易记录模拟教学系统,包含BankSimulator和Main两个核心类。BankSimulator类通过Transaction静态嵌套类实现交易记录。
|
供应链 安全 物联网
NFC(近场通信)技术及其工作原理详解
NFC(近场通信)技术及其工作原理详解
7721 11
|
Windows Python
Windows下pip设置国内源阿里云镜像加速
Windows下pip设置国内源阿里云镜像加速
5901 0
Windows下pip设置国内源阿里云镜像加速
|
SQL 关系型数据库 MySQL
sqli-labs下载与安装使用教程
1.简介 sqli-labs是用来学习sql注入的一个游戏教程 Sqli-labs项目地址—Github获取:sqli-labs
935 0
sqli-labs下载与安装使用教程
|
SQL 供应链 安全
Hospital Management Startup 1.0 SQL 注入(CVE-2022-23366)
Hospital Management Startup 1.0 SQL 注入(CVE-2022-23366)
|
数据安全/隐私保护
Burpsuite系列 -- Intruder模块介绍
Burpsuite系列 -- Intruder模块介绍
679 0
Burpsuite系列 -- Intruder模块介绍
|
JavaScript 关系型数据库 MySQL
fastadmin 部署phpstudy,初步学习fastadmin,保姆级详细讲解
fastadmin 部署phpstudy,初步学习fastadmin,保姆级详细讲解
1235 0
|
Serverless 数据处理 索引
Python 处理 Excel 表格的 14 个常用操作
Python 处理 Excel 表格的 14 个常用操作
1278 0
|
存储 缓存 Linux
C语言编译过程——预处理、编译汇编和链接详解
C语言编译过程——预处理、编译汇编和链接详解
|
前端开发 容器
css溢出隐藏省略号不生效如何解决?
css溢出隐藏省略号不生效如何解决?
1597 0

热门文章

最新文章