zoukankan      html  css  js  c++  java
  • unserialize3

    unserialize3

    看了很多博客,讲的跟哈麻批一样,有的在装杯,有的在不懂装懂有的在人云亦云,原理也是一些陈词滥调,各个参数的意思是什么也没说,让人无法深入且透彻了解,没有实质性的讲解,只为flag而flag,就是一垃圾
    下面我们来讲讲反序列化漏洞,先来了解对象,对象里面有属性和值,序列化就是只保留对象里面的属性和值,生成一段字符串如下:

    O:1:"S":1:{s:4:"test";s:4:"1234";}

    劳资是真的讨厌有些懂也懂鸡巴不到,还在那写writeup或者博客,你写你的博客呢,像这种:

    就是我说的典型的蛤蟆皮,对于一个没有接触过反序列化的人来说看了什么感受,而且他也没讲清楚绕过原理,就真是为了flag而flag

    就拿上述序列化后的字符串来说,依次表示为:

    O:1:"S":1:{s:4:"test";s:4:"1234";}
    O:代表对象
    1:对象名字长度为一个字符
    S:对象名
    1:一个变量
    s:数据类型
    4:变量名字符串长度
    test:变量名
    s:数据类型
    4:变量值字符串长度
    1234:变量值
    

    观察题中源码:

    class xctf{
    public $flag = '111';
    public function __wakeup(){
    exit('bad requests');
    }
    ?code=
    

    易知有一个变量flag,值为111
    还有一个wakeup()函数,触发返回bad requests,那么只需要改变表示变量个数的值不为真实变量的个数的值即可,如:

    O:4:"xctf":1:{s:4:"flag";s:3:"111";}必定触发bad requests

    将xctf后面的1(表示变量个数),改为2,或3,只要不是真实变量的个数的值,即1,都是可以的

    O:4:"xctf":2:{s:4:"flag";s:3:"111";}就可以了

    得到flag:cyberpeace{8f5f22ec383ef3eaf0c5e3861ec55725}

  • 相关阅读:
    [翻译] FreeStreamer 在线流媒体播放
    [转] 每个程序员都必须遵守的编程原则
    iOS7以下设备获取mac地址
    iOS中alloc与init
    ON、WHERE、HAVING的区别
    在SQL语言中,join什么时候用,什么时候不用啊?请高手举例解释一下。谢谢
    你能识别这些科技公司的真假logo吗?
    in 和 exist 区别
    union和union all的区别
    Mysql避免全表扫描sql查询优化 .
  • 原文地址:https://www.cnblogs.com/sillage/p/13929558.html
Copyright © 2011-2022 走看看