Files
examination/topics/cybersecurity/buffer-overflow/short_answer.json
T
wonder 70e368e235
Deploy Examination / deploy (push) Successful in 7s
feat: add cybersecurity topic with 6 subtopics (204 questions)
New topic group: 网络安全专题 (cybersecurity)
Subtopics:
- web-security: Web 安全基础 (34 questions)
- crypto-basics: 密码学基础 (34 questions)
- buffer-overflow: 缓冲区溢出与漏洞利用 (34 questions)
- os-security: 操作系统安全 (34 questions)
- network-attack: 网络攻防 (34 questions)
- secure-coding: 安全编程实践 (34 questions)

Question types per subtopic:
- single_choice × 20
- true_false × 10
- short_answer × 3
- code_reading × 1

Difficulty range: 1-3 (基础)
2026-09-17 13:33:04 +08:00

81 lines
4.7 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"topic": "buffer-overflow",
"type": "short_answer",
"schema_version": "1.0.0",
"generated": "2026-09-17T00:00:00+08:00",
"questions": [
{
"id": "sa-001",
"type": "short_answer",
"difficulty": 2,
"tags": [
"栈溢出",
"漏洞利用"
],
"question": "请简述经典的栈溢出攻击的基本步骤,包括攻击者如何控制程序执行流。",
"answer": "经典的栈溢出攻击步骤如下:(1) 攻击者向程序输入超长数据,使数据超出目标缓冲区的大小;(2) 溢出的数据依次覆盖保存的 EBP(帧指针)和函数返回地址;(3) 攻击者将返回地址修改为 shellcode 的地址或其他目标地址(如 system() 函数);(4) 当被溢出的函数执行 return 指令时,CPU 从栈上弹出被篡改的返回地址并跳转到该地址执行;(5) 程序执行流被劫持到攻击者指定的恶意代码。",
"keywords": [
"返回地址",
"溢出",
"覆盖",
"shellcode",
"执行流",
"EBP",
"return"
],
"scoring_rubric": "满分需描述:(1) 输入超长数据导致溢出(2分);(2) 覆盖返回地址(2分);(3) 将返回地址修改为恶意地址(2分);(4) 函数返回时跳转到恶意代码执行(2分);(5) 整体逻辑清晰连贯(2分)。部分正确按点给分。",
"source": null,
"related": [],
"explanation": ""
},
{
"id": "sa-002",
"type": "short_answer",
"difficulty": 2,
"tags": [
"aslr",
"dep",
"漏洞利用"
],
"question": "分别解释 DEP 和 ASLR 的防御原理,并说明它们各自可以防御哪类攻击。",
"answer": "DEP(数据执行保护):通过硬件 NX/XD 位将栈、堆等数据内存区域标记为不可执行。当 CPU 尝试在这些区域执行指令时会触发异常。DEP 主要防御直接在栈/堆上注入并执行 shellcode 的攻击方式。ASLR(地址空间布局随机化):在每次程序运行时随机化栈、堆、共享库、PIE 可执行文件等关键内存区域的基地址。ASLR 主要防御需要预先知道内存地址的攻击,如精确跳转到 shellcode 或已知函数地址的攻击。两者互补:DEP 阻止代码注入,ASLR 阻止地址预测,但都不能单独防御所有攻击(如信息泄露+ROP 可以同时绕过两者)。",
"keywords": [
"NX",
"不可执行",
"随机化",
"基地址",
"shellcode",
"地址预测",
"互补"
],
"scoring_rubric": "满分需包含:(1) DEP 原理——NX 位/数据区域不可执行(2分);(2) DEP 防御——阻止 shellcode 执行(1分);(3) ASLR 原理——随机化内存布局/基地址(2分);(4) ASLR 防御——阻止地址预测(1分);(5) 说明两者互补但可被绕过(2分);(6) 表述准确完整(2分)。",
"source": null,
"related": [],
"explanation": ""
},
{
"id": "sa-003",
"type": "short_answer",
"difficulty": 3,
"tags": [
"rop",
"漏洞利用"
],
"question": "什么是 ROP(Return-Oriented Programming)?请解释其基本原理、与传统 shellcode 注入的区别,以及为什么 ROP 能绕过 DEP 保护。",
"answer": "ROP(面向返回的编程)是一种代码复用攻击技术。基本原理:攻击者在程序或共享库的已执行代码段中搜索以 ret 指令结尾的短小指令序列(称为 gadget),然后在栈上精心布局这些 gadget 的地址。每次函数返回(ret)时,程序跳转到栈上下一个 gadget 的地址执行,执行完该 gadget 的指令后又遇到 ret,继续跳转到下一个 gadget,如此串联形成攻击链。与传统 shellcode 注入的区别:(1) 不需要在数据区域注入新代码;(2) 利用的是已有的、合法的、可执行的代码片段。能绕过 DEP 的原因:DEP 将数据区域标记为不可执行,但 ROP 使用的 gadget 位于代码段(.text),代码段本身就是可执行的,因此不触发 DEP 保护。",
"keywords": [
"gadget",
"ret",
"代码复用",
"代码段",
"可执行",
"不注入新代码",
"串联"
],
"scoring_rubric": "满分需包含:(1) ROP 基本定义——代码复用攻击(2分);(2) gadget 概念——以 ret 结尾的代码片段(2分);(3) 执行方式——栈上布局 gadget 地址,ret 串联执行(2分);(4) 与 shellcode 注入的区别——不注入新代码(2分);(5) 为何绕过 DEP——gadget 位于可执行代码段(2分)。",
"source": null,
"related": [],
"explanation": ""
}
]
}