此图像的alt属性为空;文件名为1561616795520.png!420.280

0x01 前言

依然是比较小众且N年前已经停止维护的CMS。

0x02 环境

lamp+Mini cms

安装的时候将install.txt后缀改为php即可。

简单看了一下关于这个cms的介绍,这个cms属于轻量级个人网站,不需要数据库支持,没有成员和权限评论插件什么乱七八糟的功能,类似于hexo,但是不同于静态博客,它是动态的,这里不说它的优缺点,因为这不是重点。

0x03 代码审计

安装结束后,install.php文件会自动删除,所以不存在重装漏洞。

保存的文章会在/mc-files/posts/data/下,格式为.dat

mc-admin/head.php-越权

我们查看一下登录模块

index.php

代码包含了mc-conf.php文件,该文件中是网站配置信息,后台账号密码等

然后是判断token是否和预设的相同,token是使用admin账号密码组合成的字符串md5。如果相同则跳转到post.php,cookie用于持久维持在线状态,下面的判断则是用于首次登陆。

如果登陆成功会跳转到post.php.我们看一下post.php的内容

post.php中有一个函数delete_post()

此函数对应着删除功能。

我们先想一下正常逻辑:应该是先登陆,判断登陆账号的权限,然后再执行相应的功能。

我们看一下post.php是否做了权限判断

post.php

搜一下关键字token

未找到,还有一种可能就是在他包含的文件中存在校验。那我们找第二个关键字include/require

第一个

这个我们分析过了,下一个

第二个

我们没分析过,拉出来看看

head.php

刚开始就是权限判断,我们不看下面的代码,这里使用的token机制依然是登陆模块的机制,所以无法绕过。

但是。

php作为一种没有程序入口的语言,肯定是从上往下执行的。那么问题就来了,在post.php中,第188行才包含了文件head.php,但是 delete_post() 函数在第33行就已经执行了。所以这就导致了越权漏洞。

我们来试一下,退出登录,由于没有退出这个功能,所以只能使用清除cookie 的方式退出。然后构造请求,请求如下

文件已删除

post-edit.php/conf.php-存储型xss

直接看代码:

这里的变量$post_content 为文章主题,由于未做html特殊符号转义,所以导致了存储型xss。对变量content的处理为检测magic_quotes_gpc是否为on状态,如果是on状态,则执行stripslashes()函数,删除addslashes()函数的转义操作。但是这里的代码仅仅做了删除操作,如果 magic_quotes_gpc 为off状态呢,既没有对特殊字符做删除反斜杠处理也没有对特殊符号进行过滤。这就导致了存储型xss的产生。就算是on状态,代码也是删掉了转义符,也没有进行过滤。所以xss无论如何都存在。

简单测试:

点击文章触发xss。

同样的漏洞也存在于conf.php文件

熟悉的操作嗷

此xss在点击文章的时候会被调用,所以点击文章即可触发。

这个cms差不多就这俩漏洞了。因为本身非常轻量级,功能也少,没涉及到数据库。所以漏洞也不是很多。

0x04 漏洞修复

越权

这个简单,把包含的php文件挪到php代码最上层即可

来试一下:

漏洞已修复

存储型xss

原因在于没有过滤,那么增加一次过滤即可

再试一下:

ok修复

0x05 结语

目前准备做10??个php的cms,这是第二个。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注