前言
第一次线下被打成💩了,比赛中一直被打,修洞的过程也是磕磕碰碰。想着之后要增加一下cms的审计经验,但是摸了一学期又陷入期末复习的深渊,没法子,审计学习咕到了现在。。。现在终于有了时间,在寻找目标的时候恰好看到一个极简风格的cms——MiniCMS,应该很适合我这个菜鸡(嘿嘿嘿)。
目录结构
mc-admin           后台
  |--...           后台功能及前端面板
mc-files           文章或页面内容处理
  |--theme         渲染文章
  |--posts         文章
  |    |--data     文章信息序列化数据
  |    |--index    保存已创建或删除的文章信息
  |    |      |--delete.php    回收站
  |    |      |--draft.php     草稿箱
  |    |      |--publish.php   已发布
  |--pages         页面
  |    |--data     页面信息序列化数据
  |    |--index    保存已创建或删除的页面信息
  |    |      |--delete.php    回收站
  |    |      |--draft.php     草稿箱
  |    |      |--publish.php   已发布
  |--mc-tags.php   模板标签定义
  |...
XSS
mc-admin/conf.php
漏洞代码
|  |  | 
可以看到这里对信息的输出都没有采取任何的转义处理,在mc_the_link()和mc_comment_code()定义处也没有对身份信息进行转义处理,而mc_nick_name()却使用了htmlspecialchars处理,可能是作者只考虑了站长昵称的危险性
payload
|  |  | 
修复
源头处理,直接在conf.php使用htmlspecialchars处理comment_code和site_link
mc-admin/post-edit.php
漏洞代码
|  |  | 
上面模板输出没有处理,且mc_the_content函数也没有任何输出处理导致了content也存在XSS
payload
|  |  | 
修复
|  |  | 
mc-admin/post.php
分类显示的tag和data同样也是无处理直接输出。
payload
post.php?state=publish&tag="><script>alert('tag')</script>&date="><script>alert('date')</script>
修复
|  |  | 
同理,page的也需要修改。
剩下的就咕了,审起来确实没劲。
信息泄露
mc-admin/post-edit.php
编辑文章的URL中id存在目录穿越,但是由于代码中进行了后缀拼接所以不会导致任意文件读取(在00截断还存在的php版本中可以成功任意文件读),但是错误信息会暴露项目的绝对路径。
post-edit.php?id=../../../../../../../etc/passwd
修复
|  |  | 
该cms全局都是默认显示错误信息,所以post.php、page.php啥的都要设置一下
mc-admin/post.php(伪)
这里路径遍历漏洞挺好奇的,这应该是中间件配置问题,所以应该不能算cms漏洞。那这个漏洞审核的时候是咋复现的?这应该是个人环境问题啊,迷惑ing
代码执行
mc-admin/install.php
mc-admin/conf.php
|  |  | 
下个断点看一下code值
'<?php
$mc_config = array (
  \'version\' => \'1.10\',
  \'site_link\' => \'http://IP/mini/\',
  \'site_name\' => \'我的网站\',
  \'site_desc\' => \'又一个MiniCMS网站\',
  \'user_name\' => \'admin\',
  \'user_pass\' => \'123456\',
  \'user_nick\' => \'<script>alert(\\\'link\\\')</script>\',
  \'comment_code\' => \'&amp;amp;lt;img src=0 onerror=alert(\\\'comment_code\\\')&amp;amp;gt;\',
)
?>'
存在单引号闭合,所以可以在安装过程中提前插入单引号闭合执行代码
payload
hhh',);phpinfo();//
但是由于install.php在安装完会自我删除,所以这个利用不大,除非有个文件包含能包含根目录下的install.txt
参考
https://github.com/AvaterXXX/MiniCms/blob/master/Command%20Execution.md