欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Java反序列化破绽漏洞bug从阐明到实战测试

来源:本站整理 作者:佚名 时间:2017-09-28 TAG: 我要投稿

一、媒介
在进修新事物时,咱们必要赓续提醒自己一点:纸上得来终觉浅,绝知此事要躬行。这也是为甚么咱们在学到常识后要付诸理论的缘故原由地点。在本文中,咱们会深入阐发人人异常认识的Java发序列化破绽漏洞bug。对咱们而言,最好的理论便是真正懂得手头节制的常识,并可以或许依据实际必要加以改进应用。本文的重要内容包含如下两方面:
1.    应用某个反序列化破绽漏洞bug。
2.    自己手动创立应用载荷。
更具体一点,起首咱们会应用现有工具来实际操纵反序列化破绽漏洞bug,也会说明操纵的具体寄义,其次咱们会深入阐发载荷相干内容,好比甚么是载荷、若何手动结构载荷等。实现这些步调后,咱们就可以充足懂得载荷的工作道理,将来碰着相似破绽漏洞bug时也能节制破绽漏洞bug的处置办法。
全部进程中必要用到的工具都邑在本文给出,但我倡议你先懂得一下这个工具:
https://github.com/NickstaDB/DeserLab
该工具包含咱们筹备理论的破绽漏洞bug。之以是抉择应用模仿破绽漏洞bug而不是实际目标,缘故原由在于咱们可以或许从各个方面节制这个破绽漏洞bug,是以也可以或许更好懂得反序列化破绽漏洞bug应用的工作道理。
二、应用DeserLab破绽漏洞bug
起首你可以或许先读一下Nick写的这篇文章, 文章中先容了DeserLab和Java反序列化相干内容。本文会具体先容Java序列化协定的具体细节。阅读完本文后,你应当可以或许自己搞定DeserLab情况。接下来咱们必要应用各类预编译jar工具,以是咱们可以或许先从Github上下载这些工具。如今筹备步入正题吧。
碰着某个成绩后,我平日的做法是先懂得目标的失常工作方法。对付DeserLab来讲,咱们必要做如下几件工作:
运转办事器及客户端
抓取通讯流量
懂得通讯流量
咱们可以或许应用如下敕令来运转办事器及客户端:
java -jar DeserLab.jar -server 127.0.0.1 6666
java -jar DeserLab.jar -client 127.0.0.1 6666
上述敕令的运转成果如下:
java -jar DeserLab.jar -server 127.0.0.1 6666
[+] DeserServer started, listening on 127.0.0.1:6666
[+] Connection accepted from 127.0.0.1:50410
[+] Sending hello...
[+] Hello sent, waiting for hello from client...
[+] Hello received from client...
[+] Sending protocol version...
[+] Version sent, waiting for version from client...
[+] Client version is compatible, reading client name...
[+] Client name received: testing
[+] Hash request received, hashing: test
[+] Hash generated: 098f6bcd4621d373cade4e832627b4f6
[+] Done, terminating connection.
java -jar DeserLab.jar -client 127.0.0.1 6666
[+] DeserClient started, connecting to 127.0.0.1:6666
[+] Connected, reading server hello packet...
[+] Hello received, sending hello to server...
[+] Hello sent, reading server protocol version...
[+] Sending supported protocol version to the server...
[+] Enter a client name to send to the server:
testing
[+] Enter a string to hash:
test
[+] Generating hash of "test"...
[+] Hash generated: 098f6bcd4621d373cade4e832627b4f6
上述成果并非咱们想要的信息,咱们想问的成绩是,这个情况若何实现反序列化功效?为了答复这个成绩,咱们可以或许应用wireshark、tcpdump或许tshark来捕获6666端口上的流量。咱们可以或许应用如下敕令,应用tcpdump来捕获流量:

tcpdump -i lo -n -w deserlab.pcap 'port 6666'
在承继阅读本文以前,你可以或许先用wireshark来阅读一下pcap文件。读完Nick的文章后,你应当曾经懂得今朝所处的状态,至多可以或许辨认出隐藏在流量中的序列化Java工具。

2.1 提取序列化数据
依据这些流量,咱们可以或许肯定的是网络中有序列化数据正在传输,如今让咱们来阐发哪些数据正在传输。我抉择应用SerializationDumper工具来剖析这些流量,这个工具属于咱们要用的工具集之一,感化与jdeserialize相似,后者属于驰名已久且尚能施展感化的老工具。在应用这些工具以前,咱们必要先筹备好待处置数据,是以,咱们必要将pcap转换为可待阐发的数据格局。

tshark -r deserlab.pcap -T fields -e tcp.srcport -e data -e tcp.dstport -E separator=, | grep -v ',,' | grep '^6666,' | cut -d',' -f2 | tr '\n' ':' | sed s/://g
这条敕令固然看起来很长,但至多能失常工作。咱们可以或许将这条敕令分化为更好懂得的子敕令,由于该敕令的功效是将pcap数据转换为颠末十六进制编码的一行输出字符串。起首,该敕令将pcap转换为文本,文本中只包含传输的数据、TCP源端标语和目标端标语:

tshark -r deserlab.pcap -T fields -e tcp.srcport -e data -e tcp.dstport -E separator=,
成果如下所示:
50432,,6666
6666,,50432
50432,,6666
50432,aced0005,6666
6666,,50432
6666,aced0005,50432
如上述成果所示,在TCP三次握手时代并无传输数据,是以你可以或许看到',,'如许一段文本。随后,客户端发送第一个字节,办事器前往ACK报文,而后再发还某些字节数据,以此类推。敕令的第二个功效是承继处置这些文本,依据端口和每行的开首部门来抉择输出适合的载荷:

| grep -v ',,' | grep '^6666,' | cut -d',' -f2 | tr '\n' ':' | sed s/://g
这条过滤敕令会将办事器的相应数据提取出来,假如你想要提取客户端数据,你必要转变端标语。处置成果如下所示:

aced00057704f000baaa77020101737200146e622e64657365722e486[...]
这些数据恰是咱们必要的数据,它将发送和接管数据以较为简练的方法表现出来。咱们可以或许应用后面提到的两个工具来处置这段数据,起首咱们应用的是SerializationDumper,而后咱们会再应用jdeserialize。之以是要这么做,缘故原由在于应用多个工具来处置同一个义务可以或许便于咱们阐发潜在的差错或成绩。假如你保持应用一个工具的话,你可以或许会不小心走进差错的死胡同。固然测验考试分歧的工具自己便是一件异常风趣的工作。

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载