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. [转发]Linux性能测试工具之Lmbench特性、安装及使用

    Linux性能测试工具之Lmbench特性.安装及使用2015年07月16日 10:13:48 Michaelwubo 阅读数:2466Linux性能测试工具Lmbench 是一套简易可移植的,符合A ...

  2. TrueCrypt与CryptSetup双系统全盘加密(图文)

    http://blog.topsec.com.cn/truecrypt%E4%B8%8Ecryptsetup%E5%8F%8C%E7%B3%BB%E7%BB%9F%E5%85%A8%E7%9B%98% ...

  3. 攻防世界(四)php_rce

    攻防世界系列:php_rce 1.打开题目 看到这个还是很懵的,点开任意连接都是真实的场景. 2.ThinkPHP5,这里我们需要知道它存在 远程代码执行的漏洞. ?s=index/\think\ap ...

  4. rsync+inotify实现全网自动化数据备份

    第1章 环境配置 实例1-1 服务器及IP主机名规划 已知 4 台服务器主机名主机对应信息见下表: 服务器说明 外网 IP(NAT) 内网 IP(NAT)  主机名 web服务器 10.0.0.7/2 ...

  5. Otter远程调试

    Otter远程调试 环境配置: 机器 172.16.0.2 172.16.0.3 172.16.0.4 ZK FOLLOWER FOLLOWER LEADER MySQL Manager MySQL ...

  6. Cron 定时任务命令-配置文件详解

    定时任务 定时任务的作用 1.系统级别的定时任务 ​ 临时文件清理 ​ 系统信息采集 ​ 日志文件切割 2.用户级别的定时任务 ​ 定时向互联网同步时间 ​ 定时备份系统配置文件 ​ 定时备份数据库的 ...

  7. Linux进阶之综合练习

    综合练习: 1.准备2台centos7系统的服务器,远程互相免密登录,以下所有题目过程中开启防火墙 2.给1号机和2号机使用光盘搭建本地yum源(永久生效) 3.给服务器1添加2块硬盘,1块1GB,1 ...

  8. Linux Access.conf安全配置

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

  9. kylin优化的思想

    kylin的核心优势在于使用额外的空间存储预计算的结果,以换取查询时间的缩减. 所以我们要对额外的空间进行优化,并且在空间优化之后,cuboid无法完全命中时,对查询时间进行优化. 空间优化的思路就是 ...

  10. 【Web前端HTML5&CSS3】11-定位

    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 定位的简介 1. 相对定位 偏移量(offset) 相对定位的特点 2. 绝对定位 绝对定位的特点 包含块(co ...