大年夜这两个分析对象的输出中,我们起首可以确认的是,这段数据切实其实是序列化数据。其次,我们可以确认的是,客户端和办事器之寄┞俘在传输一个“nb.deser.HashRequest”对象。结合对象的输出结不雅以及前面的wireshark抓包数据,我们可知用户名以字符串情势存储在TC_BLOCKDATA类型中进行传输:
- TC_BLOCKDATA - 0x77
- Length - 9 - 0x09
- Contents - 0x000774657374696e67
- '000774657374696e67'.decode('hex')
- '\x00\x07testing'
如今我们对DeserLab客户端与办事器之间的通信过程已经异常熟悉,接下来我们可以应用ysoserial对象来应用这个过程。
根据pcap的分析结不雅以及序列化数据的分析结不雅,我们已经异常熟悉全部情况的通信过程,是以我们可以构建本身的python脚本,脚本中可以嵌入ysoserial载荷。为了保持代码的简洁,也为了匹配wireshark数据流,我决定应用类似wireshark数据流的方法来实现这段代码,如下所示:
- mydeser = deser(myargs.targetip, myargs.targetport)
- mydeser.connect()
- mydeser.javaserial()
- mydeser.protohello()
- mydeser.protoversion()
- mydeser.clientname()
- mydeser.exploit(myargs.payloadfile)
在读完有关Java反序列化的几篇文┞仿之后(见本文的参考材料),我总结了两点思惟:
1、大年夜多半马脚都与Java对象的反序列化有关。
2、大年夜多半马脚都与Java对象的反序列化有关。
开个打趣罢了。所以如不雅我们检查办事器与客户端的信息交互过程,我们可以在某个处所找到Java对象的交换过程。我们很轻易就能在序列化数据的分析结不雅中找到这个目标,因为它要么包含“TC_OBJECT – 0x73”特点,要么包含如下数据:
大年夜以上输出中,我们可以看到流数据的最后一部分内容为“nb.deser.HashRequest”对象。攫取这个对象的地位恰是交换过程的最后一部分,这也说清楚明了为什么马脚应用函数位于代码的末尾。如今我们已经知道马脚应用载荷的存放地位,我们怎么样才能生成并发送载荷呢?
DeserLab本身的代码其实没有包含任何可应用的器械,具体原因下文会解释,如今我们只须要接收这个事实即可。这意味着我们须要查找其他法度榜样库,大年夜中发掘能赞助我们的代码。DeserLab仅仅包含一个Groovy库,这足以给我们足够多的提示来生成ysoserial载荷。在实际世比赛,我们往往须要亲自反汇编未知法度榜样库,才能寻找到有效的代码,这些代码也可以称为马脚应用的小对象(gadget)。
推荐阅读
「多体问题」(又叫 N 体问题)是看似简单,实际上在当今数学中极难霸占的问题。多体问题是指多个互相感化的实体。在物理学中,任何三体问题都没有一个封闭的情势或解析解(见:https://e>>>详细阅读
本文标题:Java反序列化漏洞从理解到实践
地址:http://www.17bianji.com/lsqh/37657.html
1/2 1