Web安全漏洞及代码审计(第2版):靶机反序列化漏洞与审计PPT教学课件.pptxVIP

  • 0
  • 0
  • 约5.39千字
  • 约 24页
  • 2026-01-22 发布于浙江
  • 举报

Web安全漏洞及代码审计(第2版):靶机反序列化漏洞与审计PPT教学课件.pptx

项目11

靶机反序列化漏洞与审计

Web安全漏洞及代码审计(第2版)(微课版);

01项目知识准备

漏洞介绍

当程序对用户输入的内容(不可信数据)进行反序列化处理时,攻击者可以通过构造恶意输入,利用反序列化产生非预期的对象,而非预期的对象在产生过程中就会造成反序列化漏洞。

基础知识

1.序列化与反序列化

在PHP中,可以通过序列化与反序列化很方便地进行对象的传递,轻松地存储和传输数据。从本质上来说,这并不存在安全隐患,但是由于用户可以控制输入的序列化内容,即用户可以传入恶意的序列化数据,因此程序在对恶意数据进行反序列化处理时就可能存在安全风险。常见的PHP序列化和反序列化方式主要包括使用serialize()、unserialize()、json_encode()、json_decode()等函数。;

这里需要强调的是_sleep()、_toString()和_wakeup()魔术方法。serialize()函数在对象被序列化之前会检查类中是否存在_sleep()魔术方法,如果存在,则会先调用该方法,再执行序列化操作,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则NULL会被序列化,并产生一个

E_NOTICE级别的错误。_toString()魔术方法是在一个对象被当作一个字符串使用时被调用的,如果该方法返回了字符串,则表明是该对象转换为字符串的结果,如果没有定义该方法,则该对象无法被当作字符串使用,此魔术方法也是比较常见的。unserialize()函数在反序列化之前会检查是否存在_wakeup()魔术方法,

如果存在,则会先调用_wakeup()魔术方法,并预先准备对象需要的资源,再返回void。_wakeup()魔术方法常用于反序列化操作中需要重新建立数据库连接或执行其他初始化操作的情况。;

01项目知识准备

基础知识

2.常用魔术方法

_construct()→/1-在对象被创健时触发

_destruct(→/·在对象被销毁时触发

_call()→→/·在对象上下文中调用不可访问的方法时触发_callStatic()·→//-在静态上下文中调用不可访问的方法时触发_get(→→//·用于从不可访问的属性中读取数据

_set()→→//·用于对数据写入不可访问的属性

_isset()→→/·在不可访问的属性上调用issetO或empty0函数时触发_unset()-→/·在不可访问的属性上调用unset(函数时触发?

_invoke()·→/·在脚本尝试将对象调用为函数时触发

_toString(→//·在把类当作字符串使用时触发

_sleep(-→/·在使用serialize()函数时触发

wakeup)→/I-在使用unserialize(函数时触发;

01项目知识准备

基础知识

3.构造POP链

面向属性编程(Property-OrientedProgramming)用于构造特定调用链,类似于二进制利用中的面向返回编程(Return-OrientedProgramming),二者都是先从现有运行环境中寻找一系列代码或指令调用,然后根据需求构造一组连续的调用链,在控制代码或程序的执行流程后,就能够使用这组调用链来执行一些操作。要想利用PHP的反序列化漏洞,需要满足两个条件:一个是可以控制传入unserialize()函数的参数;另一个是存在魔术方法和危险函数。反序列化漏洞就是程序在进行反序列化操作时执行魔术方法,导致魔术方法中的危险函数被执行而产生的漏洞。

在进行反序列化攻击时,如果需要利用的危险函数不在魔术方法中,而是在一个类的普通方法中,此时就需要构造POP链,寻找相同的函数名,将类的属性和敏感函数的属性联系起来。;

01项目知识准备

审计思路

在审计反序列化漏洞时

一般可以通过全局搜索_wakeup()和_destruct()等魔术方法追踪整个调用过程,判断反序列化数据是否可控,以及被利用的危险函数是否在魔术方法中执行。;

02任务1反序列化漏洞分析

任务目标

能够进行反序列化漏洞的分析

了解世界技能大赛中的网络安全项目和我国选手的参赛情况,弘扬劳动光荣、技能宝贵、创造伟大的时代风尚。

任务实施

1.serialize()函数;

02

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档