Java反序列化练习试题附答案_第1页
Java反序列化练习试题附答案_第2页
Java反序列化练习试题附答案_第3页
Java反序列化练习试题附答案_第4页
Java反序列化练习试题附答案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java反序列化练习试题附答案1.以下关于Java序列化,说法错误的是:A.要使某个类可以被序列化或反序列化,这个类需要实现Serializable或者Externalizable接口B.实现Serializable接口的类,必须实现readObject和writeObject方法(正确答案)C.实现Externalizable接口的类,必须实现readExternal和writeExternal方法D.序列化机制是用来将对象和字节序列数据流进行相互转换,从而便于进行网络传输或者存储答案解析:实现Serializable接口的类,可以不必实现readObject和writeObject方法。2.以下关于Java序列化,说法错误的是:A.如果一个可序列化的类的成员不是基本类型,那这个引用类型也必须是可序列化的;否则,会导致此类不能序列化B.Java序列化算法不会重复序列化同一个对象,只会记录已序列化对象的编号C.当程序试图序列化一个对象时,会先检查此对象是否已经序列化过,只有此对象从未(在此虚拟机)被序列化过,才会将此对象序列化为字节序列输出D.如果序列化一个可变对象(对象内的内容可更改)后,更改了对象内容,再次序列化,会再次将此对象转换为字节序列。(正确答案)答案解析:如果序列化一个可变对象(对象内的内容可更改)后,更改了对象内容,再次序列化,并不会再次将此对象转换为字节序列,而只是保存序列化编号。3.以下关于Java序列化,说法正确的是:A.使用transient修饰的属性,序列化时会忽略此字段的值(正确答案)B.反序列化出的对象,被transient修饰的属性的值是默认值(正确答案)C.serialVersionUID表示序列化类的版本号,用于校验序列化数据发送方和接收方对序列化类的一致性(正确答案)D.如果某个序列化类的serialVersionUID没有指定,则它的默认值是0L答案解析:如果某个序列化类的serialVersionUID没有指定,Java会根据类的属性、方法等结构通过某种算法计算得到,不一定是0L。4.下列哪项是Java序列化数据的magicbytes?A.0xAF74B.0x7372C.0xACED(正确答案)D.0x7E7D5.以下关于Java反序列化漏洞,说法正确的是?A.反序列化漏洞是因为目标系统对来源不可信的数据进行了反序列化处理(正确答案)B.反序列化漏洞如要达成远程代码执行的危害,还需要目标环境中存在合适的反序列化利用链(正确答案)C.若目标应用程序对用户可控的数据进行了反序列化,就会导致远程代码执行的危害D.只要应用程序保证各依赖版本为最新,即使程序本身存在反序列化漏洞,攻击者也无法利用答案解析:反序列化如要达到远程代码执行的危害,还需要寻找合适的利用链;应用程序保证各依赖版本为最新只能降低反序列化漏洞被利用的风险,无法避免。6.下列哪些版本的CommonsCollections组件存在反序列化漏洞?A.3.1(正确答案)B.3.2.1(正确答案)C.3.2.2D.4.0(正确答案)答案解析:CommonsCollections在3.x<3.2.2以及4.0的版本范围里存在反序列化漏洞7.关于CommonsCollections组件的反序列化漏洞,以下说法正确的是?A.当目标Java应用依赖库里包含存在漏洞的CommonsCollections库时,即会导致远程代码执行B.ysoserial工具里关于CommonsCollections链的payload,利用核心都是依靠mons.collections.Transformer的实现类(正确答案)C.ysoserial工具里关于CommonsCollections链的payloadCommonsCollections1,对攻击目标的JDK版本没有要求D.ysoserial里CommonsCollections2是针对CommonsCollections4.0版本的利用链(正确答案)答案解析:当目标Java应用依赖库里包含存在漏洞的CommonsCollections库,且对由攻击者可控的数据进行反序列化时,即会造成任意代码执行;ysoserial工具里关于CommonsCollections链的payloadCommonsCollections1,需要目标的JDK版本<8或者JDK8<=8u718.以下哪些方法调用处理由用户可控的数据时,可能会导致反序列化漏洞?A.java.io.ObjectInputStream类readObject方法(正确答案)B.java.beans.XMLDecoder类readObject方法(正确答案)C.org.yaml.snakeyaml.Yaml类load方法(正确答案)D.com.alibaba.fastjson.JSON类parseObject方法(正确答案)9.假如有个Exploit类,其代码如下:

publicclassExploit{

privateStringvalue=getValue();

publicExploit(){

System.out.print("A");

}

publicstaticStringgetValue(){

System.out.print("B");

return"somevalue";

}

static{

System.out.print("C");

}

}

如果执行

Class.forName("Exploit").newInstance()

加载并实例化此类,程序的输出结果是?AABCCBA(正确答案)C10.假如有个Exploit类,其代码如下:

publicclassExploit{

privateStringvalue=getValue();

publicExploit(){

System.out.print("A");

}

publicstaticStringgetValue(){

System.out.print("B");

return"somevalue";

}

static{

System.out.print("C");

}

}

如果执行

Class.forName("Exploit")

加载此类,程序的输出结果是?ABCCBAC(正确答案)11.下列关于CommonsBeanutils组件的反序列化问题,以下说法正确的是?A.当目标Java应用依赖库里包含存在漏洞的CommonsBeanutils库时,即会导致远程代码执行B.ysoserial工具里关于CommonsBeanutils链的payloadCommonsBeanutils1,其利用依赖于CommonsCollections组件(正确答案)C.ysoserial工具里关于CommonsBeanutils链的payloadCommonsBeanutils1可以适用于所有的CommonsBeanutils版本场景下的反序列化漏洞D.CommonsBeanutils组件的反序列化问题没有被修复(正确答案)答案解析:当目标Java应用依赖库里包含存在漏洞的CommonsBeanutils库,且对由攻击者可控的数据进行反序列化时,即会导致远程代码执行;ysoserial工具里关于CommonsBeanutils链的payloadCommonsBeanutils1只适用于1.9.x版本。12.以下哪个ysoserialpayload可以在不执行代码或命令的情况下用作反序列化探测:A.Jdk7u21B.JRMPClient(正确答案)C.JRMPListener(正确答案)D.URLDNS(正确答案)13.关于ysoserial工具,以下说法正确的是:A.ysoserial只有生成反序列化利用payload的功能B.为了解决字节码对Java版本的兼容性问题,ysoserial源码打包编译时默认会和jdk6版本兼容(正确答案)C.并不是所有的ysoserialpayload都是用来执行任意代码(正确答案)D.ysoserialpayload执行命令时支持重定向等shell语法特性14.Java反射机制提供了以下哪些功能?A.在运行时判断一个对象所属的类(正确答案)B.在运行时构造一个类的对象(正确答案)C.在运行时判断一个类所具有的成员变量和方法(正确答案)D.在运行时调用一个对象的方法(正确答案)15.以下说法正确的是:A.Java对象序列化后的数据可以通过ClassLoader.defineClass方法来加载B.使用ClassLoader.defineClass方法加载字节码时,可以不指定类名(正确答案)C.可以通过反射可以给一个类动态添加属性D.可以通过反射调用某一个类的private方法(正确答案)16.假如有个Exploit类,其代码如下:

publicclassExploit{

privatestaticStringvalue=getValue();

publicExploit(){

System.out.print("A");

}

publicstaticStringgetValue(){

System.out.print("B");

return"somevalue";

}

static{

System.out.print("C");

}

}

如果执行

Class.forName("Exploit")

加载此类,程序的输出结果是?ABC(正确答案)CBAC1.CommonsBeanutilspayload在不同版本间进行反序列化利用时,存在什么坑点?如何解决?答案解析:不同版本间的CommonsBeanutilsmons.beanutils.BeanComparator这个类的serialVersionUID不一致,而这个类是反序列化链里会用到的一个类。如果序列化数据发送端和接收端反序列化类的serialVersionUID不一致,则会抛出异常而反序列化失败。因此CommonsBeanutils链在利用的时候,需要注意保持版本的一致性。2.ysoserial工具反序列化在执行命令的时候,存在哪些问题?如何改进?答案解析:Ysoserial工具命令执行基本都是通过Runtime.getRuntime().exec(Stringcmd)这个方法,Runtime类的exec方法接收单个String作为参数进行命令执行时存在很多问题,比如并不支持重定向等一些Shell语法特性。改进方法:可以先让目标判断操作系统类型(Windows/Linux),然后根据操作系统类型调用Runtime.getRuntime().exec(newString[]{“/bin/sh”,“-c”,cmd})或者Runtime.getRuntime().exec(newString[]{“cmd.exe”,“/c”,cmd})的方式来执行命令。3.ysoserial工具直接运行是生成payload序列化字节数据,但如果想引入ysoserial,获取一个payload序列化对象,代码可以如何编写?答案解析:StringpayloadType="CommonsCollections6";

S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论