专栏首页信安之路记一次审计 xiaocms 的过程

记一次审计 xiaocms 的过程

周末在家刚吃完晚饭,基友 DM 叫我一起来审计 xiaocms 系统,也不知道他是受到啥刺激了。正好,除了 Code Review 公司项目代码及框架代码,未审计过其他系统,就当拿来练手了。

代码审计的目的是发现代码中存在的缺陷,并对其进行修复或利用(灰盒测试)。通常是在本地部署一套环境,并进行反复调试直至发现缺陷。

首选需要知道目标代码具备那些功能模块,针对性的对相关模块进行审计排查。其次需要通读带目标代码,知道其功能类的加载顺序、目录结构、方法文件及配置文件路径。

目录结结构

根据上图中的目录,我们先看下前台 index.php 文件内容:

代码量很少,首先定义了一个常量用于保持文件夹路径,随后加载了 core/xiaocms.php 框架文件,最后运行了一个 run() 函数。

我们找到 xiaocms.php 文件并查看,里面大体分为两块部分,最上面定义了一些常量并载入了框架所需的类文件及方法文件,下面则定义了一个类及静态方法。这里都需要去跟踪一下文件,避免走弯路和做无用功的测试。

审计流程

通过这些文件需要知道:

1、如何调用控制器中的对应方法及相关视图

2、框架对超全局变量做了那些处理及限制

3、相关功能模块逻辑及参数校验是否严谨

4、数据库使用 mysql 还是 PDO

经过查看所有的加载文件,排查出几个函数需要我们注意下,如果在代码中有看到它们的出现就直接可以放弃了,避免浪费过多的时间。

上述方法都用到了 htmlspecialchars()函数对传递变量做了转义,转义了双引号尖括号及 & 符。在看数据库查询用的是 参数化查询加PDO ,所以避免浪费时间,碰到模块中使用这些方法处理的接收变量直接放弃。

随后用浏览器打开配置好的 xiaocms 站点,完成数据库的安装。尝试了一下,此处并不存在重复安装数据库的问题,说明这套cms安全意识很好。

开始审计前端控制器,去除安装模块和框架基础类就剩下:controller/index.phpcontroller/post.phpcontroller/api.php 三个文件。

前台文件少内容也相对较少,看了这三个文件的内容并没有发现可以利用的地方。前台暂时看来是没有问题的了,果断放弃

后台控制器文件也并不多,均在 ./admin/controller 文件夹内。将文件全部查看后未发现有效利用的点,外部接收均经过 $this->post()$this->get() 方法过滤。

后台模版编辑后触发文件包含

因为是在本地测试,本着 见框就X 的原则,尝试一遍后台所有能看到的输入框。随后在模板编辑方法内,找到可以 getshell 的方法。

我们在回到产品详情页面,成功 getshell.

分析原因

后台编辑模版 URL:

http://demo.com/admin/index.php?c=template&a=edit&dir=&file=show_product.html

参数:

正如上面看到的,htmlspecialchers_decode() 函数还原了 $this->post() 方法中对特殊字符的转义。

随后提交至 CNVD ,可惜啦,早就被人提交过了 (不过不得不说, CNVD 的响应速度是真的快)

随后在 CNVD 上搜索了一下,这个版本的 xiaocms 被爆过三个洞。分别是 后台登录无效限制爆破文件包含后台任意文件上传

帐号泄漏加无限制爆破

看完 CNVD 中的漏洞描述后,发现可以对 登录无效限制爆破 漏洞进一步扩展,形成一个组合漏洞。

审计中发现 ,刷新缓存 这个功能会向 ./data/cache/ 目录中的特定文件写入 实例化字符串,如果未对该目录做访问控制则可以直接预览到管理员帐号。

现在我们来看下 CNVD 漏洞列表中,验证逻辑漏洞是怎么产生的。

验证跟踪至此处,其代码在校验之前会删除 session 中的值,但变量依然存在的所以本次校验依然有效。只有当第二次请求过来时,才会赋值给 $code 变量一个空值。但是,这特么是全等符。难道被修复了?

为了验证我的猜想,在 github 上找到了一个 2017年7月18日 前的版本:

https://github.com/xyyphp/xiaocms/blob/master/core/controller/Base.class.php

然后看看解压后该文件的修改日期:

对比了一下。好吧,该处已经被修复了。该漏洞的组合使用只限 2017年10月20号 以前的版本 了。

后台任意文件上传

居然这么有缘,那就把 CNVD 列表中的该洞也分析一下吧。我们直接看问题代码:

简单生成一个 PHP 文件,用于复现测试:

echo '<?php phpinfo(); ?>' > poc.php

然后在构造本地提交表单页面:

提交路径指定:

http://xiaocms.com/admin/index.php?c=uploadfile&a=uploadify_upload&type=php&size=1024

即可。

至此该 CMS 的审计结束了,希望对你有所帮助。

本文分享自微信公众号 - 信安之路(xazlsec),作者:0x584A

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 审计某开源商城中的漏洞大礼包

    首先这个 CMS 并不怎么出名,拿来当审计样板却很合适。给我的感觉是适合初级水平升中级之间的过程,也算是对上一篇审计文章的后续文了。

    信安之路
  • 移动互联网信息传输安全现状分析

    这是 2017 年 3 月份有关移动市场的统计数据,移动 app 的数量已经突破 10 亿。移动安全也成为了一个全民关注的问题。从最初的 app 只针对功能实现...

    信安之路
  • 从暴力枚举用户到获取域所有信息

    我们在进行内网渗透中,会遇到存在 windows 域环境的情况,当我们获得一个内网主机权限之后,这个主机可能没有加入域,我们无法直接通过在这个主机上获取域中的相...

    信安之路
  • R语言18讲(三)

    ? 我们在做数据分析工作的前提,当然是得有数据,巧妇难为无米之炊,所以数据的获取和产生是非常重要和基础的,然而,在当前互联网时代,信息非常的膨胀,我们获取...

    小莹莹
  • js的arguments分析

    执行结果中可以发现,argument和函数的参数列表中的变量是有关联的,这里假设函数的实参和形参个数是一样的。这个结果的背后到底是怎么回事,看了一下es5的ar...

    theanarkh
  • 3-4 文件读写例子(2)

    向项目中添加名为FileOption.cs的类文件,并准备填写关于文件操作的各种方法,如图3-8所示:

    py3study
  • 北京基因组所数据库介绍(类似sra和ebi)

    基因组学在生物学科的发展中,具有划时代的意义。同时,很多人在刚进入生物信息学领域时,最先接触的也往往是组装基因组,注释基因组。这在我们生信技能树的公号里有详细的...

    生信技能树
  • 15 个 Linux 神器,你会用几个?

    mycli:mysql客户端,支持语法高亮和命令补全,效果类似ipython,可以替代mysql命令。

    Java技术栈
  • YII使用命令行模式

    入口文件:shell.php run(); 数据库配置文件console.php可以参考main.php 演示protected/commands/TestCo...

    苦咖啡
  • 大数据,银行风险管理的金钥匙

    大数据文摘

扫码关注云+社区

领取腾讯云代金券