描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111657354
编辑推荐
(1)FlappyPig战队是国内 CTF战队,曾获数十个各级CTF竞赛冠亚季军,包括,CTF联赛总冠军、XNUCA总决赛冠军、CISCN冠军、TCTF/0CTF(Defcon外卡赛)冠军、WCTF世界黑客大师挑战赛季军,Defcon总决赛*好成绩第10名。
(2)从安全技术、解题方法、竞赛技巧3大方向全面展开,引导读者学习6大类安全技术、常见CTF题型及其解题方法、各类竞赛模式技巧。
(3)内容结构上,依据CTF竞赛的知识点类别,分别从易至难进行了基础知识的讲解和真题的练习;实用性方面,不仅适合初学者,还可作为CTF选手的工具用书,面对复杂问题时,通过梳理题目类别和逻辑,按照书中结构寻找题目突破点,具有较高的实用价值。
(4)写作方式上,结合题目内容,将晦涩难懂的数学知识和计算机技术原理转换为通俗易懂的语言进行描述;行文风格上,逻辑严密,语言清晰,详细介绍了各类CTF问题的本质。
(2)从安全技术、解题方法、竞赛技巧3大方向全面展开,引导读者学习6大类安全技术、常见CTF题型及其解题方法、各类竞赛模式技巧。
(3)内容结构上,依据CTF竞赛的知识点类别,分别从易至难进行了基础知识的讲解和真题的练习;实用性方面,不仅适合初学者,还可作为CTF选手的工具用书,面对复杂问题时,通过梳理题目类别和逻辑,按照书中结构寻找题目突破点,具有较高的实用价值。
(4)写作方式上,结合题目内容,将晦涩难懂的数学知识和计算机技术原理转换为通俗易懂的语言进行描述;行文风格上,逻辑严密,语言清晰,详细介绍了各类CTF问题的本质。
内容简介
内容简介
本书由国内老牌CTF战队FlappyPig撰写,战队成员曾多次荣获XCTF国际联赛冠军、TCTF/0CTF冠军、WCTF世界黑客大师挑战赛季军,多次入围Defcon全球总决赛,具有丰富的实战经验。
本书围绕CTF竞赛需要的安全技术、解题方法和竞赛技巧3个维度展开,旨在通过作者扎实的技术功底和丰富的竞赛经验,引领对CTF竞赛感兴趣的读者快速入门。书中依据CTF竞赛的特点,分别从Web、Reverse、PWN、Crypto、APK、IoT这六个方面系统地对CTF竞赛的知识点、模式、技巧进行了深入讲解,每一篇都搭配历年真题,帮助读者加深理解。
全书一共分六篇。
Web篇(第1~8章)
主要讲解CTF比赛中Web类型题目的一些基础知识点与常用的工具和插件,这些知识点和工具也可以用于部分渗透测试的实战中。
Reverse篇(第9~10章)
主要对CTF中逆向分析的主要方法、常用分析工具、逆向分析技术和破解方法进行讲解,帮助读者提高逆向分析能力。
PWN篇(第11~17章)
对PWN二进制漏洞挖掘利用的详细分析,主要讲解了针对各种漏洞的利用方法和利用技巧,作者可以结合实例题目加深理解。
Crypto篇(第18~22章)
对Crypto类型题目的知识和例题讲解,主要从概述、编码、古典密码、现代密码以及真题解析几个方向进行叙述。
APK篇(第23~25章)
讲解CTF中的APK的相关内容,主要从APK的基础知识点、Dalvik层的逆向分析技术,以及Native层的逆向分析技术三个方面介绍APK题目的寄出内容、解题方法和竞赛技巧。
IoT篇(第26~30章)
对IoT类型题目的讲解,内容涉及IoT、无线通信的基础知识和相关题型的解题技巧,帮助大家培养解决IoT相关题目的能力。
本书由国内老牌CTF战队FlappyPig撰写,战队成员曾多次荣获XCTF国际联赛冠军、TCTF/0CTF冠军、WCTF世界黑客大师挑战赛季军,多次入围Defcon全球总决赛,具有丰富的实战经验。
本书围绕CTF竞赛需要的安全技术、解题方法和竞赛技巧3个维度展开,旨在通过作者扎实的技术功底和丰富的竞赛经验,引领对CTF竞赛感兴趣的读者快速入门。书中依据CTF竞赛的特点,分别从Web、Reverse、PWN、Crypto、APK、IoT这六个方面系统地对CTF竞赛的知识点、模式、技巧进行了深入讲解,每一篇都搭配历年真题,帮助读者加深理解。
全书一共分六篇。
Web篇(第1~8章)
主要讲解CTF比赛中Web类型题目的一些基础知识点与常用的工具和插件,这些知识点和工具也可以用于部分渗透测试的实战中。
Reverse篇(第9~10章)
主要对CTF中逆向分析的主要方法、常用分析工具、逆向分析技术和破解方法进行讲解,帮助读者提高逆向分析能力。
PWN篇(第11~17章)
对PWN二进制漏洞挖掘利用的详细分析,主要讲解了针对各种漏洞的利用方法和利用技巧,作者可以结合实例题目加深理解。
Crypto篇(第18~22章)
对Crypto类型题目的知识和例题讲解,主要从概述、编码、古典密码、现代密码以及真题解析几个方向进行叙述。
APK篇(第23~25章)
讲解CTF中的APK的相关内容,主要从APK的基础知识点、Dalvik层的逆向分析技术,以及Native层的逆向分析技术三个方面介绍APK题目的寄出内容、解题方法和竞赛技巧。
IoT篇(第26~30章)
对IoT类型题目的讲解,内容涉及IoT、无线通信的基础知识和相关题型的解题技巧,帮助大家培养解决IoT相关题目的能力。
目 录
前 言
篇 CTF之Web
第1章 常用工具安装及使用 2
1.1 Burp Suite 2
1.2 Sqlmap 8
1.3 浏览器与插件 9
1.4 Nmap 11
第2章 SQL注入攻击 13
2.1 什么是SQL注入 13
2.2 可以联合查询的SQL注入 14
2.3 报错注入 14
2.4 Bool 盲注 16
2.5 时间盲注 17
2.6 二次注入 18
2.7 limit之后的注入 20
2.8 注入点的位置及发现 20
2.9 绕过 21
2.10 SQL读写文件 24
2.11 小结 24
第3章 跨站脚本攻击 25
3.1 概述 25
3.2 常见XSS漏洞分类 25
3.3 防护与绕过 29
3.4 危害与利用技巧 38
3.5 实例 40
第4章 服务端请求伪造 42
4.1 如何形成 42
4.2 防护绕过 43
4.3 危害与利用技巧 43
4.4 实例 46
第5章 利用特性进行攻击 48
5.1 PHP语言特性 48
5.1.1 弱类型48
5.1.2 反序列化漏洞49
5.1.3 截断51
5.1.4 伪协议51
5.1.5 变量覆盖52
5.1.6 防护绕过54
5.2 Windows系统特性 54
第6章 代码审计 56
6.1 源码泄露 56
6.2 代码审计的方法与技巧 61
第7章 条件竞争 67
7.1 概述 67
7.2 条件竞争问题分析及测试 68
第8章 案 例 解 析 73
8.1 NSCTF 2015 Web实例 73
8.2 湖湘杯2016线上选拔赛Web实例 75
8.3 0CTF 2017 Web实例 79
8.4 2019 WCTF 大师赛赛题剖析:P-door 80
本篇小结 87
第二篇 CTF之Reverse
第9章 Reverse 概述 90
9.1 逆向分析的主要方法 90
9.2 汇编指令体系结构 91
9.2.1 x86指令体系91
9.2.2 x64指令体系92
9.3 逆向分析工具介绍 93
9.3.1 反汇编和反编译工具93
9.3.2 调试器97
9.3.3 Trace类工具100
第10章 Reverse 分析 102
10.1 常规逆向分析流程 102
10.1.1 关键代码定位102
10.1.2 常见加密算法识别104
10.1.3 求解flag109
10.2 自动化逆向 113
10.2.1 IDAPython114
10.2.2 PythonGdb114
10.2.3 pydbg115
10.2.4 Angr115
10.3 干扰分析技术及破解方法 116
10.3.1 花指令116
10.3.2 反调试117
10.3.3 加壳119
10.3.4 控制流混淆121
10.3.5 双进程保护124
10.3.6 虚拟机保护127
10.4 脚本语言的逆向 132
10.4.1 .NET程序逆向132
10.4.2 Python程序逆向135
10.4.3 Java程序逆向137
本篇小结 139
第三篇 CTF之PWN
第11章 PWN 基础 142
11.1 基本工具 142
11.2 保护机制 143
11.3 PWN类型 143
11.4 常见利用方法 144
11.5 程序内存布局 149
11.6 真题解析 150
第12章 栈相关漏洞 166
12.1 栈介绍 166
12.1.1 函数栈的调用机制167
12.1.2 函数参数传递168
12.2 栈溢出 169
12.2.1 基本概念169
12.2.2 覆盖栈缓冲区的具体用途170
12.3 栈的特殊利用 177
12.4 栈喷射 177
12.5 线程栈 178
12.6 真题解析 184
12.6.1 {ZCTF-2015} guess(PWN100)184
12.6.2 {ZCTF-2015} spell (PWN300)187
12.6.3 {Codegate-2015} Chess(PWN700)189
12.6.4 {RCTF-2015} Welpwn(PWN200)196
第13章 堆相关漏洞 198
13.1 堆介绍 198
13.1.1 堆基本数据结构chunk198
13.1.2 堆空闲块管理结构bin200
13.1.3 malloc基本规则201
13.1.4 free基本规则201
13.1.5 tcache202
13.2 漏洞类型 204
13.3 利用方法 206
13.3.1 基本的堆利用206
13.3.2 unlink208
13.3.3 fastbin attack211
13.3.4 forgotten chunk212
13.3.5 house of force217
13.3.6 house of spirit218
13.3.7 house of orange218
13.3.8 堆喷射224
13.3.9 更多堆利用技巧224
13.4 真题解析 225
第14章 格式化字符串漏洞 244
14.1 基本概念 244
14.2 信息泄露与修改 245
14.3 额外技巧 249
14.4 真题解析 254
14.4.1 {CCTF-2016} PWN3(PWN350)254
14.4.2 {RCTF-2015} nobug(PWN300)256
14.4.3 {LCTF-2016} PWN200258
第15章 整型漏洞 261
15.1 宽度溢出 261
15.2 符号转换 263
15.3 数组越界 264
15.4 真题解析 265
第16章 逻辑漏洞 269
16.1 基本概念 269
16.2 竞态条件漏洞 269
16.3 真题解析 271
第17章 Attack&Defense模式 273
17.1 修补方案 273
17.1.1 大小修改法273
17.1.2 函数替换法275
17.1.3 .eh_frame 段Patch法276
17.1.4 其他方法277
17.2 攻防策略 277
相关知识链接推荐 278
本篇小结 279
第四篇 CTF之Crypto
第18章 Crypto 概述 282
第19章 编码 284
19.1 hex 284
19.2 urlencode 286
19.3 morsecode 286
19.4 jsfuck 289
19.5 uuencode 291
19.6 base家族 291
第20章 古典密码 294
20.1 移位密码 294
20.1.1 简单移位密码 294
20.1.2 路密码 296
20.1.3 云影密码 296
20.1.4 栅栏密码 296
20.2 替代密码 298
20.2.1 单表替代密码 298
20.2.2 多表替代密码 303
第21章 现代密码 309
21.1 分组密码和序列密码 309
21.1.1 DES/AES基本加解密 309
21.1.2 分组密码CBC bit翻转攻击 310
21.1.3 分组密码CBC选择密文攻击 312
21.1.4 分组密码CBC padding oracle攻击 312
21.1.5 Feistel结构分析 313
21.1.6 攻击伪随机数发生器 314
21.2 公钥密码 319
21.2.1 RSA基础 319
21.2.2 直接模数分解 320
21.2.3 费马分解和Pollard_rho分解 322
21.2.4 公约数模数分解 325
21.2.5 其他模数分解方式 327
21.2.6 小指数明文爆破 329
21.2.7 选择密文攻击 330
21.2.8 LLL-attack 330
21.2.9 Wiener Attack & Boneh Durfee Attack 334
21.2.10 共模攻击 338
21.2.11 广播攻击 340
21.2.12 相关消息攻击 342
21.2.13 DSA 343
21.3 哈希 344
21.3.1 哈希碰撞 344
21.3.2 哈希长度扩展攻击 345
第22章 真题解析 348
22.1 SUPEREXPRESS 348
22.2 VIGENERE 350
22.3 Revolver 357
22.4 Railgun 362
本篇小结 365
第五篇 CTF之APK
第23章 APK基础 368
23.1 Android题目类型 368
23.2 Android基本架构 368
23.2.1 Android的Dalvik虚拟机 369
23.2.2 Native层 369
23.3 ARM架构基础知识 369
23.3.1 函数调用/跳转指令 370
23.3.2 出栈入栈指令 371
23.3.3 保存/恢复寄存器的值 371
23.4 adb 371
23.5 APK文件格式 372
第24章 Dalvik层逆向分析 373
24.1 Dalvik基础知识 373
24.1.1 寄存器 374
24.1.2 类型 374
24.1.3 方法 375
24.1.4 指令特点 375
24.2 静态分析 376
24.2.1 使用Apktool反编译APK程序 376
24.2.2 使用dex2jar生成jar文件 379
24.2.3 使用jd-gui查看反编译的Java代码 380
24.2.4 使用FernFlower反编译Jar文件 381
24.2.5 使用Android Killer / jadx / APK Studio逆向分析平台 381
24.2.6 使用JEB进行静态分析 388
24.2.7 其他的静态分析软件 393
24.3 动态调试 394
24.3.1 使用log调试 394
24.3.2 smali动态调试 396
24.3.3 使用Xposed框架Hook进程 400
24.3.4 使用Frida框架Hook进程 405
24.4 Dalvik层混淆及加固技术 409
24.4.1 ProGuard混淆 409
24.4.2 DEX破坏 409
24.4.3 APK伪加密 410
24.4.4 APK增加数据 410
24.4.5 DEX隐藏 410
第25章 Native层逆向 411
25.1 Native层介绍 411
25.1.1 正向—使用NDK编写Native层应用 411
25.1.2 JNI调用特征分析 413
25.2 使用IDA Pro静态分析 419
25.3 动态调试 423
25.3.1 使用IDA Pro进行动态调试 423
25.3.2 使用GDB进行动态调试 425
25.3.3 使用Frida框架HOOK进程 428
25.4 OLLVM混淆及加固技术 430
25.4.1 -fla 431
25.4.2 -bcf 432
25.4.3 -sub 434
本篇小结 436
第六篇 CTF之IoT
第26章 IoT基础知识 438
26.1 什么是IoT 438
26.2 什么是嵌入式系统 439
26.3 嵌入式系统的基本概念 439
26.4 CTF中常见的IoT题型归类 441
第27章 IoT固件逆向工程 443
27.1 常见IoT架构介绍 443
27.2 芯片手册的寻找与阅读 446
27.3 使用IDA手动寻找固件入口点 450
27.4 寄存器地址和SRAM地址的处理方法 453
27.5 IDA之CPU高级选项 456
27.6 动态调试环境搭建 458
27.7 专业调试工具 459
27.8 反编译工具 469
第28章 固件结构分析 470
28.1 常见固件类型 470
28.2 Flash文件系统 471
28.3 固件基地址确定方法 471
28.4 固件分析工具 473
第29章 无线信号分析 475
29.1 无线通信基本理论介绍 475
29.2 常见调制方式与解调方法 476
29.3 Matlab在数字信号处理中的应用 478
第30章 经典赛题讲解 483
30.1 PCTF2016:Confused ARM 483
30.2 UCTF2016资格赛:TWI 486
30.3 UCTF2016决赛:Normandie 491
30.4 ACTF2016:4G Radio 498
30.5 UCTF2016资格赛:传感器(1)(2) 500
30.6 UCTF2016资格赛:Add 502
本篇小结 506
篇 CTF之Web
第1章 常用工具安装及使用 2
1.1 Burp Suite 2
1.2 Sqlmap 8
1.3 浏览器与插件 9
1.4 Nmap 11
第2章 SQL注入攻击 13
2.1 什么是SQL注入 13
2.2 可以联合查询的SQL注入 14
2.3 报错注入 14
2.4 Bool 盲注 16
2.5 时间盲注 17
2.6 二次注入 18
2.7 limit之后的注入 20
2.8 注入点的位置及发现 20
2.9 绕过 21
2.10 SQL读写文件 24
2.11 小结 24
第3章 跨站脚本攻击 25
3.1 概述 25
3.2 常见XSS漏洞分类 25
3.3 防护与绕过 29
3.4 危害与利用技巧 38
3.5 实例 40
第4章 服务端请求伪造 42
4.1 如何形成 42
4.2 防护绕过 43
4.3 危害与利用技巧 43
4.4 实例 46
第5章 利用特性进行攻击 48
5.1 PHP语言特性 48
5.1.1 弱类型48
5.1.2 反序列化漏洞49
5.1.3 截断51
5.1.4 伪协议51
5.1.5 变量覆盖52
5.1.6 防护绕过54
5.2 Windows系统特性 54
第6章 代码审计 56
6.1 源码泄露 56
6.2 代码审计的方法与技巧 61
第7章 条件竞争 67
7.1 概述 67
7.2 条件竞争问题分析及测试 68
第8章 案 例 解 析 73
8.1 NSCTF 2015 Web实例 73
8.2 湖湘杯2016线上选拔赛Web实例 75
8.3 0CTF 2017 Web实例 79
8.4 2019 WCTF 大师赛赛题剖析:P-door 80
本篇小结 87
第二篇 CTF之Reverse
第9章 Reverse 概述 90
9.1 逆向分析的主要方法 90
9.2 汇编指令体系结构 91
9.2.1 x86指令体系91
9.2.2 x64指令体系92
9.3 逆向分析工具介绍 93
9.3.1 反汇编和反编译工具93
9.3.2 调试器97
9.3.3 Trace类工具100
第10章 Reverse 分析 102
10.1 常规逆向分析流程 102
10.1.1 关键代码定位102
10.1.2 常见加密算法识别104
10.1.3 求解flag109
10.2 自动化逆向 113
10.2.1 IDAPython114
10.2.2 PythonGdb114
10.2.3 pydbg115
10.2.4 Angr115
10.3 干扰分析技术及破解方法 116
10.3.1 花指令116
10.3.2 反调试117
10.3.3 加壳119
10.3.4 控制流混淆121
10.3.5 双进程保护124
10.3.6 虚拟机保护127
10.4 脚本语言的逆向 132
10.4.1 .NET程序逆向132
10.4.2 Python程序逆向135
10.4.3 Java程序逆向137
本篇小结 139
第三篇 CTF之PWN
第11章 PWN 基础 142
11.1 基本工具 142
11.2 保护机制 143
11.3 PWN类型 143
11.4 常见利用方法 144
11.5 程序内存布局 149
11.6 真题解析 150
第12章 栈相关漏洞 166
12.1 栈介绍 166
12.1.1 函数栈的调用机制167
12.1.2 函数参数传递168
12.2 栈溢出 169
12.2.1 基本概念169
12.2.2 覆盖栈缓冲区的具体用途170
12.3 栈的特殊利用 177
12.4 栈喷射 177
12.5 线程栈 178
12.6 真题解析 184
12.6.1 {ZCTF-2015} guess(PWN100)184
12.6.2 {ZCTF-2015} spell (PWN300)187
12.6.3 {Codegate-2015} Chess(PWN700)189
12.6.4 {RCTF-2015} Welpwn(PWN200)196
第13章 堆相关漏洞 198
13.1 堆介绍 198
13.1.1 堆基本数据结构chunk198
13.1.2 堆空闲块管理结构bin200
13.1.3 malloc基本规则201
13.1.4 free基本规则201
13.1.5 tcache202
13.2 漏洞类型 204
13.3 利用方法 206
13.3.1 基本的堆利用206
13.3.2 unlink208
13.3.3 fastbin attack211
13.3.4 forgotten chunk212
13.3.5 house of force217
13.3.6 house of spirit218
13.3.7 house of orange218
13.3.8 堆喷射224
13.3.9 更多堆利用技巧224
13.4 真题解析 225
第14章 格式化字符串漏洞 244
14.1 基本概念 244
14.2 信息泄露与修改 245
14.3 额外技巧 249
14.4 真题解析 254
14.4.1 {CCTF-2016} PWN3(PWN350)254
14.4.2 {RCTF-2015} nobug(PWN300)256
14.4.3 {LCTF-2016} PWN200258
第15章 整型漏洞 261
15.1 宽度溢出 261
15.2 符号转换 263
15.3 数组越界 264
15.4 真题解析 265
第16章 逻辑漏洞 269
16.1 基本概念 269
16.2 竞态条件漏洞 269
16.3 真题解析 271
第17章 Attack&Defense模式 273
17.1 修补方案 273
17.1.1 大小修改法273
17.1.2 函数替换法275
17.1.3 .eh_frame 段Patch法276
17.1.4 其他方法277
17.2 攻防策略 277
相关知识链接推荐 278
本篇小结 279
第四篇 CTF之Crypto
第18章 Crypto 概述 282
第19章 编码 284
19.1 hex 284
19.2 urlencode 286
19.3 morsecode 286
19.4 jsfuck 289
19.5 uuencode 291
19.6 base家族 291
第20章 古典密码 294
20.1 移位密码 294
20.1.1 简单移位密码 294
20.1.2 路密码 296
20.1.3 云影密码 296
20.1.4 栅栏密码 296
20.2 替代密码 298
20.2.1 单表替代密码 298
20.2.2 多表替代密码 303
第21章 现代密码 309
21.1 分组密码和序列密码 309
21.1.1 DES/AES基本加解密 309
21.1.2 分组密码CBC bit翻转攻击 310
21.1.3 分组密码CBC选择密文攻击 312
21.1.4 分组密码CBC padding oracle攻击 312
21.1.5 Feistel结构分析 313
21.1.6 攻击伪随机数发生器 314
21.2 公钥密码 319
21.2.1 RSA基础 319
21.2.2 直接模数分解 320
21.2.3 费马分解和Pollard_rho分解 322
21.2.4 公约数模数分解 325
21.2.5 其他模数分解方式 327
21.2.6 小指数明文爆破 329
21.2.7 选择密文攻击 330
21.2.8 LLL-attack 330
21.2.9 Wiener Attack & Boneh Durfee Attack 334
21.2.10 共模攻击 338
21.2.11 广播攻击 340
21.2.12 相关消息攻击 342
21.2.13 DSA 343
21.3 哈希 344
21.3.1 哈希碰撞 344
21.3.2 哈希长度扩展攻击 345
第22章 真题解析 348
22.1 SUPEREXPRESS 348
22.2 VIGENERE 350
22.3 Revolver 357
22.4 Railgun 362
本篇小结 365
第五篇 CTF之APK
第23章 APK基础 368
23.1 Android题目类型 368
23.2 Android基本架构 368
23.2.1 Android的Dalvik虚拟机 369
23.2.2 Native层 369
23.3 ARM架构基础知识 369
23.3.1 函数调用/跳转指令 370
23.3.2 出栈入栈指令 371
23.3.3 保存/恢复寄存器的值 371
23.4 adb 371
23.5 APK文件格式 372
第24章 Dalvik层逆向分析 373
24.1 Dalvik基础知识 373
24.1.1 寄存器 374
24.1.2 类型 374
24.1.3 方法 375
24.1.4 指令特点 375
24.2 静态分析 376
24.2.1 使用Apktool反编译APK程序 376
24.2.2 使用dex2jar生成jar文件 379
24.2.3 使用jd-gui查看反编译的Java代码 380
24.2.4 使用FernFlower反编译Jar文件 381
24.2.5 使用Android Killer / jadx / APK Studio逆向分析平台 381
24.2.6 使用JEB进行静态分析 388
24.2.7 其他的静态分析软件 393
24.3 动态调试 394
24.3.1 使用log调试 394
24.3.2 smali动态调试 396
24.3.3 使用Xposed框架Hook进程 400
24.3.4 使用Frida框架Hook进程 405
24.4 Dalvik层混淆及加固技术 409
24.4.1 ProGuard混淆 409
24.4.2 DEX破坏 409
24.4.3 APK伪加密 410
24.4.4 APK增加数据 410
24.4.5 DEX隐藏 410
第25章 Native层逆向 411
25.1 Native层介绍 411
25.1.1 正向—使用NDK编写Native层应用 411
25.1.2 JNI调用特征分析 413
25.2 使用IDA Pro静态分析 419
25.3 动态调试 423
25.3.1 使用IDA Pro进行动态调试 423
25.3.2 使用GDB进行动态调试 425
25.3.3 使用Frida框架HOOK进程 428
25.4 OLLVM混淆及加固技术 430
25.4.1 -fla 431
25.4.2 -bcf 432
25.4.3 -sub 434
本篇小结 436
第六篇 CTF之IoT
第26章 IoT基础知识 438
26.1 什么是IoT 438
26.2 什么是嵌入式系统 439
26.3 嵌入式系统的基本概念 439
26.4 CTF中常见的IoT题型归类 441
第27章 IoT固件逆向工程 443
27.1 常见IoT架构介绍 443
27.2 芯片手册的寻找与阅读 446
27.3 使用IDA手动寻找固件入口点 450
27.4 寄存器地址和SRAM地址的处理方法 453
27.5 IDA之CPU高级选项 456
27.6 动态调试环境搭建 458
27.7 专业调试工具 459
27.8 反编译工具 469
第28章 固件结构分析 470
28.1 常见固件类型 470
28.2 Flash文件系统 471
28.3 固件基地址确定方法 471
28.4 固件分析工具 473
第29章 无线信号分析 475
29.1 无线通信基本理论介绍 475
29.2 常见调制方式与解调方法 476
29.3 Matlab在数字信号处理中的应用 478
第30章 经典赛题讲解 483
30.1 PCTF2016:Confused ARM 483
30.2 UCTF2016资格赛:TWI 486
30.3 UCTF2016决赛:Normandie 491
30.4 ACTF2016:4G Radio 498
30.5 UCTF2016资格赛:传感器(1)(2) 500
30.6 UCTF2016资格赛:Add 502
本篇小结 506
前 言
为什么写这本书
撰写本书的想法起源于我和麦香的一次思想碰撞。每一个CTF战队的发展其实都面临着一个问题,那就是“如何传承”。作为一个联合战队,随着老成员走向工作岗位,如何用良好的机制实现新老更替,是战队管理者需要认真考虑的问题。我们也尝试过在社会上公开招募成员,但是从他们实习期的表现来看,这种方式是很难获得优秀血液的。战队在学校也做了很多招新和培养的尝试,很多学生咨询如何学习CTF。我们会耐心地询问他们的情况,然后讲述自己当时是如何学习的,并且推荐一些方法。但是我们发现,很多人并没有耐心和足够的时间学习,而是想一步登天。CTF是一门偏重于实践的学问,仅靠读一本书、一篇论文,或者学一门课是远远不够的,它需要足够的兴趣和精力,不停地做题、实战、锻炼,并没有捷径可走。
道理虽然如此,但是对于初学者来说,缺少入门指引就会感到迷茫,不知道去做什么题,也不知道去学什么。因此我就产生了一个想法—写一本书带领新人入门CTF。我将该想法告诉“猪群”(战队群)中的成员,结果麦香说他也想到了写书的事情(可谓心有灵犀)。于是我们将CTF的知识按照题目类型进行了分类,然后根据战队中每个人的专长,将每一篇交由合适的人来负责撰写,于是本书就诞生了。
本书特色
本书主要从Web、Reverse、PWN、Crypto、APK、IoT 6个方面对CTF的入门知识、学习方法和常见题型进行了介绍,并且结合实际题目对相关知识点进行讲解,同时结合线上赛、线下赛对竞赛技巧进行了总结。从定位上来说,本书并不能让读者读完就成为“职业竞技选手”,而是希望读者能够从本书中知道自己对哪些方面感兴趣,要进一步学习哪些方面的知识,达到CTF入门的目的。因此,本书面向的人群是CTF的初学者。当然,如果有经验的读者想要跨领域学习其他类型的题目的解法,也可以从本书中获取一些灵感。
阅读本书之前,首先建议读者认真思考以后想要深入研究的领域,是成为一名Web选手,还是成为一名PWN选手。如果想要成为一名Web选手,则推荐先从W3CSchool开始学起,再来阅读本书的Web章节, 后学习Crypto章节。如果想要成为一名PWN选手,那么必须先掌握计算机组成原理、操作系统、汇编语言三门课程,然后再来看本书的PWN章节、Reverse章节、APK章节、Crypto章节, 后还应学习IoT章节。
学习CTF并不是一朝一夕的事情,但也不需要花费三年五载才能入门。大家平时工作、学习的任务也非常繁重,很难静下心来专门抽出大量的时间来刷题,那么每一场CTF竞赛就显得额外关键了。认真参加每一场CTF竞赛就可以得到快速提升,没有必要平常刻意进行题海训练(当然,如果有闲暇时间多做一做会更好)。几乎每周都有一场CTF比赛,大家可积极参与,不一定非要取得名次。通过边学边做的方式可以解答一批题目,至于其他的题目,线下赛一定要多看别人的Writeup,因为对Writeup的学习才是 迅速的提升方式。这样下来,半年之内基本上就可以打进国内的很多决赛了。很多人参赛时不会做题目,也不愿意学习别人的Writeup,那么就失去了参加这场竞赛的意义,个人能力也很难得到提升。
资源获取及反馈
本书中所列举的题目大部分是战队自己出的,也包括一些国外的题目,并且搭载在汪神的OJ上(https://www.jarvisoj.com)。本书的每一篇均由不同的作者撰写,所以行文风格会有所不同。书中难免会出现错误,如果发现问题可以及时与我们联络:[email protected]。
战队介绍
战队于2014年组建,目前主要以与Eur3ka组成联队r3kapig的方式进行竞赛,战队的主要精力集中在国际赛事和国内优秀赛事上。感谢在战队创立之初一起拼搏的ling、lu、小墨、医生师傅、hu狗,感谢为战队成长和本书撰写做出巨大努力的白师傅、丁满、joker、汪神、pxx、石总、兰斯、muhe、chu牛、bendawang、lowkey、猪头、simple、蛋总、flier、swings、老鼠,感谢麦香促使写书任务完成。
CTF赛制介绍
初的CTF赛制就是Jeopardy赛制(还有若干变种)。这种赛制采用解题模式,解出一道题目提交flag就可得分。后来出现了AD(Attack&Defense)赛制,在AD赛制中,每支队伍维护一台或若干台gamebox,每支队伍维护的gamebox上都有相同的题目服务。每个服务的启用权限均是题目的权限,选手能拿到的权限略高于题目的权限,则可以进行后门清理等操作,也可以替换题目的bin文件,用于patch。主办方有root权限。主办方每间隔固定时间(5~20分钟)都会针对每道题目向gamebox推送一个flag。不同题目的权限无法访问相互的flag。选手通过PWN掉服务,获取对应题目的flag值并提交。同一支队伍的flag分每轮都是固定的,如果被多个队伍获取,则均分。主办方会针对每道题编写若干检查器来判断服务是否正常运行。如果题目被判定失效,那么该题也会扣分。通常来说,与题目flag每轮的服务一样,这个分数会被所有没有判定失效的队伍均分,这种计分方式被称为零和赛制。零和赛制下,AD出现了很多弊端,因此社区正在不断地对AD赛制进行更新。Defcon Final作为先行者推出了非零和的计分方法,并通过Git的方式对赛题进行运维,这使得选手只须拿出少量精力放到metagame上,而把更多的精力放到题目本身上。目前来说,社区更倾向于采用单纯的Jeopardy赛制,因为对于CTF来说,题目本身比赛制重要得多。
撰写本书的想法起源于我和麦香的一次思想碰撞。每一个CTF战队的发展其实都面临着一个问题,那就是“如何传承”。作为一个联合战队,随着老成员走向工作岗位,如何用良好的机制实现新老更替,是战队管理者需要认真考虑的问题。我们也尝试过在社会上公开招募成员,但是从他们实习期的表现来看,这种方式是很难获得优秀血液的。战队在学校也做了很多招新和培养的尝试,很多学生咨询如何学习CTF。我们会耐心地询问他们的情况,然后讲述自己当时是如何学习的,并且推荐一些方法。但是我们发现,很多人并没有耐心和足够的时间学习,而是想一步登天。CTF是一门偏重于实践的学问,仅靠读一本书、一篇论文,或者学一门课是远远不够的,它需要足够的兴趣和精力,不停地做题、实战、锻炼,并没有捷径可走。
道理虽然如此,但是对于初学者来说,缺少入门指引就会感到迷茫,不知道去做什么题,也不知道去学什么。因此我就产生了一个想法—写一本书带领新人入门CTF。我将该想法告诉“猪群”(战队群)中的成员,结果麦香说他也想到了写书的事情(可谓心有灵犀)。于是我们将CTF的知识按照题目类型进行了分类,然后根据战队中每个人的专长,将每一篇交由合适的人来负责撰写,于是本书就诞生了。
本书特色
本书主要从Web、Reverse、PWN、Crypto、APK、IoT 6个方面对CTF的入门知识、学习方法和常见题型进行了介绍,并且结合实际题目对相关知识点进行讲解,同时结合线上赛、线下赛对竞赛技巧进行了总结。从定位上来说,本书并不能让读者读完就成为“职业竞技选手”,而是希望读者能够从本书中知道自己对哪些方面感兴趣,要进一步学习哪些方面的知识,达到CTF入门的目的。因此,本书面向的人群是CTF的初学者。当然,如果有经验的读者想要跨领域学习其他类型的题目的解法,也可以从本书中获取一些灵感。
阅读本书之前,首先建议读者认真思考以后想要深入研究的领域,是成为一名Web选手,还是成为一名PWN选手。如果想要成为一名Web选手,则推荐先从W3CSchool开始学起,再来阅读本书的Web章节, 后学习Crypto章节。如果想要成为一名PWN选手,那么必须先掌握计算机组成原理、操作系统、汇编语言三门课程,然后再来看本书的PWN章节、Reverse章节、APK章节、Crypto章节, 后还应学习IoT章节。
学习CTF并不是一朝一夕的事情,但也不需要花费三年五载才能入门。大家平时工作、学习的任务也非常繁重,很难静下心来专门抽出大量的时间来刷题,那么每一场CTF竞赛就显得额外关键了。认真参加每一场CTF竞赛就可以得到快速提升,没有必要平常刻意进行题海训练(当然,如果有闲暇时间多做一做会更好)。几乎每周都有一场CTF比赛,大家可积极参与,不一定非要取得名次。通过边学边做的方式可以解答一批题目,至于其他的题目,线下赛一定要多看别人的Writeup,因为对Writeup的学习才是 迅速的提升方式。这样下来,半年之内基本上就可以打进国内的很多决赛了。很多人参赛时不会做题目,也不愿意学习别人的Writeup,那么就失去了参加这场竞赛的意义,个人能力也很难得到提升。
资源获取及反馈
本书中所列举的题目大部分是战队自己出的,也包括一些国外的题目,并且搭载在汪神的OJ上(https://www.jarvisoj.com)。本书的每一篇均由不同的作者撰写,所以行文风格会有所不同。书中难免会出现错误,如果发现问题可以及时与我们联络:[email protected]。
战队介绍
战队于2014年组建,目前主要以与Eur3ka组成联队r3kapig的方式进行竞赛,战队的主要精力集中在国际赛事和国内优秀赛事上。感谢在战队创立之初一起拼搏的ling、lu、小墨、医生师傅、hu狗,感谢为战队成长和本书撰写做出巨大努力的白师傅、丁满、joker、汪神、pxx、石总、兰斯、muhe、chu牛、bendawang、lowkey、猪头、simple、蛋总、flier、swings、老鼠,感谢麦香促使写书任务完成。
CTF赛制介绍
初的CTF赛制就是Jeopardy赛制(还有若干变种)。这种赛制采用解题模式,解出一道题目提交flag就可得分。后来出现了AD(Attack&Defense)赛制,在AD赛制中,每支队伍维护一台或若干台gamebox,每支队伍维护的gamebox上都有相同的题目服务。每个服务的启用权限均是题目的权限,选手能拿到的权限略高于题目的权限,则可以进行后门清理等操作,也可以替换题目的bin文件,用于patch。主办方有root权限。主办方每间隔固定时间(5~20分钟)都会针对每道题目向gamebox推送一个flag。不同题目的权限无法访问相互的flag。选手通过PWN掉服务,获取对应题目的flag值并提交。同一支队伍的flag分每轮都是固定的,如果被多个队伍获取,则均分。主办方会针对每道题编写若干检查器来判断服务是否正常运行。如果题目被判定失效,那么该题也会扣分。通常来说,与题目flag每轮的服务一样,这个分数会被所有没有判定失效的队伍均分,这种计分方式被称为零和赛制。零和赛制下,AD出现了很多弊端,因此社区正在不断地对AD赛制进行更新。Defcon Final作为先行者推出了非零和的计分方法,并通过Git的方式对赛题进行运维,这使得选手只须拿出少量精力放到metagame上,而把更多的精力放到题目本身上。目前来说,社区更倾向于采用单纯的Jeopardy赛制,因为对于CTF来说,题目本身比赛制重要得多。
评论
还没有评论。