欢迎访问本站!

首页科技正文

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理

admin2021-08-10247安全技术WEB安全

SerializationDumper工具可以把工具序列化流以更利便阅读的花样显示出来,用来查看工具序列化流。在用SerializationDumper工具查看ysoserial URLDNS天生的工具序列流时,若是不领会Java工具序列化流花样语法,流中的部门内容很难看明了什么意思。本文主要先解说Java工具序列化流花样语法,以更好地明白SerializationDumper的输出,彻底读懂工具序列化流内容。然后对ysoserial URLDNS天生的工具序列化流举行剖析。

先从一个最简朴的Person类工具,被序列化后,使用SerializationDumper查看工具序列化流的内容最先。

Person类内容
usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第1张

序列化一个person工具,把工具序列化流写入到一个文件中保留。
usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第2张

person.ser是个二进制文件,用记事本直接打开会乱码。使用SerializationDumper查看剖析保留在person.ser文件中的工具序列化流。

java -jar SerializationDumper-v1.13.jar -r person.ser

此处为了阅读利便,直接把SerializationDumper的输出效果保留到一个txt文件中。person工具被序列化后,保留在序列化流中的内容如下
usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第3张
大致可以看出,工具序列化流内容有两部门,一部门类形貌,一部门是工具的数据,类字段的值。

0x1 Java工具序列化流花样

1) stream

stream:
    magic version contents

一个工具序列流内容由3部门组成,第一部门magic,第二部门version,第三部门contents。magic和version都是常量,牢固稳定。Magic,解释内容类型,类似Gif图片开头是GIF89a。

STREAM_MAGIC - 0xac ed
STREAM_VERSION - 0x00 05

STREAM_MAGIC与STREAM_VERSION等常量值都在ObjectStreamConstants接口中界说。

2) contents

contents:
  content
  contents content

流中contents部门可能由一个content组成,或者两个甚至多个content组成。

3) content

content:
  object
  blockdata

一个content可以是一个工具(object),也可以是一个数据块(blockdata)。

4) object

object:
  newObject
  newClass
  newArray
  newString
  newEnum
  newClassDesc
  prevObject
  nullReference
  exception
  TC_RESET

工具序列化流中的"工具"与Java中的工具观点有些不一样。工具序列化流中的"工具"分为上面那些种,最常见的是newObject、newString、newClassDesc。

newString示意一个字符串工具,如"matt daemon"。newClassDesc示意ObjectStreamClass类的工具,可以简朴明白为类的形貌工具。newClass示意Class类工具,如person.class工具,就是Class类的一个实例工具。newObject示意一个通俗的工具,若是一个工具不是其他几种类型的工具(如newString、newClassDesc、newClass等),就归到newObject,如person工具。

为什么工具序列化流中要分出这些类型的工具?由于这些差别类型的工具,在序列化流中的示意花样差别。

newString

字符串工具在流中的示意花样:

newString:
  TC_STRING newHandle (utf)

TC_STRING是一个常量值,下面的TC_OBJECT与TC_TC_CLASSDESC等常量值都在ObjectStreamClass接口中界说。newHandle是句柄值,一个工具有一个句柄值,类似工具的ID。

在person.txt中有这么一段,可以看出这示意是一个"matt daemon"字符串工具,句柄值是0x00 7e 00 03。Length示意后面的字节长度,Value保留字符串内容。
usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第4张

person.txt中另有一个"Ljava/lang/String"字符串工具,句柄值是0x00 7e 00 01。
usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第5张

newClassDesc

newClassDesc示意一个ObjectStreamClass工具。ObjectStreamClass工具保留了类名、序列化ID、类字段等信息。可以行使反射,通过ObjectStreamClass工具建立一个其中保留类名对应的工具。
usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第6张

newClassDesc工具在流中的示意花样。

newClassDesc:
  TC_CLASSDESC className serialVersionUID newHandle classDescInfo

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第7张

classDescFlags部门,常见有以下两种取值

0x02 - SC_SERIALIZABLE
0x03 - SC_WRITE_METHOD | SC_SERIALIZABLE

0x02示意被序列化工具的类实现了Serializable接口。0x03示意被序列化工具的类实现了Serializable接口,还实现了writeObject()方式。由于此处Person类实现了Serializable接口,但没有实现writeObject()方式,以是取值是0x02 - SC_SERIALIZABLE

classAnnotations部门的内容是由ObjectOutputStream的annotateClass()方式写入的。由于annotateClass()方式默认什么都不做。以是classAnnotations一样平常都是TC_ENDBLOCKDATA。

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第8张

superClassDes部门。若是被序列化工具的类,若是其父类没有实现Serializable接口,这个地方就是TC_NULL,示意空工具。若是其父类实现了实现了Serializable接口,那此处会写入其父类对应的ObjectStreamClass工具,即类形貌工具。由于Person类没有父类,以是此处是TC_NULL。

newObject

newObject示意一个通俗的工具,如person工具,即不是newClassDesc工具(ObjectStreamClass工具),也不是Class工具,也不是String等工具。一个通俗的工具在流中的示意花样如下

newObject:
  TC_OBJECT classDesc newHandle classdata[]  // data for each class

classDesc部门,就是上面指的newClassDesc工具。newHandle是newObjec工具的句柄值。

若是被序列化工具的类没有实现writeObject()方式,classsdata部门只会有个values部门,包罗字段数据。

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第9张

,

皇冠体育APP

:www.huangguan.us是一个开放皇冠代理APP下载、皇冠会员APP下载、皇冠线路APP下载、皇冠登录APP下载的平台,皇冠体育APP上最新登录线路、新2皇冠网址更新最快,皇冠体育APP开放皇冠会员注册、皇冠代理开户等业务。

,

若是被序列化工具的类有实现writeObject()方式,classdata部门,除了有原来的values,还会多出个objectAnnotation部门。
若是writeObject()方式内只是挪用defaultWriteObject()方式写入工具字段数据。

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第10张

流中会多出这样一段数据。

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第11张
若是writeObject()方式内除了挪用defaultWriteObject()方式写工具字段数据。还往流中写入自界说数据。

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第12张

流中会多出这样一段数据

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第13张

5) blockdata

若是往流中写入不是工具,是基础数据类型的数据,如整数、浮点数等,会在流中使用blockdata花样举行示意。

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第14张

blockdata示意这个地方放的是一个数据块,若是数据块小,就会用blockdatashort花样。若是数据块大,就会用blockdatalong花样示意。TC_BLOCKDATA示意后面是一个数据块,数据块巨细是size个字节,再后面size个字节就是数据块的内容。

上面例子中的一个blockda数据块。
usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第15张

6) handle

Each object written to the stream is assigned a handle that is used to refer back to the object. Handles are assigned sequentially starting from 0x7E0000. The handles restart at 0x7E0000 when the stream is reset.

handle示意句柄的意思。工具序列流中每一个工具都有个句柄值。当一个工具第一次泛起写入流中,会使用newHandle给这个工具分配一个句柄值。若是这个工具第二次写入了流中,只会写入之前该工具的句柄值。

authority字段值是"bezfdp.dnslog.cn"字符串工具,这个字符串句柄值是0x00 7e 00 05。host字段也是这个字符串,以是host这个地方直接写入句柄值0x00 7e 00 05。
usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第16张

流中写入的第一个工具的句柄值是0x7E0000,之后每往流中写入一个新的工具,新的工具句柄值会在原来的句柄值上加1。

有兴趣的可以继续去剖析ysoserial URLDNS天生工具序列化流。

ysoserial URLDNS 天生的工具序列化流内容剖析

天生攻击paylaod,保留到urldns.ser文件中

java -jar ysoserial.jar URLDNS http://m2p55h.dnslog.cn > urldns.ser

用SerializationDumper查看其工具序列化流内容。

java -jar SerializationDumper-v1.13.jar -r urldns.ser

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第17张

从整体上看ysoserial URLDNS payload往工具序列化流中写入的是一个HashMap工具。流中HashMap工具工具有2个字段。

loadFactor = 1.06115891E9f
threshold = 12

这2个字段都是类中界说的默认值,跟反序列化破绽行使没有关系。简朴明白,HashMap类维护了一个数组,当数组中保留的键值对数目太多,会新建立一个更大的数组,把数据举行重构,优化添加查找的效率。这2个字段是用来判断是否需要重构的。

classDescFlags - 0x03 - SC_WRITE_METHOD | SC_SERIALIZABLE可以看出HashMap类有实现writeObject()方式。以是在classdata部门多出一个objectAnnotation部门。HashMap类的writeObject()方式往objectAnnotation位置写入了自界说数据,其中有一个8字节的数据块,一个URL工具,一个String工具。String工具是字符串"http://bezfdp.dnslog.cn"。

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第18张

8个字节的数据块内容,可以凭据HashMap类的writeObject()方式或者readObject()方式确定。厥后4个字节是int类型整数,是HashMap工具的键值对数目。
usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第19张

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第20张

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第21张

可以看到流中URL工具的2个要害字段值,hashCode是-1。host是"bezfdp.dnslog.cn"。

usdt自动充值(caibao.it):SerializationDumper辅助研究ysoserial URLDNS反序列化原理 安全技术 WEB安全 第22张

由于hashCode是-1,凭据后面的代码逻辑,会重新盘算URL工具的哈希值,进而触发对host中域名举行DNS剖析。

参考链接

https://docs.oracle.com/javase/8/docs/platform/serialization/spec/protocol.html
https://my.oschina.net/anyeshe/blog/4458797
https://github.com/NickstaDB/SerializationDumper


网友评论

2条评论
  • 2021-02-23 00:04:02

    四平新闻网四平新闻网汇集最新最全面的四平新闻,涵盖了各种社会热点、重大事件第一时间通报、跟进性事件新闻联播,网站层次明确,有市内、省内、国内与国外新闻分级,便于发现您感兴趣的专题,这里也有最权威的新闻政策发布与解读,时政评论人最专业的指导,也可以自由评论,欢迎本地内外网民与热点对话,共同引导正确的新闻舆论导向,四平新闻网,是当地网友们必备的资讯通达与生活服务网站。不会吧,这也太意外了

  • 2021-08-10 00:03:10

    吴建毅指出,相较于以往商家推动储值型营业时,须向银行申请信托或履约保证以保障消费者权益,包罗预先准备资金,同时,按生意金额收取用度外,尚须支付牢固金额的治理、签约、设立费等;礼票券价金保管则按生意金额按费率盘算手续费,提供小规模商家最佳解决方案。感觉文笔再多练练