安全小白的MiniCMS漏洞复现(一)

1,325 阅读2分钟

MiniCMS漏洞复现(一)

简介

MiniCMS是一个针对个人网站设计的微型CMS。它的特点是:

  1. 不需要数据库在支持,只需要一个可以运行PHP的Web环境。
  2. 只针对个人网站设计,没有复杂的成员管理和权限设置。
  3. 没有分类只有标签,免除发布文章时到底该怎么分类的纠结。
  4. 只有“文章”和“页面”两该个系统,没有“评论”、“插件”、“主题”,让你更专注于创造内容。

项目地址:github.com/bg5sbk/Mini…

CVE复现

MiniCMS很适合代码审计入门找找感觉,非常适合小白作为开胃菜。

鉴于本人是安全小白,所以跟着HACHp1师傅的CVE漏洞整理进行漏洞复现。

CVE-2018-1000638 反射型XSS

存在位置:/MiniCMS-master/mc-admin/page.php处date参数存在XSS漏洞。

找到传参点:

if (isset($_GET['date']))
 $filter_date = $_GET['date'];
else
 $filter_date = '';

这里GET传入了date参数,而后没有进行任何过滤处理直接插入到前端代码中,且不止一处。

<span class="pager"><?php echo $page_count; ?>&nbsp;&nbsp;
    <a class="link_button" href="?state=<?php echo $state; ?>&date=<?php echo $filter_date;?>">&laquo;</a>
    <a class="link_button" href="?state=<?php echo $state; ?>&date=<?php echo $filter_date;?>&page=<?php echo $prev_page; ?>">&lsaquo;</a><input type="text" value="<?php echo $page_num; ?>" id="page_input_1"/> 页,共 <?php echo $last_page; ?><a class="link_button" href="?state=<?php echo $state; ?>&date=<?php echo $filter_date;?>&page=<?php echo $next_page; ?>">&rsaquo;</a>
    <a class="link_button" href="?state=<?php echo $state; ?>&date=<?php echo $filter_date;?>&page=<?php echo $last_page; ?>">&raquo;</a>
  </span>

因此,此处可以构造语句进行XSS攻击,构造语句如下:

?date="></a><img%20src=1%20onerror=alert(1)><a>

效果:

cve-2018-1000638_show.png

CVE-2018-10227 存储型XSS

存在位置:/MiniCMS-master/MiniCMS-master/mc-admin/conf.php 在设置中修改网站地址处存在XSS漏洞,可直接存储XSS payload。

if (isset($_POST['save'])) {
  $user_name_changed = $_POST['user_name'] != $mc_config['user_name'];
  
  $mc_config['site_name'] = $_POST['site_name'];
  $mc_config['site_desc'] = $_POST['site_desc'];
  $mc_config['site_link'] = $_POST['site_link'];
  $mc_config['user_nick'] = $_POST['user_nick'];
  $mc_config['user_name'] = $_POST['user_name'];
  $mc_config['comment_code'] = get_magic_quotes_gpc() ? stripslashes(trim($_POST['comment_code'])) : trim($_POST['comment_code']);
  
  if ($_POST['user_pass'] != '')
    $mc_config['user_pass'] = $_POST['user_pass'];
  $code = "<?php\n$mc_config = ".var_export($mc_config, true)."\n?>";
  
  file_put_contents('../mc-files/mc-conf.php', $code);

conf.php中进行设置的更改,对于site_link参数没有进行过滤处理直接写入了mc-conf.php,虽然在下面出现了过滤性输出:

<div class="field">
      <div class="label">网站地址</div>
      <input class="textbox" type="text" name="site_link" value="<?php echo htmlspecialchars($site_link); ?>" />
      <div class="info"></div>
    </div>

但是在head.php中没有使用htmlspecialchars进行过滤,直接将mc_config['site_link']输出给了前端,看到后面site_name中有进行过滤处理,怀疑是开发人员的疏忽导致的。

构造语句:

http://localhost/MiniCMS"></a><img src=1 onerror=alert(1)><a>

效果:

cve-2018-10227_show1.png

cve-2018-10227_show2.png

CVE-2018-10424 物理路径泄露

存在位置: /MiniCMS-master/mc-admin/post-edit.php处将GET的参数id改为不存在的文件名,会爆出物理地址。

} else if (isset($_GET['id'])) {
  $file_path = '../mc-files/posts/data/'.$_GET['id'].'.dat';
  
  $data = unserialize(file_get_contents($file_path));
  
  $post_id      = $data['id'];
  $post_state   = $data['state'];
  $post_title   = $data['title'];
  $post_content = $data['content'];
  $post_tags    = $data['tags'];
  $post_date    = $data['date'];
  $post_time    = $data['time'];
  $post_can_comment = isset($data['can_comment']) ? $data['can_comment'] : '1';
}

这里传参数id,前端会输出对应的id的文章内容,如果输入的id不存在则会报错,直接爆出物理地址。

cve-2018-10424.png

写在后面

我叫W4ngch3n,这是我第一次写博客,请多多指教~