2022-卷王杯-happyFastjson

前言

昨天看了fastjson,因为最近比赛的fastjson出现的有点多。卷王杯Y4出了道fastjson的题目,考点是比较基础的东西,学习一波。

分析

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;public class FlagBean {private int count = 0;private boolean status = false;public String free;public String flab;public FlagBean() {}public String getFree() {return this.free;}public void setFree(String free) {this.free = free;}public Map getMap() {--this.count;return null;}public Map getFlag() {System.out.println("getFlag");++this.count;if (this.count >= 2) {HashMap hashMap = new HashMap();hashMap.put("flag", "flag{123}");return hashMap;} else {HashMap hashMap = new HashMap();hashMap.put("flag", "Hacker? hhd");return hashMap;}}
}
return StringUtils.check(poc) ? JSON.parse(poc).toString() : "Hacker? ";

主要就是fastjson反序列化触发2次getFlag()方法。

触发getter会想到$ref,但是被ban掉了,那么就想想办法,怎么在调用JSON.parse的时候触发getter。

首先是这个:

get开头的方法要求如下:

  • 方法名长度大于等于4
  • 非静态方法
  • 以get开头且第4个字母为大写
  • 无传入参数
  • 返回值类型继承自Collection Map AtomicBoolean AtomicInteger AtomicLong

只有满足这个要求的getter才会在JSON.parse的时候触发。

但是这才触发1次。

注意到后面return StringUtils.check(poc) ? JSON.parse(poc).toString() : "Hacker? ";还调用了一次,toString(),跟进去就发现是:

    public String toString() {return toJSONString();}

估计大概率还能触发getter了,实际上也确实是这样,最后跟进下去,有2处可能触发getter:

第一处:

第二处:

我的payload:

poc={{"@type":"com.ctfshow.happyfjs.Beans.FlagBean","flag":{"@type":"java.until.Map"}}:"a"}

可以触发3次getFlag,第一次是parse的时候,第二次就是JSON.toJSONString(entryKey),因为这时候的objectOrArray为false,第三次就是serializer.write(entryKey);

官方的payload只能触发2次,因为entryKey instanceof Map为true所以objectOrArray为true,这样第二次无法触发。

2022-卷王杯-happyFastjson相关推荐

  1. ctfshow卷王杯部分web

    ctfshow卷王杯web部分[easy unserialize&easy web] 文章目录 ctfshow卷王杯web部分[easy unserialize&easy web] e ...

  2. ctfshow(卷王杯)

    easyweb 首先打开界面,just so so , 然后我们查看源码,发现了source 路径直接进去访问 <?php error_reporting(0); if(isset($_GET[ ...

  3. 公司新来了个00后测试工程师,一副毛头小子的样儿,哪想到是新一代卷王...

    内卷,是现在热度非常高的一个词汇,随着热度不断攀升,隐隐到了"万物皆可卷"的程度. 在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是.技术不好的同事,我们可以帮他 ...

  4. 公司测试部门来了个00后卷王之王,老油条感叹真干不过,但是...

    最近聊到软件测试的行业内卷,越来越多的转行和大学生进入测试行业.想要获得更好的待遇和机会,不断提升自己的技能栈成了测试老人迫在眉睫的问题. 不论是面试哪个级别的测试工程师,面试官都会问一句" ...

  5. 测试部门来了个00后卷王之王,老油条感叹真干不过,但是...

    在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是.技术不好的同事,我们可以帮他. 是技术太强的人吗?也不是.技术很强的同事,可遇不可求,向他学习还来不及呢. 真正让人反感的,是技术平 ...

  6. 公司测试部门来了个00后卷王,老油条感叹真干不过,不过.....

    在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是.技术不好的同事,我们可以帮他. 是技术太强的人吗?也不是.技术很强的同事,可遇不可求,向他学习还来不及呢. 真正让人反感的,是技术平 ...

  7. 2022帆软杯全国高校数据分析与应用联赛来啦!

    过完愉快的中秋佳节,是时候来报名一场激动人心的竞赛了.2022帆软杯全国高校数据分析与应用联赛于9月13日正式启动报名啦!还在等什么呢,万元大奖说不定就是你的哦! 2022年 "帆软杯&qu ...

  8. 卷王拼多多的海外现状如何?

    大家好,我是懂电商API的Tina lee . -欢迎收看本期内容-   薅羊毛在全世界的消费者看来,几乎都是不可拒绝的. 近几年,中国电商卷王,拼多多卷完国内大小电商后,去年,拼多多拼进了海外,卷到 ...

  9. “卷王”英伟达的真面目

    GTC 2022过后,广大人民群众纷纷奔走相告,黄仁勋又带着他的新"核弹"来"炸街"了. 具体发布的新产品和技术,很多文章都已经详尽地介绍过了,一言以蔽之:牛! ...

最新文章

  1. python爬虫 智联招聘 工作地点
  2. BZOJ 1631: [Usaco2007 Feb]Cow Party【最短路】
  3. [转]手游研发数据专业术语科普 游戏热度跟啥有关
  4. 【CV秋季划】人脸编辑之统一属性编辑方法视频更新
  5. 干货 | 算法工程师入门第三期——黄李超讲物体检测
  6. boost::gil模块数字扩展中的 resize_view() 示例
  7. 常用Latex表达式符号——组合数学篇
  8. java学习笔记七——继承
  9. 越界操作导致程序崩溃的原理
  10. 计算机毕业设计 HTML+CSS+JavaScript 云南美食网页设计 美食网页介绍代码
  11. 彻底删除solidworks的方法-清理注册表
  12. 富文本编辑器Editormd的配置使用
  13. PYTHON实战:从百度资讯爬取信息作为正文,巨潮资讯网爬取有关PDF作为附件,自动发送邮件(Mysql做存储)
  14. 国美易卡借助互联网,国美易卡搭建风控、运营、营销体系
  15. 2021-02-18docker
  16. 分门别类刷leetcode——链表(C++实现)
  17. 罗格斯大学电气与计算机工程专业怎么样,罗格斯大学计算机工程排行,千万得细心点听懂...
  18. 京东店铺所有商品API接口(JD整店商品查询API接口)
  19. 华为独家承建波兰P4 UMTS网络
  20. 如何安装正版的Xmanager

热门文章

  1. R语言使用pf函数生成F分布累积分布函数数据、使用plot函数可视化F分布累积分布函数数据(F Distribution)
  2. freeradius-aka配置笔记,自用
  3. 计算机基础word简单面试题,Word、excel、PPT、计算机基础笔试题汇总
  4. 数据驱动的智能运维平台
  5. HTML5 五子棋 - JS/Canvas 游戏
  6. 深度学习读书笔记之RBM
  7. VueJS之v-bind:key爬坑
  8. AI day04(2020 8/3)
  9. 常用DNS列表(电信、网通) 转载
  10. 【vue学习笔记】vue-cli-service的使用