Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Fastjson

  • 使用JSON.parse()JSON.parseObject()的不同(★)

前者会在JSON字符串中解析字符串获取@type指定的类,后者则会直接使用参数中的class,并且对应类中所有gettersetter都会被调用

  • 什么情况下反序列化过程会反射调用getter(★)

符合getter规范的情况且不存在setter

  • 如果不存在settergetter方法可以反射设置值吗(★)

需要服务端开启Feature.SupportNonPublicFiel参数,实战无用

  • Fastjson在反序列化byte[]类型的属性时会做什么事情(★)

将会在反序列化时候进行base64编码

  • 谈谈常见的几种Payload(★★★)

首先是最常见的JdbcRowSetImpl利用JDNI注入方式触发,需要出网

利用TemplatesImpl类比较鸡肋,需要服务端开启特殊参数

不出网的利用方式有一种BasicDataSource配合BCEL可实现RCE

另外某个版本之后支持$ref的功能,也可以构造一些Payload

  • 是否存在不出网的Fastjson利用方式(★★★)

第一种是TemplatesImpl类加载字节码做到不出网利用,但需要开启特殊参数实战鸡肋

第二种方式是服务端存在在tomcat-dbcp.jar情况下,使用BasicDataSource配合BCEL可实现不出网RCE

  • 谈谈1.2.47版本之前的绕过(★★★)

首先是利用解析问题可以加括号或大写L绕过低版本,高版本利用了哈希黑名单,之所以要哈希是因为防止黑客进行分析。但黑名单还是被破解了,有师傅找到可以绕过了类。在1.2.47版本中利用缓存绕过

  • Fastjson应该如何探测(★★)

使用dnslog做检测是最常见的方式,利用java.net.Inet[4][6]Addressjava.net.InetSocketAddressjava.net.URL类,之所以使用这三个因为不在黑名单中,可以直接检测

除了这种方式,还可以自行实现虚假的JNDI Server作为反连平台,用JdbcRowSetImpl这样的Payload来触发

如果不能出网,可以结合不出网的利用方式和中间件的回显手段,执行无害命令检测,或利用报错回显