首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >代码审计之YXCMS

代码审计之YXCMS

作者头像
YanXia
发布2023-04-07 17:04:43
发布2023-04-07 17:04:43
1.5K00
代码可运行
举报
文章被收录于专栏:YX’blogYX’blog
运行总次数:0
代码可运行

本次教程来自YanXia,转载请注明作者信息,博客地址http://www.535yx.cn,感谢

0x00 前言

好久没写审计文章了,今天更新篇入门级别MVC架构的PHP代码审计文章。 YXCMS v1.4.7源码下载地址: http://down.chinaz.com/soft/33853.htm

运行环境要求:

代码语言:javascript
代码运行次数:0
运行
复制
可用的 web服务器(如 Apache,nginx,IIS 等)
PHP 5.0.x 及以上
Mysql 5.0.x 及以上

本文利用到的工具: phpstudy,SEAY,PHPSTORM

0x01 什么是MVC架构

MVC(Model-View-Controller)是软件工程中的一种软件架构,把软件系统分成三个部分:

代码语言:javascript
代码运行次数:0
运行
复制
 模型(Model): 封装与应用逻辑相关的数据,通常与数据库直接交互
 视图(View): 负责数据的展示或收集数据
 控制器(Controller): 负责控制整个程序的流程,通常是根据不同情况调用模型来处理数据后将数据输出到视图

MVC的作用:分离职责,简化代码结构,使程序有更好的维护,重用,和扩展性

总结一下,View指的是我们看到的前端界面,Model就是View所显示界面的后端数据,而Controller就相当于是View和Model之间的桥梁。

0x02 YXCMS的路由分析

先看该cms的入口文件index.php,包裹了路径protected/core.php。访问一下可以发现该CMS的路由

代码语言:javascript
代码运行次数:0
运行
复制
url/index.php?r=$app_name/$controller/$action;
写的大白话一点就是
url/index.php?r=(protected/apps/一级文件夹) / (protected/apps/一级文件夹/controller/文件名前几位) / 文件名下对应的函数名

举个例子

这个地方就对应了url http://yxcms.com/index.php?r=admin/index/login

OK,接下来开始正式的审计。

0x03 审计过程

先用seay全局扫一下敏感函数

1.任意文件删除漏洞(/protected/apps/admin/controller/filesController.php)

这里我们先看一下in函数的用处,发现其是在输入字符串时进行html实体输出,以及是针对SQL注入进行过滤的addslashes()函数。当输入是数组的时候则无如何过滤

也就是说,这里的过滤对于任意文件删除的.和/没有进行任何处置。dirs=str_replace(',','/',dirs);这行则是将输入的**,**替换成**/**也无实际用处接下来就是判断是否是目录或者文件了如果是目录的话,则调用del_dir函数删除目录下所有的文件

如果是文件的话就直接unlink删除文件对应文件了。 下列举例: 我先修改下输出,这样让大家看的更直观点。

在根目录新建个文件后构造payload

index.php?r=admin/files/del&fname=/../yanxia.txt 可以看到,这里就成功删除了yanxia.txt。实战利用的话,我们可以通过删除protected/apps/install/install.lock来重置cms(有点刑,不建议这么利用)

2.任意文件删除漏洞(/protected/apps/admin/controller/newsController.php)

这里跟上面的逻辑差不多Check::url($pic)就是判断下是不是url的格式

代码语言:javascript
代码运行次数:0
运行
复制
$data['picture']= $this->nopic;
if(model('news')->update("id='$id'",$data)) //这里会判断id对应的数据是否存在。也就是说如果没有个数据存在的话也是无法向下执行的

例子:

3.任意文件删除漏洞(/protected/apps/admin/controller/photoController.php)

4.目录遍历漏洞(/protected/apps/admin/controller/filesController.php)

这个函数是对upload文件夹下的文件进行展示,也就对应后台的文件管理功能。如图,这个地方对dirget参数没有做什么实质性的过滤,所以这里就可以造成一个文件读取的操作

我在这里输出一下路径,让你们更清晰的看下

5. 任意文件写入漏洞(protected/apps/admin/controller/setController.php)

该漏洞是通过从功能点去反向分析代码获得。

根据url定位到对应的函数

下图先判断了写入的文件名和内容是否为空。若为空即是非法操作。没什么影响

然后就进入了POST时的判断

这里我们跟进到ifillegal函数, 这个函数是用来判断是否存在跨目录的操作。

如果未匹配到的话就尝试写入该文件

这个文件底下的tpedit()函数同理,不在叙述。

6.任意文件上传漏洞(protected/apps/appmanage/controller/indexController.php)

本处的功能点在许多cms里都存在过漏洞,YXCMS也不例外。我在网络上搜索了一番发现并未有任何文章提及该处漏洞,说不定是一个0day。接下来我们来分析一下

从上图中定位到代码

可以看出来,当上传一个zip压缩包的时候,代码会去匹配压缩包中是否存在个文件夹(命名规则为a-z0-9),以及文件夹中是否存在config.php文件。如果不存在的话即会返回“安装包格式错误”

接下来也就仅仅判断了该应用是否存在,不存在的话就将数据拷贝到apps目录中。所以我们可以构造个压缩包进行上传

上传成功

0x04 结尾

这篇文章就到这里,感谢各位的观看。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 什么是MVC架构
  • 0x02 YXCMS的路由分析
  • 0x03 审计过程
    • 1.任意文件删除漏洞(/protected/apps/admin/controller/filesController.php)
    • 2.任意文件删除漏洞(/protected/apps/admin/controller/newsController.php)
    • 3.任意文件删除漏洞(/protected/apps/admin/controller/photoController.php)
    • 4.目录遍历漏洞(/protected/apps/admin/controller/filesController.php)
    • 5. 任意文件写入漏洞(protected/apps/admin/controller/setController.php)
    • 6.任意文件上传漏洞(protected/apps/appmanage/controller/indexController.php)
  • 0x04 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档