码迷,mamicode.com
首页 > 其他好文 > 详细

XCTF unserialize3

时间:2020-04-03 11:52:37      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:ali   des   自动   wak   字符   否则   技术   img   根据   

一.根据题目猜测这道题应该和反序列化漏洞有关

  1.先了解一下什么是序列化和反序列化

  当在php中创建了一个对象后,可以通过 serialize() 函数把这个对象转变成一个字符串,保存对象的值方便之后的传递与使用。

  与 serialize() 相反的就是反序列化函数 unserialize() ,它可以将一个字符串转变为相对应的php对象。

  在序列化过程中会用到的函数:

  • __construct():当对象创建(new)时会自动调用。但在 unserialize() 时是不会自动调用的。(构造函数)
  • __destruct():当对象被销毁时会自动调用。(析构函数)
  • __wakeup():unserialize() 时会自动调用。
  • __sleep() 在对象被序列化之前运行。
  • __toString ()当一个对象被当作一个字符串使用。

  从序列化到反序列化这几个函数的执行过程是:

  先调用__construct()->__sleep->__wakeup()->__toString ()->__destruct()

  2.实验步骤:

  打开后通过代码发现是创建一个类

  public属性序列化后格式为:数据类型:属性名长度:"属性名";数据类型:属性值长度:"属性值"

  我们试着将其序列化:得到 O:4:"xctf":1:{s:4:"flag";s:3:"111";}

  技术图片

 

  wakeup()漏洞就是与整个属性个数值有关。

  当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过wakeup的执行。

  我们要反序列化xctf类的同时还要绕过wakeup方法的执行否则   将会输出bad requests

  我们构造 O:4:"xctf":2:{s:4:"flag";s:3:"111";}

  技术图片

 

  拿到flag。

 

  

 

XCTF unserialize3

标签:ali   des   自动   wak   字符   否则   技术   img   根据   

原文地址:https://www.cnblogs.com/darklee/p/12625292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!