ctf通关录

ctf通关录-Web_php_unserialize

打开题目所在的网页:(做ctf题时最喜欢有源码了)
在这里插入图片描述
简单分析一下

首先一个Demo类,类里面定义了私有属性file值,然后构造函数把值赋值给当前的对象的,然后析构函数会执行highlight_file这个函数,这个函数就是打印输出指定文件的代码,然后还有个__wakeup方法,会被当前对象file属性重新赋值成index.html
然后就是GET接受传递进来的Var参数值,再base编码,然后再正则匹配。这里匹配 O:数字 C:数字这类都给你打印STOPhacking,然后没有匹配到就会反序列化

逻辑大概就这样的:很简单!
说一下在这个类中反序列化中方法执行的顺序吧,首先构造函数=》__wakeup函数=>析构函数

其实反序列化其实别没有那么难,你得了解原理,然后构造exp生成poc才会理所当然!

先看看我的exp吧

<?php

class Demo {
    private $file = 'fl4g.php';
}
$ctf = new Demo();
$b = serialize($ctf);
//string(49) "O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}"
$b = str_replace('O:4', 'O:+4',$b);//绕过preg_match
$b = str_replace(':1:', ':2:',$b);//绕过wakeup
echo base64_encode($b)
?>

网上很多师傅会把整个类写进去,然后构建对象,然后反序列化,其实构造exp时,类中的方法时多余的,因为序列化并不会把方法也存储进去,只会存储类的属性和值,所有只需要写上属性就可以

然后重点来了,反序列漏洞的实质,讲讲在下对此漏洞的理解
我们看一下序列化的字符串O:4:“Demo”:1:{s:10:“Demofile”;s:8:“fl4g.php”;}
类名:Demo 属性:Demofile 值:flag.php

当服务器端接受到这个字符串然后反序列时就会检查,会发现是Demo这个类,那么服务器就看自己的类有没有Demo这个类,刚好,有,然后他就会以自己Demo的方法类来反序列化。

这里就是漏洞的根本所在,服务器会傻乎乎的把自己的类来给攻击者用,攻击者也就利用服务器中的类来达到目的

所有我们也就是利用这点来执行某些特定的攻击,这就是我的理解,我觉得比网上的那些要易懂一些。

那么怎么达到攻击目的?

控制类中方法的执行流程

就拿此次题目来说,我们构建好了序列化的字符串传入进去,然后反序列化。
构造函数=》__wakeup函数=>析构函数 然后执行结果你会发现还是index.html这个网页
因为__wakeup这个方法执行了,把对象中的file属性值又变回index.html

所有我们要想法跳过这个方法,怎么跳过嘞
SugarCRM v6.5.23 PHP反序列化 对象注入漏洞 这个漏洞会帮助我们跳过__wakeup方法

当序列化字符串中的属性个数大于实际类属性的个数,在反序列化时就会跳过__wakeup方法

还有个问题就是怎么绕过正则匹配?
因为正则匹配这样的字符

O:数字

这写死了,也给我们提供绕过的可能。0:+4这样就不会被匹配了,也不影响反序列

最好把序列化的字符串base64编码一下就好

然后顺利拿到Flag
在这里插入图片描述

如有不对,请指出!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0XAXSDD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值