欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

代码审计入门:MiniCMS详细分析

来源:本站整理 作者:佚名 时间:2019-07-24 TAG: 我要投稿

MiniCMS体积小,代码短小易读,可以详细分析其执行流程。通过学习可以大致熟悉MVC框架的构造,对Web server的后台处理有一个基本了解。
简介
MiniCMS是由达达设计编写的一个针对个人网站设计的微型内容管理系统。它的特点是:
1. 不需要数据库在支持,只需要一个可以运行PHP的Web环境。
2. 只针对个人网站设计,没有复杂的成员管理和权限设置。
3. 没有分类只有标签,免除发布文章时到底该怎么分类的纠结。
4. 只有“文章”和“页面”两该个系统,没有“评论”、“插件”、“主题”,让你更专注于创造内容。
项目地址:https://github.com/bg5sbk/MiniCMS
安装
· 解压
· 复制并重命名install.txt为install.php
· 在PHP环境下,浏览器打开install.php,填写网站路径、网站名等信息,点击安装即可(此处填写网站信息等可以注入命令造成RCE,但是由于install.php在安装完成后会自动删除,漏洞不可利用,所以并没有太大的威胁)
安装完成后的目录结构
│  build.php
│  index.php 整个项目的入口,首先引入核心库mc-core.php,然后进行路由,对路由结果进行相应的渲染,相当于MVC中的C
│  install.txt 复制为php文件后,用来安装MiniCMS
│  README.md

├─mc-admin 管理功能的实现
│      conf.php 用户设置页面,包括接收和保存更改的设置
│      editor.php 编辑器的大小、样式调整的库
│      foot.php html标签构造
│      head.php token验证,html标签构造;若验证失败,跳转至主页
│      index.php 后台登陆身份验证页面
│      page-edit.php 页面编写处理逻辑,包括显示编辑页面、接收提交的页面、页面序列化储存
│      page.php 管理页面的库,声明加载数据、删除页面、还原页面(从回收站还原)
│      post-edit.php 文章编写处理逻辑,包括显示编辑页面、接收提交的页面、页面序列化储存
│      post.php 管理文章的库,声明加载数据、删除文章、还原文章(从回收站还原)
│      style.css 后台用到的CSS

└─mc-files
    │  markdown.php 一个开源的markdown解析库
    │  mc-conf.php 配置文件,包含用户名和密码等敏感信息
    │  mc-core.php 引入mc-tags、mc-conf,声明404函数
    │  mc-rss.php 订购RSS的链接
    │  mc-tags.php 相当于M,引入markdown、包括一些核心函数,包括了加载各种信息的函数(网站名、文章数、前进后退等,中间有各种过滤,可以重点分析)
    │
    ├─pages
    │  └─index
    │          delete.php 使用数组储存了删除页面的信息(id、标题、标签等)与data文件夹内的文章数据一一对应
    │          draft.php 使用数组储存了草稿页面的信息(id、标题、标签等)与data文件夹内的文章数据一一对应
    │          publish.php 使用数组储存了已发布的页面的信息(id、标题、标签等)与data文件夹内的文章数据一一对应
    │
    ├─posts
    │  ├─data 储存了文章内容的反序列化数据(文章内容等)
    │  └─index
    │          delete.php 使用数组储存了删除的文章的信息(id、标题、标签等)与data文件夹内的文章数据一一对应
    │          draft.php 使用数组储存了草稿文章的信息(id、标题、标签等)与data文件夹内的文章数据一一对应
    │          publish.php 使用数组储存了已发布文章的信息(id、标题、标签等)与data文件夹内的文章数据一一对应
    │
    └─theme
            index.php 主题文件,决定了页面的风格,将C传入的信息显示出来,相当于V
            style.css 主题使用的CSS风格
访客端
路由与控制器(MVC-C)
· MiniCMS在index.php页面进行简单的正则匹配和字符串对比路由,index.php会取出$_SERVER['QUERY_STRING']并进行正则匹配;主要有以下几种路由:
1. preg_match('|^post/([a-z0-5]{6})$|', $qs, $matches) // 路由至查看文章功能。
2. preg_match('|^tag/([^/]+)/(\?page=([0-9]+)){0,1}$|', $qs, $matches) // 路由至查看页面功能。
3. preg_match('|^date/([0-9]{4}-[0-9]{2})/(\?page=([0-9]+)){0,1}$|', $qs, $matches) // 路由至按日期查看文章。
4. preg_match('|^archive/$|', $qs, $matches) // 路由至按archive查看文章。
5. $qs == 'rss/' // 路由至返回RSS订阅。
6. preg_match('|^(([-a-zA-Z0-5]+/)+)$|', $qs, $matches) // 路由至page查看文章。
7. default:index // 其他情况,路由至主页。
视图(MVC-V)
· mc_files/theme/index.php文件中,通过。
直接渲染路由到的内容。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载