diff --git a/SUMMARY.md b/SUMMARY.md index 862827b..65af229 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -69,6 +69,7 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One * [3.3.9 内核 ROP](doc/3.3.9_kernel_rop.md) * [3.3.10 Linux 内核漏洞利用](doc/3.3.10_linux_kernel_exploit.md) * [3.3.11 Windows 内核漏洞利用](doc/3.3.11_windows_kernel_exploit.md) + * [3.3.12 竞争条件](doc/3.3.12_race_condition.md) * [3.4 Web](doc/3.4_web.md) * [3.4.1 SQL 注入利用](doc/3.4.1_sql_injection.md) * [3.4.2 XSS 漏洞利用](doc/3.4.2_xss.md) @@ -148,6 +149,7 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One * [8.1.3 Return-Oriented Rootkits: Bypassing Kernel Code Integrity Protection Mechanisms](doc/8.1.3_return-oriented_rootkits.md) * [8.1.4 ROPdefender: A Detection Tool to Defend Against Return-Oriented Programming Attacks](doc/8.1.4_ropdefender.md) * [8.1.5 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks](doc/8.1.5_data-oriented_programming.md) + * [8.1.6 Hacking Blind](doc/8.1.6_hacking_blind.md) * Symbolic Execution * [8.2.1 All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution (but might have been afraid to ask)](doc/8.2.1_dynamic_taint_analysis.md) * [8.2.2 Symbolic Execution for Software Testing: Three Decades Later](doc/8.2.2_symbolic_execution_for_software_testing.md) diff --git a/doc/3.3.12_race_condition.md b/doc/3.3.12_race_condition.md new file mode 100644 index 0000000..7240a62 --- /dev/null +++ b/doc/3.3.12_race_condition.md @@ -0,0 +1 @@ +# 3.3.12 竞争条件 diff --git a/doc/3.3_pwn.md b/doc/3.3_pwn.md index 159085a..2eb93b2 100644 --- a/doc/3.3_pwn.md +++ b/doc/3.3_pwn.md @@ -11,3 +11,4 @@ - [3.3.9 内核 ROP](3.3.9_kernel_rop.md) - [3.3.10 Linux 内核漏洞利用](3.3.10_linux_kernel_exploit.md) - [3.3.11 Windows 内核漏洞利用](3.3.11_windows_kernel_exploit.md) +- [3.3.12 竞争条件](3.3.12_race_condition.md) diff --git a/doc/3_topics.md b/doc/3_topics.md index d41bbb4..b4fcd00 100644 --- a/doc/3_topics.md +++ b/doc/3_topics.md @@ -15,6 +15,7 @@ - [3.3.9 内核 ROP](3.3.9_kernel_rop.md) - [3.3.10 Linux 内核漏洞利用](3.3.10_linux_kernel_exploit.md) - [3.3.11 Windows 内核漏洞利用](3.3.11_windows_kernel_exploit.md) + - [3.3.12 竞争条件](3.3.12_race_condition.md) - [3.4 Web](3.4_web.md) - [3.4.1 SQL 注入利用](3.4.1_sql_injection.md) - [3.4.2 XSS 漏洞利用](3.4.2_xss.md) diff --git a/doc/5.1_fuzzing.md b/doc/5.1_fuzzing.md index 1226e72..900ea0d 100644 --- a/doc/5.1_fuzzing.md +++ b/doc/5.1_fuzzing.md @@ -11,13 +11,27 @@ - 一类是基于变异的模糊测试器,它通过对已有的数据样本进行变异来创建测试用例 - 另一类是基于生成的模糊测试器,它为被测试系统使用的协议或文件格式建模,基于模型生成输入并据此创建测试用例。 +#### 模糊测试流程 模糊测试通常包含下面几个基本阶段: -1. 确定测试目标 -2. 确定输入向量 -3. 生成模糊测试数据 -4. 执行模糊测试数据 -5. 监视异常 -6. 判定发现的漏洞是否可被利用 +1. 确定测试目标:确定目标程序的性质、功能、运行条件和环境、编写程序的语言、软件过去所发现的漏洞信息以及与外部进行交互的接口等 +2. 确定输入向量:例如文件数据、网络数据和环境变量等。 +3. 生成模糊测试数据:在确定输入向量之后设计要模糊测试的方法和测试数据生成算法等 +4. 执行模糊测试数据:自动完成向测试目标发送大量测试数据的过程,包括启动目标进程、发送测试数据和打开文件等 +5. 监视异常:监视目标程序是否产生异常,记录使程序产生异常的测试数据和异常相关信息 +6. 判定发现的漏洞是否可被利用:通过将产生异常的数据重新发送给目标程序,跟踪异常产生前后程序相关的处理流程,分析异常产生的原因,从而判断是否可利用 + +#### 基本要求 +要实现高效的模糊测试,通常需要满足下面几个方面的要求: +1. 可重现性:测试者必须能够知道使目标程序状态变化所对应的测试数据是什么,如果不具备重现测试结果的能力,那么整个过程就失去了意义。实现可重现性的一个方法是在发送测试数据的同时记录下测试数据和目标程序的状态 +2. 可重用性:进行模块化开发,这样就不需要为一个新的目标程序重新开发一个模糊测试器 +3. 代码覆盖:指模糊测试器能够使目标程序达到或执行的所有代码及过程状态的数量 +4. 异常监视:能够精确地判定目标程序是否发生异常非常的关键 + +#### 存在的问题 +模糊测试中存在的问题: +1. 具有较强的盲目性:即使熟悉协议格式,依然没有解决测试用例路径重复的问题,导致效率较低 +2. 测试用例冗余度大:由于很多测试用例通过随机策略产生,导致会产生重复或相似的测试用例 +3. 对关联字段的针对性不强:大多数时候只是对多个元素进行数据的随机生成或变异,缺乏对协议关联字段的针对性 ## 参考资料 diff --git a/doc/5.3_symbolic_execution.md b/doc/5.3_symbolic_execution.md index 141317e..166aff5 100644 --- a/doc/5.3_symbolic_execution.md +++ b/doc/5.3_symbolic_execution.md @@ -12,3 +12,11 @@ ## 什么是符号执行 +符号执行起初应用于基于源代码的安全检测中,它通过符号表达式来模拟程序的执行,将程序的输出表示成包含这些符号的逻辑或数学表达式,从而进行语义分析。 + +符号执行可分为过程内分析和过程间分析(或全局分析)。过程内分析是指只对单个函数的代码进行分析,过程间分析是指在当前函数入口点要考虑当前函数的调用信息和环境信息等。当符号执行用于代码漏洞静态检测时,更多的是进行程序全局的分析且更侧重代码的安全性相关的检测。将符号执行与约束求解器结合使用来产生测试用例是一个比较热门的研究方向。(关于约束求解我们会在另外的章节中详细讲解) + +符号执行具有代价小、效率高的有点,但缺点也是很明显的。比如路径状态空间的爆炸问题,由于每一个条件分支语句都可能会使当前路径再分出一条新的路径,特别是遇到循环分支时,每增加一次循环都将增加一条新路径,因此这种增长是指数级的。在实践中,通常采用一些这种的办法来解决路径爆炸问题,比如规定每个过程内的分析路径的数目上限,或者设置时间上限和内存上限等来进行缓解。 + +#### 动态符号执行 +动态符号执行将符号执行和具体执行结合起来,并交替使用静态分析和动态分析,在具体执行的同时堆执行到的指令进行符号化执行。 diff --git a/doc/8.1.5_data-oriented_programming.md b/doc/8.1.5_data-oriented_programming.md index fcd40e2..3dde8dc 100644 --- a/doc/8.1.5_data-oriented_programming.md +++ b/doc/8.1.5_data-oriented_programming.md @@ -1 +1,4 @@ # 8.1.5 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks + + +## 简介 diff --git a/doc/8.1.6_hacking_blind.md b/doc/8.1.6_hacking_blind.md new file mode 100644 index 0000000..c2f1bab --- /dev/null +++ b/doc/8.1.6_hacking_blind.md @@ -0,0 +1 @@ +# 8.1.6 Hacking Blind diff --git a/doc/8_academic.md b/doc/8_academic.md index d856ebe..4a71d82 100644 --- a/doc/8_academic.md +++ b/doc/8_academic.md @@ -9,6 +9,7 @@ * [8.1.3 Return-Oriented Rootkits: Bypassing Kernel Code Integrity Protection Mechanisms](8.1.3_return-oriented_rootkits.md) * [8.1.4 ROPdefender: A Detection Tool to Defend Against Return-Oriented Programming Attacks](8.1.4_ropdefender.md) * [8.1.5 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks](8.1.5_data-oriented_programming.md) + * [8.1.6 Hacking Blind](8.1.6_hacking_blind.md) * Symbolic Execution * [8.2.1 All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution (but might have been afraid to ask)](8.2.1_dynamic_taint_analysis.md) * [8.2.2 Symbolic Execution for Software Testing: Three Decades Later](8.2.2_symbolic_execution_for_software_testing.md)