70e368e235
Deploy Examination / deploy (push) Successful in 7s
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 (基础)
81 lines
4.7 KiB
JSON
81 lines
4.7 KiB
JSON
{
|
||
"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": ""
|
||
}
|
||
]
|
||
} |