记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

网站安全攻防实例_使用反序列化漏洞干掉你的JMS

2016-11-23 01:50

Java反序列化漏洞大家应该都非常熟悉了,想必大家手里都有各种各样的利用这类漏洞的工具。其被称为是2015年被低估的“破坏之王”可见其影响之大。Java反序列化漏洞的成因和PHP反序列化漏洞的成因差不多,都是由于程序接收不可信的序列化数据后直接将其反序列化导致的。这又印证了那句老话:一切的输入都是有害的。

Java序列化与反序列化

Java中可以将对象序列化为字节流来方便对象的传输。在Java中很多地方都会用到对象序列化这种技术,我想这大概是Java反序列漏洞危害那么大的一个原因之一吧。在Java中有很多的看似与序列化没关系的东西都使用了序列化。比如一下的一些流行的协议,他们都是基于Java序列化的。

 

\

 

这样也就暴露很多潜在的攻击面。Java中只有实现了java.io.Serializable 或者 java.io.Externalizable接口的类才能被序列化和反序列化.能够被反序列的类通过使用 java.io.ObjectOutputStream 将对象转换为字节流,在通过使用 java.io.ObjectInputStream 将字节流反序列化为对象。而漏洞就发生在将输入的字节流反序列化为对象这一步。和 PHP 的反序列漏洞利用基本一致。我们能控制的有对象的属性,在Java反序列对象的过程中有一些 魔术方法会被调用比如 readObject() readResolve()等。如果某个可被反序列化的类实现了上述的某个方法,我们就有可能可以做到一些有趣的事情。下面来一个简单的Demo加深下理解。假设存在下面这样一个可被反序列化的类,同时该类在程序当前类路径中。


public class Gadget0 {

public String command;

protected void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {

stream.defaultReadObject();

Runtime.getRuntime().exec(command);

}

}

可以看到该类实现了 readObject 方法,在该方法中又调用了Runtime.getRuntime().exec(command) 来执行一条系统命令,其参数为类的一个属性值,而属性值是我们可控的所以我们就能实现一个代码执行了。当然现实中并没有这么直接,而是需要许多条件的,需要利用一些gadgets构造POP链实现一些有趣的事.如果目标应用使用了一些具有漏洞的库那就很简单了,直接上神奇Ysoserial生成payload发送给应用反序列化可以干掉它喽。就像这样

 

\

 

Java消息服务(Java Message Service)

Java 消息服务(Java Message Service,JMS)应用程序接口是一个Java 平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。下面来看看支持JMS的产品。

 

\

 

可以看到JMS这个东西还是很受欢迎的。下面看看JMS的一个基础的运行流程是怎么样的。

 

\

 

其中主要的组成部分有一些几点。

1. JMS Broker :一般作为一个独立的服务运行,用来接受JMS的连接,并存储和分发消息.可以使用任何语言来实现。

2. JMS Client: 与Broker交互,生产者/消费者模型,即一个客户端提交消息,一个客户端获取消息

3. Connect : 使用一些特定的协议通信。

4. Session: 仅仅在需要管理时使用。

知识来源: www.2cto.com/article/201611/569767.html

阅读:78500 | 评论:0 | 标签:漏洞

想收藏或者和大家分享这篇好文章→复制链接地址

“网站安全攻防实例_使用反序列化漏洞干掉你的JMS”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云

本页关键词