当前位置: 首页 > news >正文

一些反序列化总结

1 反序列化漏洞原理

  	如果反序列化的内容就是那串字符串,是用户可以控制的(即变量的值),且后台不正当的使用了PHP中的魔法函数,就会导致反序列化漏洞,可以执行任意命令。Java 序列化指 Java 对象转换为字节序列的过程Java 反序列化指字节序列恢复为 Java 对象的过程Commons-collections 爆出第一个漏洞开始,Java 反序列化漏洞的事件就层出不穷在 Java 中,利用 ObjectInputStream 的 readObject 方法进行对象读取

2 jndi可以调用哪些协议

反序列化漏洞中一般调用 ldap 和 rmi

3 不安全的反序列化

  	攻击程序会尝试在不进行任何验证的情况下,对数据进行反序列化,不安全的反序列化会导致远程代码执行、重放攻击、注入攻击等。

4 反序列化漏洞有哪些

  	Weblogic反序列化漏洞/Jboss反序列化漏洞/nginx反序列化/Tomcat反序列化/shiro反序列化

5 java反序列化原理

  	把 AESkey 给硬编码到代码里,所以说可以通过爆破的方式找到 AESkey 然后自己构造一个恶意对象,base64 加密然后加载一个恶意对象。1. Java 序列化指 Java 对象转换为字节序列的过程2. Java 反序列化指字节序列恢复为 Java 对象的过程3. Commons-collections 爆出第一个漏洞开始,Java 反序列化漏洞的事件就层出不穷4. 在 Java 中,利用 ObjectInputStream 的 readObject 方法进行对象读取5. 可以深入了解 ysoserial 有哪些 gadgets

6 反序列化漏洞的魔法函数(魔术方法)

  	construct() /destruct() /sleep() /wakeup /toString /get(),set()/invoke()/call 和 callStatic

7 框架漏洞 - 反序列化

1、Shiro 反序列化原理
在Shiro框架下,用户登陆成功后会生成一个经过加密的Cookie。其Cookie的Key的值为RememberMe,Value的值是经过序列化、AES加密和Base64编码后得到的结果。
服务端在接收到一个Cookie时,会按照如下步骤进行解析处理:○ 检索RememberMe Cookie的值○ 进行Base64解码○ 进行AES解码○ 进行反序列化操作
在第4步中的调用反序列化时未进行任何过滤,进而可以导致出发远程代码执行漏洞。
由于使用了AES加密,成功利用该漏洞需要获取AES的加密密钥,在Shiro1.2.4版本之前AES的加密密钥为硬编码,其默认密钥的Base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,于是就可得到Payload的构造流程:
恶意命令-->序列化-->AES加密-->base64编码-->发送Cookie
目前官方通过去掉硬编码的密钥是的每次生成一个密钥来解决其漏洞,但可以通过搜索引擎等方式收集到不同的密钥,提高对该漏洞的利用成功率。

Shiro漏洞指纹:响应包中存在字段set-Cookie: rememberMe=deleteMe

2、你都复现过strust2哪些漏洞

S2-016 , S2-045 , S2-046 , S2-057
3、thinkphp 远程命令执行
thinkphp版本识别
ThinkPHP是一款基于PHP的开源框架,常用于Web应用程序的快速开发。版本识别是指根据程序的特征和版本信息来判断程序的版本。对于ThinkPHP,可以通过以下几种方式进行版本识别: 
1. 查看程序中的版本信息:在ThinkPHP的源代码中,可以找到版本号的定义,一般在ThinkPHP.php文件中。可以通过查看该文件来获取版本号。  
2. 检查文件名和目录结构:不同版本的ThinkPHP会有不同的文件名和目录结构,通过检查这些文件名和目录结构可以判断程序的版本。  
3. 分析程序的功能和特性:不同版本的ThinkPHP会有不同的功能和特性,通过分析程序的功能和特性可以判断程序的版本。  
4. 使用工具进行识别:一些工具可以自动识别程序的版本,例如WhatWeb、Wappalyzer等。这些工具可以通过检查页面源码、HTTP响应头等信息来判断程序的版本。 
在 cookie 字段有 remember me 等于 delete me 这么一个特征1、ThinkPHP3.2.x_assign方法第一个变量可控=>变量覆盖=>任意文件包含=>RCE2、thinkphp5 一种是因为Request类的method和__construct方法造成的,另一种是因为Request类在兼容模式下获取的控制器没有进行合法校验,我们下面分两种来讲,然后会将thinkphp5的每个小版本都测试下找下可用的payload。判断:看icon看报错
4、spring 远程代码执行
spring4shell
条件:
JDK 9+
直接或者间接地使⽤了Spring-beans包(Spring boot等框架都使用了)
Controller通过参数绑定传参,参数类型为非常规类型的对象(比如非String等类型的自定义对象)
Web应用部署方式必须为Tomcat war包部署
5、fastjson 原理
fastjson实现json对象与JavaBean对象的转换CVE-2017-18349即Fastjson1.2.24 反序列化漏洞RCE
漏洞出现在Fastjson autoType处理json对象时,没有对@type字段进行完整的安全性验证,我们可以传入危险的类并调用危险类连接远程RMI服务器,通过恶意类执行恶意代码,进而实现远程代码执行漏洞。判断:
判断fastjson框架
① burp插件自动扫描
② 在web页面抓包,GET改为POST,添加Content-Type:application/json,在发送一个{"test":",即可得到回显有fastjson字样
6、log4j2
一些组件
Spring-Boot-strater-log4j2
Apache struts2
Apache Solr
Apache Flink
Apache Druid
Elasticsearch
Flume
Dubbo
Redis
Logstash
Kafka
vmvare
是一个开源的日志记录组件
原理:该漏洞的主要原因是log4j在日志输出中,未对字符合法性进行严格的限制,执行了JNDI协议加载的远程恶意脚本,从而造成RCE
利用:Log4j2会做什么呢?首先会对该字符串进行解析,发现字符串包含:${},这个会被单独处理,然后再发现这是JNDI的扩展和LDAP协议,并且LDAP协议的地址在本地,要查找的name是exploit,最后调用具体的LDAP模块去请求响应的数据。最多是把该name的数据打印到日志中。但危险的在于:JNDI还支持一个叫命名引用(Naming References)的方式,可以通过远程下载一个class文件,然后下载后加载起来构建对象。
所以JNDI可以远程下载class文件来构建对象就是核心问题,有些时候Java对象比较大,直接通过LDAP存储不方便,就可以通过类似forward的方式不直接返回对象内容,而是告诉你对象属于那个Class以及这个Class的远程地址。
那么危险就来了,如果Class的远程下载URL指定的是一个黑客的服务器,并且下载的Class文件包含攻击代码,你的服务器就完犊子了。

相关文章:

  • C语言指针进阶之三——函数指针、函数指针数组、指向函数指针数组的指针
  • kali系统入侵电脑windows(win11系统)渗透测试,骇入电脑教学
  • diff命令详解
  • PalWorld/幻兽帕鲁Ubuntu 22.04 LTS 一键部署脚本
  • React中使用LazyBuilder实现页面懒加载方法一
  • 头歌C语言结构体
  • 【驱动】TI AM437x(内核调试-07):devmem2直接读写内存、寄存器,devkmem读取内核变量
  • Android 系统启动流程
  • 运维SRE-01 目录结构体系、find
  • Codeforces Round 921 (Div. 2)补题
  • ambari hdp 企业级安装实战
  • C语言之猜凶手
  • 04 Redis之命令(Hash型Value命令+List型Value命令+Set型Value命令+有序集合ZSET型Value命令)
  • MySQL必看表设计经验汇总-上(精华版)
  • Linux之常见的管理命令
  • 2017届校招提前批面试回顾
  • Debian下无root权限使用Python访问Oracle
  • HTTP 简介
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JDK 6和JDK 7中的substring()方法
  • JSONP原理
  • miaov-React 最佳入门
  • React的组件模式
  • SwizzleMethod 黑魔法
  • vagrant 添加本地 box 安装 laravel homestead
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 构造函数(constructor)与原型链(prototype)关系
  • 缓存与缓冲
  • 基于组件的设计工作流与界面抽象
  • 聊聊directory traversal attack
  • 目录与文件属性:编写ls
  • 浅谈web中前端模板引擎的使用
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 一道闭包题引发的思考
  • #Lua:Lua调用C++生成的DLL库
  • (07)Hive——窗口函数详解
  • (2022 CVPR) Unbiased Teacher v2
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (笔试题)合法字符串
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (论文阅读30/100)Convolutional Pose Machines
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)Android布局类型(线性布局LinearLayout)
  • (学习日记)2024.01.19
  • (转)C#调用WebService 基础
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @RestController注解的使用
  • @test注解_Spring 自定义注解你了解过吗?
  • [145] 二叉树的后序遍历 js
  • [AIGC 大数据基础]hive浅谈
  • [bbk5179]第66集 第7章 - 数据库的维护 03