作家
登录

Java反序列化漏洞从理解到实践

作者: 来源: 2017-09-28 12:06:00 阅读 我要评论

  • read: [blockdata 0x00: 2 bytes] 
  • read: nb.deser.HashRequest _h0x7e0002 = r_0x7e0000; 
  • //// BEGIN stream content output 
  • [blockdata 0x00: 4 bytes] 
  • [blockdata 0x00: 2 bytes] 
  • nb.deser.HashRequest _h0x7e0002 = r_0x7e0000; 
  • //// END stream content output 
  • //// BEGIN class declarations (excluding array classes) 
  • class nb.deser.HashRequest implements java.io.Serializable { 
  • java.lang.String dataToHash; 
  • java.lang.String theHash; 
  • //// END class declarations 
  • //// BEGIN instance dump 
  • [instance 0x7e0002: 0x7e0000/nb.deser.HashRequest 
  • field data: 
  • 0x7e0000/nb.deser.HashRequest: 
  • dataToHash: r0x7e0003: [String 0x7e0003: "test"
  • theHash: r0x7e0004: [String 0x7e0004: "098f6bcd4621d373cade4e832627b4f6"
  • //// END instance dump 
  • 大年夜这两个分析对象的输出中,我们起首可以确认的是,这段数据切实其实是序列化数据。其次,我们可以确认的是,客户端和办事器之寄┞俘在传输一个“nb.deser.HashRequest”对象。结合对象的输出结不雅以及前面的wireshark抓包数据,我们可知用户名以字符串情势存储在TC_BLOCKDATA类型中进行传输:

    1. TC_BLOCKDATA - 0x77 
    2. Length - 9 - 0x09 
    3. Contents - 0x000774657374696e67 
    4. '000774657374696e67'.decode('hex'
    5. '\x00\x07testing' 

    如今我们对DeserLab客户端与办事器之间的通信过程已经异常熟悉,接下来我们可以应用ysoserial对象来应用这个过程。

    根据pcap的分析结不雅以及序列化数据的分析结不雅,我们已经异常熟悉全部情况的通信过程,是以我们可以构建本身的python脚本,脚本中可以嵌入ysoserial载荷。为了保持代码的简洁,也为了匹配wireshark数据流,我决定应用类似wireshark数据流的方法来实现这段代码,如下所示:

    1. mydeser = deser(myargs.targetip, myargs.targetport) 
    2. mydeser.connect() 
    3. mydeser.javaserial() 
    4. mydeser.protohello() 
    5. mydeser.protoversion() 
    6. mydeser.clientname() 
    7. 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

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)