JNDI 注入利用工具

介绍

本项目为 JNDI 注入利用工具,生成 JNDI 连接并启动后端相关服务,可用于 Fastjson、Jackson 等相关漏洞的验证。

本项目是基于 welk1n 的 JNDI-Injection-Exploit ,在此项目的基础服务框架上,重新编写了攻击利用代码,支持更多更强大的功能,并加入了多种方式进行回显的支持。

本项目为学习性项目,目前本人 Java 水平依然处于 hello world 的水平,建议各位师傅报着批判的眼光观看,不吝指导。QAQ

功能

本 工具 支持了利用 JNDI 注入构造多种恶意 payload,其中包括:

名称

功能

简介

BasicInfo

获取 服务器 基础信息

打印出 System.getProperties() 中的信息

Command

命令执行

反射调用 forkandexec 执行命令

DataSourceHack

获取Spring DataSource 明文

获取缓存在上下文中的 DataSource

DirList

目录遍历

使用 File 对象列目录

FileDelete

文件删除

使用 File 对象删除文件

FileRead

文件读取

使用 FileInputStream 读取文件

FileWrite

文件写入

使用 FileOutputStream 写文件

SQL Query

执行SQL语句

使用 JDBC 发出查询

SSRF

访问内网应用

发送 HTTP 请求,并将结果返回

对于具体功能的构建比较简单,几乎就是正常的功能性编程,只不过部分功能使用了反射,可能不易于阅读。

对这部分功能实现有疑问的同学可以在 Javasec 上找到相关的文章。

对于各项参数的配置使用了配置文件的方式,由于是在调用时会读取文件,并未将值进行缓存,所以可以随时修改配置文件中 payload 的值,无需重启服务。

除去基本功能,本工具加入了多种回显方式,使 JNDI 注入的结果能够返回,这样在研究或测试中可以更方便的看到结果,本攻击支持了如下回显方式:

名称

功能

简介

ExceptionEcho

报错回显

throw 一个异常,message 是我们执行的结果

OOBEcho

带外回显

向 dnslog 平台发送数据包携带执行结果

TomcatEcho

Tomcat 回显

通过 Tomcat 获取 response 将结果写入

WebLogicEcho

WebLogic 回显

通过 WebLogic 获取 response 将结果写入

有了这些功能,我们就可以把 JNDI 注入活活玩成 webshell。

使用

使用源代码执行:

下载项目源代码:

git clone git@github.com:JosephTribbianni/JNDI.git

执行 org.su18.server.ServerStart 的 main() 方法,可以在控制台中看到启动消息。

使用 jar 文件执行:

在 release 下载打包好的文件,解压压缩包,确保配置文件与 jar 文件位于同一目录下,请根据自定义需求修改端口号及其他配置项,运行 jar 文件:

java -jar JNDI-1.0-all.jar

查看生成的恶意类

可以使用 org.su18.asm.frame.Frame 类的 main() 方法生成 .class 文件进行查看。

执行后,会在项目根目录生成文件,使用任意手段 decompile 后可查看逻辑。

使用展示

这里利用 fastjson 结合 jndi 来进行部分功能使用展示:

命令执行 id :

基础信息:

获取 Spring 数据源信息:

对我电脑上的 /Users/phoebe/PycharmProjects 进行目录遍历:

文件读取 /etc/passwd

等等,剩余的就不展示了,自测吧。

上面使用了 TomcatEcho 进行回显,其他回显展示:

报错回显:

OOB 回显:

技术细节

服务端

服务器端完全基于原项目,未进行大改动,将服务监听端口加入了配置文件中,方便修改。

payload 细节

由于原项目仅执行了命令执行,并且是使用 Runtime.getRuntime.exec() 这种非常表面的接口调用,功能较为单一,且容易被防护阻断,因此这里我增加了多个功能模块,并对于多数模块,直接使用反射调用 native 方法执行功能,这可以在某种情况下完全绕过流量层或应用层的安全防护。对于其他功能则是正常的逻辑代码调用,基本不会触发任何规则。

回显细节

回显主要分为几类:

报错回显:直接抛出异常,这种方式能否回显完全取决于服务端对异常的处理情况。

OOB回显:这里使用了 ceye.io,由于这个域名可能会被各大安全防护产品拉入黑名单,所以可以寻找小众的 dnslog 平台或自行搭建。

response 回显:这里支持了 Tomcat 和 Weblogic 的回显,获取当前访问的 response 对象,并写回结果。

字节码拼接

在恶意类的字节码生成上,原项目使用编译好的 jdk7、jdk8 的 class 文件,使用 asm 加载并加入执行命令代码;本项目则直接使用 asm 完全生成类字节码。由于要实现模块化,这里设计了一个简单的代码结构:

public class Template {

private String result;

public Template() throw Exception{

// insert payload here

this.echo();

}

public void echo() throw Exception{

// how would you like to echo the result

}

}

由于 JNDI 注入的特性是会执行类的构造方法或 static 语句块,因此将恶意 payload 织入构造方法中,在执行完 payload 后,构造出响应的返回结果,放在 this.result 中,在构造方法的最后一行执行 this.echo() 方法,进行回显的逻辑。

未完成

由于时间有限,ASM 生成的代码十分简陋,后期会改为使用 AdviceAdapter 的 onMethodEnter、onMethodExit更优雅的生成代码。

由于 JNDI 注入本身需要出网,所以一些漏洞利用方式和回显方式显得有些鸡肋,后期会继续优化,添加新功能。

仅使用了 jdk 1.8 进行测试,部分利用代码“可能”使用了 1.8 之后的新特性,在低版本上可能失效。

加入 linux 文件描述符回显:本来想加的,根据几位师傅给出的思路经过了一下午的调试,还是没有做到通用有效的寻找文件描述符 id 的方法,后续有时间再弄吧。

参考文章

交流

Java 安全技术交流微信群: javasec ,请前往网站添加管理员微信邀请您入群。

Javasec 项目是由 安百科技 -凌天实验室 发起,是一个免费、开源的 Java Web 安全相关知识归纳总结、培训的项目,相关问题可以在交流群内提出讨论或 Github 上提出 issues。

java asm jndi_JNDI 注入利用工具相关推荐

  1. java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具

    JNDI 注入利用工具 介绍 本项目为 JNDI 注入利用工具,生成 JNDI 连接并启动后端相关服务,可用于 Fastjson.Jackson 等相关漏洞的验证. 本项目是基于 welk1n 的 J ...

  2. java asm jndi_JNDI-Injection-Exploit JNDI注入利用工具

    介绍 JNDI注入利用工具,生成JNDI链接并启动后端相关服务,可用于Fastjson.Jackson等相关 使用 可执行程序为jar包,在命令行中运行以下命令: $ java -jar JNDI-I ...

  3. Java ASM框架与字节码插桩的常见用法(生成类,修改类,方法插桩,方法注入)

    前言 ASM 是一款读写Java字节码的工具,可以达到跳过源码编写,编译,直接以字节码的形式创建类,修改已经存在类(或者jar中的class)的属性,方法等. 通常用来开发一些Java开发的辅助框架, ...

  4. java jmap 分析_利用java虚拟机的工具jmap分析java内存情况

    有时候碰到性能问题,比如一个java application出现out of memory,出现内存泄漏的情况,再去修改bug可能会变得异常复杂,利用工具去分析整个java application 内 ...

  5. 7. Vulnerability exploitation tools (漏洞利用工具 11个)

    Metasploit于2004年发布时,将风暴带入了安全世界.它是开发,测试和使用漏洞利用代码的高级开源平台. 可以将有效载荷,编码器,无操作生成器和漏洞利用的可扩展模型集成在一起,使得Metaspl ...

  6. SqlMap自动化SQL注入测试工具简绍

    Sqlmap是一个开源的渗透测试工具,可以自动检测和利用SQL注入漏洞并接管数据库服务器.它配备了强大的检测引擎,为终极渗透测试仪提供了许多小众功能,以及从数据库指纹识别,从数据库获取数据到访问底层文 ...

  7. Java反序列化漏洞通用利用分析

    2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic.WebSpher ...

  8. Lib之过?Java反序列化漏洞通用利用分析

    1 背景 2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来***最新版的WebLogic.We ...

  9. Diffblue Cover AI Java:Difflane如何利用Diffblue Cover AI实现Java自动化的单元测试

    Diffblue Cover AI实现Java自动化的;单元测试单元测试工具 基本概念 什么是Diffblue Cover? Diffblue Cover是一种自动化的单元测试编写工具.它分析您现有的 ...

最新文章

  1. LeetCode简单题之找出井字棋的获胜者
  2. 楚天高速拟12.6亿并购三木智能 涉足物联网领域
  3. Mybatis-sql语句的抽取
  4. Java编程中值得注意的对象引用现象
  5. Vue 组件间通信六种方式
  6. android同步服务启动失败,android – FirebaseCloudMessaging:FirebaseInstanceId后台同步失败 – SERVICE_NOT_AVAILABLE...
  7. 结对项目--wordCount
  8. @清晰掉 C++ 中的 enum 结构在内存中是怎么存储的?
  9. Cocos Creator 你不知道的细节
  10. 花了半个多小时,纯手点,为500多人点赞
  11. android 自定义地图标注,Android高德地图自定义Markers【原创】
  12. 故障:删除不存在的设备或完全卸载驱动程序
  13. WinZip 11 汉化注册版
  14. 沁恒CH573开发板上手
  15. multiwii 2.4配置中文注释
  16. 个人博客一文多发教程- OpenWriter管理工具基础使用方法
  17. 自己写strcmp( )函数
  18. ESP32 Ubuntu开发环境搭建
  19. Python开发实习心得~
  20. matlab自适应amc,自适应调制解调(ACM),Adaptive modulation and coding (AMC),音标,读音,翻译,英文例句,英语词典...

热门文章

  1. 组合导航的介绍和应用
  2. Java中空字符串与null的区别
  3. 如何将1寸证件照片改为两寸,如何调整证件照片背景?
  4. 项目整合管理——项目管理信息系统(新年快乐)
  5. Java工厂制造生产ERP系统源码springmvcssm+mybatis+mysql
  6. 记一次微信公众号后台数据抓取
  7. aws sqs php,AWS SQS实用代码PHP
  8. PyTorch 的 Autograd
  9. polkits存在内存泄漏现象
  10. Eclipse CDT 调试故障解决:Can't find resource for bundle java.util.PropertyResourceBundle