首页 > 编程语言 >WEB漏洞—反序列化之php&java(上)

WEB漏洞—反序列化之php&java(上)

时间:2023-07-29 15:12:19浏览次数:35  
标签:__ WEB 调用 java 函数 触发 echo 序列化

PHP 反序列化原理:

---未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL 注入,目录遍历等不可控后果。

---其实跟文件解析差不多,都是由于传递的恶意参数被执行(序列化和反序列化相当于加解密过程)

---在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。

---序列化函数:serialize() //将一个对象转换成一个字符串

---反序列化函数:unserialize() //将字符串还原成一个对象

触发:unserialize 函数的变量可控,文件中存在可利用的类,类中有魔术方法:

参考:https://www.cnblogs.com/20175211lyz/p/11403397.html

__construct()    //创建对象时触发
__destruct()     //对象被销毁时触发
__call()             //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get()             //用于从不可访问的属性读取数据
__set()             //用于将数据写入不可访问的属性
__isset()         //在不可访问的属性上调用 isset()或 empty()触发
__unset()         //在不可访问的属性上使用 unset()时触发
__invoke()         //当脚本尝试将对象调用为函数时触发

反序列化本地测试

1.序列化

#本地代码

#序列化后的格式

#本地测试结果:s代表数据类型,即string类型,9代表长度,"zhixiaoxi"代表变量名

2.反序列化

#本地代码

#反序列化结果

 3.有类测试

<?php
	class ABC{
    public $test;
    function __construct(){
        $test = 1;
        echo '调用了构造函数<br>';
    }//创建对象时触发
    function __destruct(){
        echo '调用了析构函数<br>';
    }//对象销毁时触发
    function __wakeup(){
        echo '调用了苏醒函数<br>';
    }//反序列化会检测是否存在wakeup方法,存在则优先调用,为对象准备资源
}
echo '创建对象a<br>';
$a = new ABC;
echo '序列化<br>';
$a_ser=serialize($a);
echo '反序列化<br>';
$a_unser=unserialize($a_ser);
echo '对象快要死了!';
?>

运行结果
创建对象a
调用了构造函数
序列化
反序列化
调用了苏醒函数
对象快要死了!调用了析构函数
调用了析构函数

“调用了构造函数”是$a = new ABC;触发了函数function __construct(){
        $test = 1;
        echo '调用了构造函数<br>';
    }

代码执行的结果

“调用了苏醒函数”是$a_unser=unserialize($a_ser);触发了函数 function __wakeup(){
        echo '调用了苏醒函数<br>';
    }

代码执行的结果

 

标签:__,WEB,调用,java,函数,触发,echo,序列化
From: https://www.cnblogs.com/Zx770/p/17589817.html

相关文章

  • 基于java实现的会展中心管理系统
    完整资料进入【数字空间】查看——搜索"writebug"1系统设计1.1设计目标在学习了数据库原理和SQLServer2008数据库管理系统后,采用Java编程语言开发工具,设计并实现会展中心管理系统。本课程的目的是培养学生数据库技术的综合应用能力,通过设计开发一个小型的数据库管理系统,将原理与......
  • JavaScript学习 -- SM3算法基本原理
    SM3算法是一种由国家密码管理局发布的哈希算法,被广泛用于数字签名和消息认证等应用中。在JavaScript中,我们可以使用第三方库来计算数据的SM3哈希值。本篇文章将介绍SM3算法的基本原理和相关技术,并提供一些实例来演示如何在JavaScript中使用SM3算法。SM3算法基本原理与MD5、SHA-1、S......
  • Web开发者不容错过的10个HTML5工具
    HTML5已经成为当今世界的一个必然组成部分。由于WorldWideWeb万维网是使用超文本标记语言来架构和呈现的,于是HTML5成为了最流行的编程语言之一。随着网络的不断扩张,Web开发人员非常有必要拥有最新的HTML5工具,用于创建动态和交互式的Web应用程序和网页。下面这些就是你不应该错过......
  • ESP32连接云服务器【WebSocket】
    ESP32连接云服务器【ESP32+宝塔面板】......
  • Java设计模式-策略模式
    简介策略模式是指有一定行动内容的相对稳定的策略名称,策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法经验总结抽象策略角色:策略类,通常由一个接口或者抽象类实现具体策略角色:包装了相关的算法和行为环境角色:持有一个策略类的引用,最终给客......
  • javascript数据类型详解
    文章和代码已经归档至【Github仓库:https://github.com/timerring/front-end-tutorial】或者公众号【AIShareLab】回复javascript也可获取。数据类型JavaScript是一种弱类型或者说动态语言。不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。varage=10;//数字型v......
  • 设计模式-备忘录模式在Java中使用示例-象棋悔棋
    场景备忘录模式备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,当前很多软件都提供了撤销(Undo)操作,其中就使用了备忘录模式。备忘录模式结构图 在备忘录模式结构......
  • CTFer成长记录——CTF之Web专题·攻防世界—fileinclude·好多文件呀
    一、题目链接https://adworld.xctf.org.cn/challenges/list二、解法步骤  WRONGWAY!<?phpinclude("flag.php");highlight_file(__FILE__);if(isset($_GET["file1"])&&isset($_GET["file2"])){$file1=$_GET["file1"......
  • CTFer成长记录——CTF之Web专题·攻防世界—easyupload
    一、题目链接https://adworld.xctf.org.cn/challenges/list二、解法步骤  这题一道文件上传题,本题考的是利用.user.ini文件的特性,实现任意命令执行。在测试该文件上传是白名单还是黑名单,我们可以随便上传一个文件后缀,只要不通过就是白名单检测。.user.ini。它比.htacces......
  • 设计模式-中介者模式在Java中使用示例-客户信息管理
    场景欲开发客户信息管理窗口界面,界面组件之间存在较为复杂的交互关系:如果删除一个客户,要在客户列表(List)中删掉对应的项,客户选择组合框(ComboBox)中客户名称也将减少一个;如果增加一个客户信息,客户列表中需增加一个客户,且组合框中也将增加一项。中介者模式概述如果在一个系统......