Skip to content

Roboterh/JNDI-injector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JNDI-injector

这是一款GUI版的JNDI注入工具

参考了 JNDIExploit 项目的部分代码

支持的JNDI注入方式

远程恶意类加载

  1. Basic : 直接通过设置javaCodeBase属性值进行远程恶意类的加载 (利用要求很高)

反序列化攻击

  1. Deserialization : 通过设置javaSerializedData属性值为一个反序列化漏洞利用链的序列化数据,在进行ldap查询时进行反序列化攻击本地的Gadgets (要求本地存在可利用的反序列化漏洞)

本地可利用的Reference Factory

org.apache.catalina.users.MemoryUserDatabaseFactory

  1. Tomcat : 通过利用在Tomcat中存在的MemoryUserDatabaseFactory#getObjectInstance方法进行XXE漏洞的触发

org.apache.naming.factory.BeanFactory

限制条件:Tomcat < 10.1.0-M14, 10.0.21, 9.0.63, 8.5.79 (高版本移除了forceString的特性)

  1. TomcatCommonsConfiguration : 通过利用在Tomcat中存在的BeanFactory或者GenericNamingResourcesFactory配合CommonsConfiguration依赖利用SystemConfiguration#setSystemProperties进行系统属性的覆盖,进而能够再次使用Basic的方式进行JNDI注入
  2. TomcatEL : 通过利用在Tomcat中存在的BeanFactory类结合el-api依赖通过调用ELProcessor#eval执行任意javascript代码进行JNDI的注入
  3. TomcatGroovy : 通过利用在Tomcat中存在的BeanFactory类结合Groovy依赖,利用GroovyShell#evaluate / GroovyShell#parse / GroovyClassLoader#parseClass等多种方法进行任意的Groovy脚本的执行
  4. TomcatMVEL : 通过利用Tomcat中存在的BeanFactory类结合mvel依赖,利用ShellSession#exec方法执行任意的mvel表达式
  5. TomcatSnakeYaml : 通过利用在Tomcat中存在的BeanFactory类结合SnakeYaml依赖,利用Yaml#load进行任意的yaml脚本的执行(这里内置了动态修改Jar包的功能)
  6. TomcatXStream : 通过Tomcat中存在的BeanFactory类结合XStream依赖,利用XStream#fromXML方法进行任意的xml的加载,可以通过XStream的攻击方法进行注入

dbcp驱动 Factory

存在四类Factory

  1. dbcp1_tomcat: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory

  2. dbcp2_tomcat: org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory

  3. commons-dbcp2: org.apache.commons.dbcp2.BasicDataSourceFactory

  4. commons-dbcp1: org.apache.commons.dbcp.BasicDataSourceFactory

  5. TomcatOrDruidJdbc : 通过利用在dbcp-tomcat / commons-dbcp / tomcat-jdbc / druid等中存在的BasicDataSourceFactory / DruidDataSourceFactory等Factory类结合JDBC-driver进行特定的JDBC-attack

org.apache.naming.factory.ResourceFactory

  1. [TomcatTwiceInject]

支持的利用Payload

常见的Payload

特殊文件的指定

  • File : 支持在可以执行任意的脚本的使用使用在/data文件夹下的文件,进行特定的脚本文件执行(javascript代码 / Groovy脚本 / MVEL表达式 / yaml脚本 / 加载的xml文件)
  • JavaFile : 支持加载指定的.java内存马文件

内存马Payload

注意

在内存马中,涉及路由都是/shell,涉及传参都是cmdHeader头

  • TomcatEcho : 支持Tomcat的回显马注入
  • TomcatServlet : 支持Tomcat中间件在Servlet层的内存马注入
  • TomcatListener : 支持在Tomcat中间件在Listener层的内存马注入
  • TomcatFilter : 支持Tomcat中间件在Filter层的内存马注入
  • TomcatExecutor : 支持Tomcat中间件在Executor层的内存马注入
  • TomcatUpgrade : 支持Tomcat中间件在Upgrade层的内存马注入
  • TomcatValve : 支持Tomcat中间件在Valve层的内存马注入
  • TomcatWebsocket : 支持Tomcat中间件在Websocket层的内存马注入
  • SpringEcho : 支持Spring中间件的回显🐎的注入
  • SpringController : 支持Spring中间件在Controller层的回显🐎的注入
  • SpringInterceptor : 支持Spring中间件在Interceptor层的回显🐎的注入

Usage

GUI mode

首先在jar包的同级目录创建data文件夹,并复制本项目的data文件夹下内容

img.png

之后直接在图形化界面中进行目标环境的选择

  • 头部分别是ldap服务的ip地址,端口和对应的http服务的端口号
  • 中部从左到右分别是:JNDI注入方式的选择,对应Payload的选择, 特定参数的输入和对应的ldap查询链接的生成
  • 尾部是一些日志的输出(选用log4j)

Cli mode

添加cli标识启动Cli mode

java -jar .\JNDI-injector.jar cli -h

# start default
java -jar .\JNDI-injector.jar cli

之后使用GUI动态生成的Ldap Search Link进行相同的查询方式即可

Contributions

LeeH-money bro-xxxx

TODO

  1. 添加更多样化的内存马注入和注入方式
  2. 进行命令执行的优化(支持绕过RASP等防护)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages