反序列化漏洞(例题 web unserialize3)(保姆级新手教程)(有些地方讲的不好不对,请批评指正)

首先这个题的题目为unserialize3,这个单词在php中代表反序列化,所以这个题基本就是和反序列化有关的题目。

其次看源码知道,要上传一个code的变量,我们可以猜想,用get方法上传code变量,其值为flag的序列化字符,然后网站反序列化得到flag。

 但是原代码中并没有序列化所以我们无法进行反序列化,所以我们需要添加一个序列化来将我们的变量变成字符串。

使用php运行在线工具:PHP 在线调试工具_在线测试工具 - IT屋 (it1352.com)

运行代码:

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

得到序列化后的flag 

O:4:"xctf":1:{s:4:"flag";s:3:"111";}                                   ①

我们不能直接反改序列化字符得到flag,因为看网站源码有--wakeup(),我们搜索,知道了,**__wakeup()**是PHP的一个魔法函数(一般魔法函数都以两条下划线开头),在进行unserialize反序列化的时候,首先查看有无该函数有的话,就会先执行他,从而直接结束程序输出 bad requests,所以我们要绕过--wakeup。

然后 重点来了 :

反序列化漏洞:根据漏洞(CVE-2016-7124)使序列化字符串中表示对象属性个数的值大于真实的属性个数,以此跳过__wakeup 的执行,达到绕过的目的。

根据本题我们得到的序列化字符串,看到标准的格式:O:<类名的长度>:“<类名>”:<成员属性的个数>:{S:…这里我们将属性个数由1改为2进行绕过。(类成员属性的个数的判断:class里定义了几个变量,就有几个类成员属性,所以我们由①式看到本题属性个数为1,我们改成2,或3或以上,就可以执行漏洞了

我们将   O:4:"xctf":2:{s:4:"flag";s:3:"111";}  放到URL中,得到flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值