攻防世界unserialize3题解

首先看题目知道是一道反序列化的题,说实话对于我这种菜鸡也是有点难度,这篇文章也是给像我一样的菜鸡写的,听大佬说写文章也是一种学习方式就试一下各位大佬轻点

#1概述

1.首先说到反序列化在这里给大家提一嘴反序列化作用,压缩格式化储存在数据传输中会比较方便,我们把一个东西放在磁盘里我们要用的时候可以随时把他拿出来,无论什么时候调用都可以恢复原样,听大佬说是用来解决php对象传递的一个问题---php在执行结束后会将对象销毁,而下一个页面要用到刚刚销毁的对象就用不了了(此时下一个页面心中也许会有一万个草泥马奔腾而过)而你又不能不销毁他,不然对象占用的内存又不能释放出来,当 PHP 脚本创建一个对象,但在使用完毕后未及时销毁该对象,就会导致该对象所占用的内存无法释放,从而导致内存泄漏。所以就想出了一个办法,就是php序列化要用的时候就反序列化一样就可以了,口头化一点序列化就是把对象传化成可传输的字符串而反序列化就是将字符串还原成对象(就像乘法和除法一样是互相的逆运算)

至于对象是个什么东东,解释在这:https://www.php.cn/faq/485330.html

2.举个栗子

<?php
class chybeta{
var $test='guangdong';
}
$class1 = new chybeta; //这里就是创建一个对象啦
$class1_ser = serialize($class1);  //将这个对象序列化
print_r($class1_ser);
?>

结果就是输出将对象序列化后的可传输字符串

解释一下:

O:7:"chybeta":1:{s:4:"test";s:9:"guangdong";}

O是object对象的意思

7代表函数名有7个占位

chybeta是对象名

1代表有一个变量

s就是string字符串

3.魔法函数

常见的几个魔法函数:
        __construct()当一个对象创建时被调用

        __destruct()当一个对象销毁时被调用

        __toString()当一个对象被当作一个字符串使用

        __sleep() 在对象在被序列化之前运行

        __wakeup将在序列化之后立即被调用

当我们碰到这几个魔法函数就要好好想一下序列化和反序列化了,如果服务器能接收反序列化过的字符串,将其变量未经任何过滤放入到魔法函数中就容易存在漏洞

#2实战

拿到题目了就给了这个

class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=

让我们康康有什么不对劲的东西

看到了魔法函数wakeup()

__wakeup()漏洞:一个对象被序列化后如果其属性被修改就不会执行此函数

那么这道题的思路就出来了:将这个对象进行反序列化传值修改其属性就可以绕过了

<?php
class xctf{
    public $flag = '111';
    public function __wakeup(){
        exit('bad requests');
    }
}
$c new xctf();
print(serialize($c));
?>

得到输出,大括号前的1是属性的个数将其修改即可绕过__wakeup()使exit()不被执行

拿到flag

这道题利用的是反序列化的知识:当被反序列化的字符串对应的属性个数发生改变会使反序列化失效---__wakeup()不可执行,如果不将1改成2那么就直接调用__wakeup()从而返回bad requests

顺便提一嘴这是我自己创建的交流群,欢迎各位大佬和像我一样的小白进群交流

正在跳转icon-default.png?t=N7T8http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=6tbGG0yujcD27t_W-5dv4aHt0wKFamos&authKey=4Gzz03Keq%2BnT5ByxFnoBtRdmXfLcqMRm2y3QVbk3VOUNgeVkVWLIt96BRaVKN2h8&noverify=0&group_code=922397467

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值