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

寒假学web--day10

简介

一些高级的反序列化

phar反序列化

phar类似于java的jar包,将多个php文件合并为独立的压缩包,不用解压就能执行里面的php文件,支持web服务器和命令行

metadata

$phar->setmetadata($h);

metadata可以存放一个类实例,生成phar文件后,会把这个类实例以序列化字符串的形式存放至phar文件内

phar协议

phar://xxx.phar

当使用phar协议加载phar文件时,会自动反序列化这个类的的序列化字符串

生成phar包时,可以往metadata里面放对象,生成后,对象会自动序列化保存到ohar包中,使用phar协议读取phar包时,如果当前脚本识别了这个类,会自动调用这个类的魔术方法

可以触发phar反序列化的函数

include

file_exists

file_get_contents

file_put_contents

require

fileinode

filetime

filesize

is_dir

scandir

highlight_file   

通过phar协议包含phar文件,都可以触发phar反序列化

也可以在.user.ini文件里写auto_append_file=phar://xxx.phar

应用

要求:能够写phar包并上传,有可以利用的函数,并能控制协议头,使用phar协议解析,有可以利用的恶意类

首先利用脚本生成phar文件

如果有上传点,上传文件的前半部分可控,后缀有过滤,不能是php,phps,pthmml,ini但是没有禁止phar文件,我们找到大量使用的file_exits等文件读取函数,通过控制phar://头,来使用phar协议来解析phar包,就能自动进行反序列化

session反序列化

tips

php的session存放在文件中,默认位置是/tmp/sess_PHPSESSID

session可以是字符串,数字,也可以是对象,session里面存放对象时,会自动进行序列化,存放的是序列化后的字符串,session里面拿取对象时,会自动进行反序列化,执行对象的魔术方法

session序列化处理器

不同session序列化处理器的处理方式不同

php处理器

通过|分割类和key

u|O:4:"user":2:{s:8:"username";N;s:8:"password";N;}

u表示session的key,后面的表示类

php_serialize处理器

用数组存session的key和类

a:1:{s:1:"u";O:4:"user":2:{s:8:"username";N;s:8:"password";N;}}

应用

如果我们使用php_serialize处理器,并给username赋值

admin|O:4:"user":2:{s:8:"username";N;s:8:"password";N;}

此时session里存放的内容就会变成

a:1:{s:1:"u";O:4:"user":2:{s:8:"username";s:57:"admin|O:4:"user":2:{s:8:"username";N;s:8:"password";N;}";s:8:"password";N;}}

这是虽然没有逃逸出来,但是如果我们换成php处理器,并使用相同的cookie来访问,php从session文件里拿取这个对象时,就会认为|左边的时key,将右边的对象反序列化

这是存取的处理器不一致导致的漏洞

构造pop链并上传

我们分析类,得出读flag的payload

我们可以利用PHP的强制文件上传来上传我们构造的payload,我们可以上传文件上传的进度PHP_SESSION_UPLOAD_PROGRESS

需要写脚本,我们给PHP_SESSION_UPLOAD_PROGRESS上传进度值,123(任意数字),然后上传一个文件,filename为payload,内容随意

前面我们了解到强制上传的文件会存到临时的session文件里,由于开启了session,写进去后,当我们用相同的cookie再去访问时,服务器就会从我们刚刚的session文件里解析我们的payload,就会反序列化里面的内容,从而触发魔法函数

http://www.lryc.cn/news/527632.html

相关文章:

  • 【全栈】SprintBoot+vue3迷你商城(9)
  • 系统思考—问题分析
  • 系统架构设计师教材:信息系统及信息安全
  • 美国三种主要的个人数据产业模式简析
  • js手撕 | 使用css画一个三角形 使用js修改元素样式 驼峰格式与“-”格式相互转化
  • 每日一道算法题
  • 低代码系统-产品架构案例介绍、明道云(十一)
  • 论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(三)
  • 利用机器学习创建基于位置的推荐程序
  • 每日一题 429. N 叉树的层序遍历
  • AIP-132 标准方法:List
  • CSAPP学习:前言
  • 【统计的思想】假设检验(二)
  • KNN算法学习实践
  • 数据可视化的图表
  • 动手学深度学习-卷积神经网络-3填充和步幅
  • 【JS|第28期】new Event():前端事件处理的利器
  • Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)
  • 【Spring】Spring启示录
  • ospf动态路由配置,cost路径调整,ospf认证实验
  • 在Rust应用中访问.ini格式的配置文件
  • 批量处理多个模型的预测任务
  • Java 编程初体验
  • element-plus 的table section如何实现单选
  • 【JavaEE进阶】图书管理系统 - 壹
  • 牛客周赛 Round 77 题解
  • Mybatis配置文件详解
  • 《深度揭秘:TPU张量计算架构如何重塑深度学习运算》
  • Java基础知识总结(二十二)--List接口
  • [STM32 - 野火] - - - 固件库学习笔记 - - -十二.基本定时器