前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码审计之YXCMS

代码审计之YXCMS

作者头像
YanXia
发布2023-04-07 17:04:43
1.2K0
发布2023-04-07 17:04:43
举报
文章被收录于专栏:YX’blogYX’blog

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

0x00 前言

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

运行环境要求:

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

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

0x01 什么是MVC架构

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

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

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

80001-wvk8o6z5qmm.png
80001-wvk8o6z5qmm.png

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

0x02 YXCMS的路由分析

01849-lxg1bps20sg.png
01849-lxg1bps20sg.png

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

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

举个例子

94976-ck83hvmq7et.png
94976-ck83hvmq7et.png

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

50999-01wp5lnxzp2y.png
50999-01wp5lnxzp2y.png

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

0x03 审计过程

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

12256-28gtqgd7ign.png
12256-28gtqgd7ign.png

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

84510-ohl4d30fq9s.png
84510-ohl4d30fq9s.png

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

64432-pt8dxhdr9m.png
64432-pt8dxhdr9m.png

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

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

16388-j9htpltrcb.png
16388-j9htpltrcb.png

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

16008-jwffio5a90c.png
16008-jwffio5a90c.png
83258-gpns9qk6su.png
83258-gpns9qk6su.png

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

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

94145-ruo60uhc1yp.png
94145-ruo60uhc1yp.png
46865-djowml1a3sn.png
46865-djowml1a3sn.png

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

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

例子:

83779-cw586h5uov.png
83779-cw586h5uov.png

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

50255-pv2aeshqbt.png
50255-pv2aeshqbt.png

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

57959-txnbooi5wjl.png
57959-txnbooi5wjl.png

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

01890-rbkq9w1rmh.png
01890-rbkq9w1rmh.png

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

86516-p51ln9ys8fj.png
86516-p51ln9ys8fj.png

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

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

26680-k5qlysej0n.png
26680-k5qlysej0n.png
58115-ohnlmjodv7k.png
58115-ohnlmjodv7k.png

根据url定位到对应的函数

86495-40n4tsq351b.png
86495-40n4tsq351b.png

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

41234-335th5fffy5.png
41234-335th5fffy5.png

然后就进入了POST时的判断

59976-qa3rybfctve.png
59976-qa3rybfctve.png

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

87616-hfgwfh0avvc.png
87616-hfgwfh0avvc.png

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

72640-cdyvamyg71.png
72640-cdyvamyg71.png
10377-lnrvwbiuxmf.png
10377-lnrvwbiuxmf.png
79522-ty8s814dhvd.png
79522-ty8s814dhvd.png

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

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

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

64125-mliss76i5w.png
64125-mliss76i5w.png
44657-tujp8vdwcd.png
44657-tujp8vdwcd.png

从上图中定位到代码

89292-dvriytacimr.png
89292-dvriytacimr.png
57490-0lliirrtpeg.png
57490-0lliirrtpeg.png

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

84955-z1hsfbyipi.png
84955-z1hsfbyipi.png

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

81995-htyz70aq04k.png
81995-htyz70aq04k.png

上传成功

04206-vhigyc1g53.png
04206-vhigyc1g53.png
77777-1tavc1o4rajh.png
77777-1tavc1o4rajh.png
61825-z8nbqz8iaj.png
61825-z8nbqz8iaj.png

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 结尾
              相关产品与服务
              代码审计
              代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档