forked from hust-open-atom-club/software-security-dojo-x64
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dojo.yml
516 lines (435 loc) · 24.6 KB
/
dojo.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
id: software-security
name: CSE SCS2081 - Fall 2023 - 软件安全
description: |
绝对安全的软件系统现在不存在,将来也不会存在。
type: course
award:
emoji: 😀
modules:
- id: simple-demo
name: Simple Demo
description: |
本模块包含一些简单的演示关卡,帮助学生更快地熟悉当前平台(https://hust.pwn.college)。
**注:为了更有效地解决这些挑战关卡,首先运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
\
\
**关卡等级分布:**
- Level 1.0 - 直接读取 /flag,并将其打印出来(Python)
- Level 1.1 - 直接读取 /flag,并将其打印出来(C)
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡直接读取 /flag,并将其打印出来。"
- id: level-1-1
name: Level 1.1
description: "本关卡直接读取 /flag,并将其打印出来。"
resources:
- name: "0 课程要求"
type: lecture
slides: jy07537f58c4f6b844afd9573c550fb30322b
- name: "1 软件安全概论"
type: lecture
slides: jy075f576dfa40e2a40ae94a23e1e6c5bc3fc
- id: pwntools-tutorials
name: Pwntools Tutorials
description: |
Pwntools 是一个工具包(包含各种好用的小工具)与软件库,旨在尽可能简化 CTF 比赛的渗透攻击过程,同时尽可能攻击代码的可读性。
**注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
\
\
**关卡等级分布:**
- Level 1.0 - 利用 pwntools 生成特定输入绕过检查,并读取 /flag
- Level 1.1 - 利用 pwntools 生成特定输入绕过检查,并读取 /flag
- Level 2.0 - 利用 pwtools asm 生成特定指令来设置特定寄存器,通过检查后获取 /flag
- Level 2.1 - 利用 pwtools asm 生成特定指令来交换特定寄存器,通过检查后获取 /flag
- Level 2.2 - 利用 pwtools asm 生成特定指令来计算特定公式,结果通过检查后获取 /flag
- Level 2.3 - 利用 pwtools asm 生成特定指令来设置特定全局数据区域,通过检查后获取 /flag
- Level 2.4 - 利用 pwtools asm 生成特定指令来设置特定栈内存区域,通过检查后获取 /flag
- Level 2.5 - 利用 pwtools asm 利用 if 语句来计算特定公式,结果通过检查后获取 /flag
- Level 2.6 - 利用 pwtools asm 利用 for 循环来计算特定公式,结果通过检查后获取 /flag
- Level 3.0 - 利用 pwtools 循环生成特定输入绕过检查,并读取 /flag
- 除此之外,pwntools 还有一些其他功能,如EFL解析(elf-crackme 关卡会用到),cyclic(缓冲区溢出关卡会用到)and ,GDB调试等。
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡设置了一些条件,只有通过这些条件才能获得 /flag。"
- id: level-1-1
name: Level 1.1
description: "本关卡设置了一些条件,只有通过这些条件才能获得 /flag。"
- id: level-2-0
name: Level 2.0
description: "本关卡编写一些汇编指令,设置特定寄存器(如,rax),通过检查后获取 /flag。"
- id: level-2-1
name: Level 2.1
description: "本关卡编写一些汇编指令,交换特定寄存器的值(如,rax,rbx),通过检查后获取 /flag。"
- id: level-2-2
name: Level 2.2
description: "本关卡编写一些汇编指令,计算一个特定公式,结果通过检查后获取 /flag。"
- id: level-2-3
name: Level 2.3
description: "本关卡编写一些汇编指令,设置特定全局数据区域,结果通过检查后获取 /flag。"
- id: level-2-4
name: Level 2.4
description: "本关卡编写一些汇编指令,设置特定栈内存区域,结果通过检查后获取 /flag。"
- id: level-2-5
name: Level 2.5
description: "本关卡编写 if 语句,设置特定栈内存区域,结果通过检查后获取 /flag。"
- id: level-2-6
name: Level 2.6
description: "本关卡编写 for 循环,计算特定公式,结果通过检查后获取 /flag。"
- id: level-3-0
name: Level 3.0
description: "本关卡设置了一些条件,只有循环输入后通过这些条件才能获得 /flag。"
resources:
- name: "Pwntools 使用教程"
type: lecture
video: "405113607"
playlist: "BV1oG411o7A4"
slides: 8ix3hd077c6d708884e81bfe938af6896532d
- name: "gdb 结合 pwntools 调试教程"
type: lecture
video: "532863345"
playlist: "BV1Du411N7c9"
slides: 8ix3h99526e066f1646c9811a13688f6e7efb
- name: "References"
type: markdown
content: |
- [Pwntools Tutorials](https://github.com/Gallopsled/pwntools-tutorial)
- [Pwntools Documentation](https://docs.pwntools.com/en/stable/index.html)
- [GDB Cheat Sheet](https://darkdust.net/files/GDB%20Cheat%20Sheet.pdf)
- id: setuid-backdoor
name: SetUID Backdoor
description: |
SUID 允许任何拥有文件执行权限的用户,以当前文件所属者(通常是 root)的权限执行该文件。
**注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
\
\
**关卡等级分布:**
- Level 1.0 - 利用设置了 SUID 的 /usr/bin/cat 命令读取 /flag
- Level 1.1 - 利用设置了 SUID 的 /usr/bin/vim 命令读取 /flag
- Level 1.2 - 利用设置了 SUID 的 /usr/bin/hexedit 命令读取 /flag
- Level 2.0 - 理解 /usr/bin/rev 功能,并通过设置了 SUID 的该命令获取 /flag
- Level 2.1 - 理解 /usr/bin/gzip 功能,并通过设置了 SUID 的该命令获取 /flag
- Level 2.2 - 理解 /usr/bin/date 功能,并通过设置了 SUID 的该命令获取 /flag
- Level 3.0 - 学习 /usr/bin/chmod 命令设置文件权限,并通过设置了 SUID 的该命令获取 /flag
- Level 3.1 - 学习 /usr/bin/chown 命令设置文件权限,并通过设置了 SUID 的该命令获取 /flag
- Level 3.2 - 学习 /usr/bin/cp 命令设置文件权限,并通过设置了 SUID 的该命令获取 /flag
- Level 4.0 - 学习 /usr/bin/python 解释器的语法,并编程实现获取 /flag
- Level 4.1 - 学习 /usr/bin/perl 解释器的语法,并编程实现获取 /flag
- Level 4.2 - 学习 /usr/bin/ruby 解释器的语法,并编程实现获取 /flag
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡设置一些实用程序(如,/usr/bin/cat),帮助读取 /flag。"
- id: level-1-1
name: Level 1.1
description: "本关卡设置一些实用程序(如,/usr/bin/vim),帮助读取 /flag。"
- id: level-1-2
name: Level 1.2
description: "本关卡设置一些实用程序(如,/usr/bin/hexedit),帮助读取 /flag。"
- id: level-2-0
name: Level 2.0
description: "本关卡需要理解一些实用程序(如,/usr/bin/rev),并巧妙利用该程序获取 /flag。"
- id: level-2-1
name: Level 2.1
description: "本关卡需要理解一些实用程序(如,/usr/bin/gzip),并巧妙利用该程序获取 /flag。"
- id: level-2-2
name: Level 2.2
description: "本关卡需要理解一些实用程序(如,/usr/bin/date),并巧妙利用该程序获取 /flag。"
- id: level-3-0
name: Level 3.0
description: "本关卡需要通过一些实用程序(如,/usr/bin/chmod)巧妙地设置文件权限来读取 /flag。"
- id: level-3-1
name: Level 3.1
description: "本关卡需要通过一些实用程序(如,/usr/bin/chown)巧妙地设置文件权限来读取 /flag。"
- id: level-3-2
name: Level 3.2
description: "本关卡需要通过一些实用程序(如,/usr/bin/cp)巧妙地设置文件权限来读取 /flag。"
- id: level-4-0
name: Level 4.0
description: "本关卡设置一些程序解释器(如,/usr/bin/python),并需要结合相应编程知识来读取 /flag。"
- id: level-4-1
name: Level 4.1
description: "本关卡设置一些程序解释器(如,/usr/bin/perl),并需要结合相应编程知识来读取 /flag。"
- id: level-4-2
name: Level 4.2
description: "本关卡设置一些程序解释器(如,/usr/bin/ruby),并需要结合相应编程知识来读取 /flag。"
resources:
- name: "Linux 权限管理与SetUID"
type: lecture
# video: "438064585"
# playlist: "BV1mj411M7NZ"
slides: 8ix3h81318f480f304ea3a8d2d4e9f1188e48
- name: "References"
type: markdown
content: |
- [Why You Can't Un-Root a Compromised Machine](https://gist.github.com/mudongliang/7b68290c2b4d5da0b7140c8b0e1827d0)
- id: elf-crackme
name: ELF CrakeMe
description: |
学习并修改 ELF 可执行文件格式
**注:为了更有效地解决这些挑战关卡,你首先需要执行 utility.py 查看关卡提示,根据提示信息利用 utility.py 修改关卡可执行文件,通过检查后即可获取 flag。**
\
\
**关卡等级分布:**
- Level 1.0 - 学习并理解 ELF 文件头,修复关卡可执行文件,通过检查后读取 /flag
- Level 1.1 - 学习并理解程序头表,修复关卡可执行文件,通过检查后读取 /flag
- Level 1.2 - 学习并理解节头表,修复关卡可执行文件,通过检查后读取 /flag
- Level 2.0 - 学习并理解 .text 段,修复关卡可执行文件,通过检查后读取 /flag
- Level 2.1 - 学习并理解 .data 段,修复关卡可执行文件,通过检查后读取 /flag
- Level 2.2 - 编写程序进行遍历,修复关卡可执行文件,通过检查后读取 /flag
- Level 3.0 - 学习并理解 plt 跳转,修复关卡可执行文件,通过检查后读取 /flag
- Level 3.1 - 学习并理解 plt,got 跳转,修复关卡可执行文件,通过检查后读取 /flag
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡需要掌握 ELF 文件头中 x86 和 x64 之间的区别,使用 utility.py 修复关卡可执行文件后,执行即可获得flag。"
- id: level-1-1
name: Level 1.1
description: "本关卡需要掌握程序头表中 Offset,VirtAddr,PhysAddr 字段含义,使用 utility.py 修复关卡可执行文件后,执行即可获得flag。"
- id: level-1-2
name: Level 1.2
description: "本关卡需要掌握节头表中 Offset,VirtAddr,PhysAddr 字段含义,使用 utility.py 修复关卡可执行文件后,执行即可获得flag。"
- id: level-2-0
name: Level 2.0
description: "本关卡需要掌握 .text 段,使用 utility.py 修复关卡可执行文件后,执行即可获得flag。"
- id: level-2-1
name: Level 2.1
description: "本关卡需要掌握 .data 段,使用 utility.py 修复关卡可执行文件后,执行即可获得flag。"
- id: level-2-2
name: Level 2.2
description: "本关卡需要编写程序,爆破相应位置,使用 utility.py 修复关卡可执行文件后,执行即可获得flag。"
- id: level-3-0
name: Level 3.0
description: "本关卡需要掌握 plt 表的跳转,使用 utility.py 修复关卡可执行文件后,执行即可获得flag。"
- id: level-3-1
name: Level 3.1
description: "本关卡需要掌握 plt 表和 got 表的跳转,使用 utility.py 修复关卡可执行文件后,执行即可获得flag。"
resources:
- name: "Linux ELF 可执行文件"
type: lecture
# video: "438064585"
# playlist: "BV1mj411M7NZ"
slides: 8ix3hf4008d04788944d0826f01cb491639b0
- name: "References"
type: markdown
content: |
- [Concrete Value for fields in ELF format](https://github.com/WolfgangSt/libelf/blob/master/lib/elf_repl.h)
- id: buffer-overflow
name: Buffer Overflow
description: |
利用缓冲区溢出漏洞,可以在栈、全局、堆等内存区域上输入精心构造的数据载荷(即,Payload),覆盖关键数据(如,局部变量,函数指针,返回地址等)。
**注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
\
\
**关卡等级分布:**
- Level 1.0 - 利用栈溢出覆盖局部变量,通过检查后读取 /flag
- Level 1.1 - 利用栈溢出覆盖局部函数指针变量,劫持控制流来读取 /flag
- Level 1.2 - 利用栈溢出覆盖局部数据指针变量,劫持控制流来读取 /flag
- Level 1.3 - 利用栈溢出覆盖返回地址,劫持控制流来读取 /flag
- Level 1.4 - 利用栈溢出覆盖局部布尔变量,翻转逻辑来读取 /flag
- Level 2.0 - 利用堆缓冲区溢出覆盖堆上数据变量,劫持控制流来读取 /flag
- Level 2.1 - 利用堆缓冲区溢出覆盖堆上函数指针,劫持控制流来读取 /flag
- Level 3.0 - 利用 Off-By-One 漏洞覆盖栈上数据,通过检查后读取 /flag
- Level 3.1 - 利用 Off-By-Null 漏洞覆盖栈上关键变量,劫持控制流后读取 /flag
- Level 4.0 - 利用 cylic 和 coredump 来自动计算返回地址的位置,劫持控制流后读取 /flag
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡需掌握栈布局知识覆盖局部变量,通过检查后读取 /flag。"
- id: level-1-1
name: Level 1.1
description: "本关卡需掌握栈布局知识覆盖局部函数指针变量,劫持控制流后通过后门函数读取 /flag。"
- id: level-1-2
name: Level 1.2
description: "本关卡需掌握栈布局知识覆盖局部数据指针变量,利用后门函数后读取 /flag。"
- id: level-1-3
name: Level 1.3
description: "本关卡需掌握栈布局知识覆盖函数返回地址,劫持控制流后利用后门函数后读取 /flag。"
- id: level-1-4
name: Level 1.4
description: "本关卡需掌握栈布局知识覆盖局部布尔变量,翻转逻辑后利用后门函数后读取 /flag。"
- id: level-2-0
name: Level 2.0
description: "本关卡需掌握堆溢出知识覆盖堆上数据变量,利用后门函数 edit_notebook 和 read_notebook 后读取 /flag。"
- id: level-2-1
name: Level 2.1
description: "本关卡需掌握堆溢出知识覆盖堆上数据变量,利用后门函数 edit_notebook 覆盖堆上函数指针后读取 /flag。"
- id: level-3-0
name: Level 3.0
description: "本关卡需掌握 Off-By-One 知识覆盖栈上关键变量, 通过暴力破解利用后门函数读取 /flag"
- id: level-3-1
name: Level 3.1
description: "本关卡需掌握 Off-By-Null 知识覆盖栈上关键变量, 利用后门函数读取 /flag"
- id: level-4-0
name: Level 4.0
description: "本关卡在没有源码辅助的基础上,使用 cylic 和 coredump 基础知识自动化寻找返回地址,利用栈溢出来读取 /flag。"
resources:
- name: "References"
type: markdown
content: |
- [Use pwntools for your exploits](https://mudongliang.github.io/2021/05/11/use-pwntools-for-your-exploits.html)
- id: integer-overflow
name: Integer Overflow
description: |
整数溢出出现于数值无法被对应的数据类型所表示,通常,整数溢出可能导致缓冲区溢出。
**注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
\
\
**关卡等级分布:**
- Level 1.0 - 利用整数溢出中的宽度溢出读取 /flag
- Level 1.1 - 结合整数溢出中的宽度溢出与缓冲区溢出读取 /flag
- Level 2.0 - 利用整数溢出中的计算溢出读取 /flag
- Level 3.0 - 利用整数溢出中的符号溢出读取 /flag
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡利用整数溢出中的宽度溢出,通过检查后读取 /flag。"
- id: level-1-1
name: Level 1.1
description: "本关卡利用整数溢出中的宽度溢出,结合缓冲区溢出,最终利用后门函数读取 /flag。"
- id: level-2-0
name: Level 2.0
description: "本关卡利用整数溢出中的计算溢出,通过检查后读取 /flag。"
- id: level-3-0
name: Level 3.0
description: "本关卡利用整数溢出中的计算溢出,通过检查后读取 /flag。"
- id: use-after-free
name: Use After Free
description: |
释放后使用这一漏洞类型属于实践类内存错误,在一个对象被释放后之后重新使用导致。此处还包含 Invalid Free 和 Double Free。
**注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
\
\
**关卡等级分布:**
- Level 1.0 - 利用悬垂指针读取 /flag
- Level 1.1 - 利用悬垂指针,结合 ptmalloc2 tcache bin 分配堆内存的基本原理,劫持堆块分配后,读取 /flag
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡利用释放后未置空的悬垂指针读取 /flag 的内容"
- id: level-1-1
name: Level 1.1
description: "本关卡需掌握 ptmalloc2 tcache bin 分配堆内存的基本原理,利用释放后使用漏洞覆盖堆上关键变量,泄露堆上 /flag 的内容"
- id: other-vulnerabilities
name: Other Vulnerabilities
description: |
学习一些其他安全漏洞,如格式化字符串,未初始化漏洞,信息泄露漏洞。
**注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
\
\
**关卡等级分布:**
- Level 1.0 - 关于格式化字符串读取
- Level 1.1 - 关于格式化字符串写入
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡利用格式化字符串漏洞,泄露栈上存放的 flag 内容"
- id: level-1-1
name: Level 1.1
description: "本关卡利用格式化字符串漏洞,修改内存中的值,从而通过判断获取flag内容"
- id: shellcode-injection
name: Shellcode Injection
description: |
通过注入精心构造的 shellcode,获得程序原有行为以外的破坏性能力。
**注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
\
\
**关卡等级分布:**
- Level 1.1 - 本关卡需掌握重复宏汇编的shellcode的编写方法
- Level 2.0 - 本关卡需掌握栈赋值的shellcode的编写方法
- Level 3.0 - 本关卡需掌握可见字符的 shellcode 的编写方法
- Level 3.1 - 本关卡需掌握敏感字符绕过的 shellcode 的编写方法
- Level 3.2 - 本关卡需掌握读取 /flag 的 shellcode 的编写方法
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡需要直接构造读取flag的shellcode,注入并执行 shellcode 来读取 /flag。"
- id: level-1-1
name: Level 1.1
description: "本关卡需构造重复宏编程,执行 shellcode 来读取 /flag。"
- id: level-2-0
name: Level 2.0
description: "本关卡过滤空字符,需利用栈赋值,执行 shellcode 来读取 /flag。"
- id: level-3-0
name: Level 3.0
description: "本关卡过滤了不可见字符串,需要利用可见字符串构建,并执行 shellcode 来读取 /flag。"
- id: level-3-1
name: Level 3.1
description: "本关卡过滤了syscall,int 80,sysenter,需要绕过并执行 shellcode 来读取 /flag。"
- id: level-3-2
name: Level 3.2
description: "本关卡需利用栈溢出漏洞,注入并执行 shellcode 来读取 /flag。"
- id: return-oriented-programming
name: Return Oriented Programming
description: |
ROP(Return Oriented Programming) 通过控制程序栈上数据串连 gadgets(如,末尾为 ret 指令的微小代码片段)来达到图灵完备的功能。
**注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
\
\
**关卡等级分布:**
- Level 1.0 - 本关卡需学习利用栈溢出,构造 ROP 链控制函数参数,来读取 /flag
- Level 1.1 - 本关卡需学习 ret2syscall 劫持控制流,构造 ROP 链来读取 /flag
- Level 2.0 - 本关卡需学习 ret2libc,利用 ELF 现有函数劫持控制流,构造 ROP 链来读取 /flag
- Level 2.1 - 本关卡需学习 ret2libc,利用 libc 函数,构造 ROP 链来读取 /flag
- Level 2.2 - 本关卡需学习 ret2libc,泄露并利用 libc 函数,构造 ROP 链来读取 /flag
- Level 2.3 - 本关卡需学习 ret2libc,利用缓冲区溢出和格式化字符串漏洞,构造 ROP 链来读取 /flag
- Level 2.4 - 本关卡需学习 ret2libc,仅利用格式化字符串漏洞,绕过保护机制,构造 ROP 链来读取 /flag
challenges:
- id: level-1-0
name: Level 1.0
description: "本关卡需利用基础的 ROP 知识控制后门函数参数来读取 /flag。"
- id: level-1-1
name: Level 1.1
description: "本关卡需利用基础的 ROP 知识 ret2syscall 劫持控制流来读取 /flag。"
- id: level-2-0
name: Level 2.0
description: "本关卡需学习 ret2libc,利用 ELF 现有函数劫持控制流,构造 ROP 链来读取 /flag。"
- id: level-2-1
name: Level 2.1
description: "本关卡需学习 ret2libc,利用 libc 函数,构造 ROP 链来读取 /flag"
- id: level-2-2
name: Level 2.2
description: "本关卡需学习 ret2libc,泄露并利用 libc 函数,构造 ROP 链来读取 /flag"
- id: level-2-3
name: Level 2.3
description: "本关卡需学习 ret2libc,利用缓冲区溢出和格式化字符串漏洞,构造 ROP 链来读取 /flag"
- id: level-2-4
name: Level 2.4
description: "本关卡需学习 ret2libc,仅利用格式化字符串漏洞,绕过保护机制,构造 ROP 链来读取 /flag"
# - id: mitigation-bypass
# name: Mitigation Bypass
# description: |
# 学习与绕过一些安全防御机制,如栈保护(Stack Protector),地址空间随机化(ASLR),数据执行保护(DEP/NX)
# \
# \
# **关卡等级分布:**
# - Level 1.0 - 关于栈保护
# - Level 2.0 - 关于地址随机化与 PIE
# - Level 3.0 - 关于数据执行保护
# \
# \
# **注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
# - id: non-control-data-attacks
# name: Non-Control-Data Attacks
# description: |
# Non-Control-Data 攻击通过破坏各种应用程序数据,包括用户身份数据、配置数据、用户输入数据和决策数据,来完成攻击目标。
# \
# \
# **关卡等级分布:**
# - Level 1.0 - TODO
# \
# \
# **注:为了更有效地解决这些挑战关卡,你首先需要运行 /challenge 目录下的挑战题目,随后根据提示完成挑战。**
# challenges:
# - id: level-1-0
# name: Level 1.0
# description: "模拟 CVE-2001-0144 通过缓冲区溢出来控制决策数据"
# # - id: level-1-1
# # name: Level 1.1
# # description: ""
# resources:
# - name: "References"
# type: markdown
# content: |
# - [Non-Control-Data Attacks Are Realistic Threats](https://www.usenix.org/conference/14th-usenix-security-symposium/non-control-data-attacks-are-realistic-threats)