pikachu-反序列化

PHP反序列化概述

在理解这个漏洞前,你需要先搞清楚php中serialize(),unserialize()这两个函数。
序列化serialize()
序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:
class S{
public $test=“pikachu”;
}
s = n e w S ( ) ; / / 创建一个对象 s e r i a l i z e ( s=new S(); //创建一个对象 serialize( s=newS();//创建一个对象serialize(s); //把这个对象进行序列化
序列化后得到的结果是这个样子的:O:1:“S”:1:{s:4:“test”;s:7:“pikachu”;}
O:代表object
1:代表对象名字长度为一个字符
S:对象的名称
1:代表对象里面有一个变量
s:数据类型
4:变量名称的长度
test:变量名称
s:数据类型
7:变量值的长度
pikachu:变量值

反序列化unserialize()

就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。
$u=unserialize(“O:1:“S”:1:{s:4:“test”;s:7:“pikachu”;}”);
echo $u->test; //得到的结果为pikachu
序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题
常见的几个魔法函数:
__construct()当一个对象创建时被调用

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

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

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

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

漏洞举例:

class S{ 
var $test = "pikachu"; 
function __destruct(){ 
echo $this->test; 
} 
} 
$s = $_GET['test']; 
@$unser = unserialize($a); 
payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";} 

源码:
在这里插入图片描述

php代码执行:
源码
在这里插入图片描述

执行后
在这里插入图片描述

利用php构造一个payload:

O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

提交:
在这里插入图片描述

ctf.php:

在这里插入图片描述

构造PHP函数:<?php $key='hahaha'; echo serialize($key); ?>

payload:s:6:“hahaha”;
str为接口故链接:http://127.0.0.1:8088/ctf/ctf.php?str=s:6:“hahaha”;
在这里插入图片描述

ctf2.php

(hint为提示):
在这里插入图片描述

cookie为ISecer,构造PHP函数:<?php$key='ISecer:www.isecer.com';echo serialize($key);?> s:21:"ISecer:www.isecer.com";

详情(从网上看的):

这段代码会取回 cookie 的值,unserialize 函数是对单一的已序列化的变量进行操作,将其转换回 PHP 的值。也就是说 unserialize 函数出现的地方是解题的关键,如果变量 cookie反序列化的结果和������反序列化的结果和KEY 变量完全相同,就会显示 flag。因此我们需要传递一个名为 ISecer 的 cookie,里面的值应该是 $KEY 变量序列化后的结果。
注意这个时候我们并没有定义名为 KEY 的变量,因此这个变量的值应该是 NULL

可以得到 NULL 序列化后为“s:0:“”;”,注意此时分号不可省略,但是提交时会被忽略,需要使用分号的 URL 编码 “%3b”来替代。此时可以直接用 HackBar 提交 cookie,也可以用 Burp 改 Cookie 字段提交获得 flag

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值