目 录
第Ⅰ部分 预 备 知 识
第1章 灰帽黑客 3
1.1 灰帽黑客概述 3
1.1.1 黑客的历史 4
1.1.2 道德黑客的历史 6
1.1.3 漏洞披露的历史 6
1.2 漏洞赏金计划 10
1.2.1 激励措施 10
1.2.2 围绕漏洞赏金计划所引发的争议 10
1.3 了解敌人:黑帽黑客 11
1.3.1 高级持续威胁 11
1.3.2 Lockheed Martin公司的网络杀伤链 11
1.3.3 网络杀伤链的行动路线 13
1.3.4 MITRE ATT&CK框架 15
1.4 总结 18
第2章 编程必备技能 19
2.1 C程序设计语言 19
2.1.1 C语言程序代码的基本结构 19
2.1.2 程序代码示例 27
2.1.3 使用gcc编译 28
2.2 计算机存储器 29
2.2.1 随机存取存储器 30
2.2.2 字节序 30
2.2.3 内存分段 30
2.2.4 内存中的程序代码 31
2.2.5 缓冲区 32
2.2.6 内存中的字符串 32
2.2.7 指针 33
2.2.8 存储器知识小结 33
2.3 Intel处理器 34
2.4 汇编语言基础 35
2.4.1 机器语言、汇编语言和C语言 36
2.4.2 AT&T与NASM 36
2.4.3 寻址模式 39
2.4.4 汇编文件结构 39
2.5 运用gdb调试 40
2.6 Python编程必备技能 44
2.6.1 获取Python 44
2.6.2 Python对象 45
2.7 总结 53
第3章 Linux漏洞利用研发工具集 55
3.1 二进制动态信息收集工具 55
3.1.1 实验3-1: Hello.c 55
3.1.2 实验3-2: ldd 56
3.1.3 实验3-3: objdump 56
3.1.4 实验3-4: strace 58
3.1.5 实验3-5: ltrace 59
3.1.6 实验3-6: checksec 60
3.1.7 实验3-7: libc-database 60
3.1.8 实验3-8: patchelf 61
3.1.9 实验3-9: one_gadget 62
3.1.10 实验3-10: Ropper 63
3.2 运用Python扩展gdb 64
3.3 Pwntools CTF框架和漏洞利用程序研发库 64
3.3.1 功能总结 65
3.3.2 实验3-11: leak-bof.c 65
3.4 HeapME(Heap Made Easy)堆分析和协作工具 67
3.4.1 安装HeapME工具 67
3.4.2 实验3-12: heapme_demo.c 68
3.5 总结 70
第4章 Ghidra简介 71
4.1 创建首个项目 71
4.2 安装和快速启动 72
4.2.1 设置项目工作区 72
4.2.2 功能阐述 72
4.2.3 实验4-1: 使用注释提高可读性 79
4.2.4 实验4-2: 二进制差异和补丁分析 82
4.3 总结 86
第5章 IDA Pro工具 87
5.1 IDA Pro逆向工程简介 87
5.2 反汇编的概念 88
5.3 IDA Pro功能导航 90
5.4 IDA Pro特性和功能 94
5.4.1 交叉引用(Xrefs) 95
5.4.2 函数调用 95
5.4.3 Proximity浏览器 96
5.4.4 操作码和寻址 97
5.4.5 快捷键 98
5.4.6 注释 99
5.5 使用IDA Pro调试 100
5.6 总结 104
第Ⅱ部分 道德黑客
第6章 红队与紫队 107
6.1 红队简介 107
6.1.1 漏洞扫描 109
6.1.2 漏洞扫描验证 109
6.1.3 渗透测试 110
6.1.4 威胁模拟与仿真 114
6.1.5 紫队 117
6.2 通过红队盈利 117
6.2.1 企业红队 117
6.2.2 红队顾问 118
6.3 紫队的基础 119
6.3.1 紫队的技能 119
6.3.2 紫队活动 120
6.3.3 新兴威胁研究 120
6.3.4 检测工程 121
6.4 总结 121
第7章 指挥与控制(C2) 123
7.1 指挥与控制系统 123
7.1.1 Metasploit 124
7.1.2 PowerShell Empire 127
7.1.3 Covenant工具 128
7.2 混淆有效载荷 132
7.3 创建C#加载器 137
7.3.1 创建Go加载器 139
7.3.2 创建Nim加载器 141
7.4 网络免杀 143
7.4.1 加密技术 143
7.4.2 备用协议 144
7.4.3 C2模板 144
7.5 EDR免杀 145
7.5.1 禁用EDR产品 145
7.5.2 绕过钩子 146
7.6 总结 146
第8章 构建威胁狩猎实验室 147
8.1 威胁狩猎和实验室 147
8.1.1 选择威胁狩猎实验室 147
8.1.2 本章其余部分的方法 148
8.2 基本威胁狩猎实验室:DetectionLab 148
8.2.1 前提条件 148
8.2.2 扩展实验室 154
8.2.3 HELK 155
8.2.4 索引模式 159
8.2.5 基本查询 160
8.3 总结 163
第9章 威胁狩猎简介 165
9.1 威胁狩猎的基础知识 165
9.1.1 威胁狩猎的类型 166
9.1.2 威胁狩猎的工作流程 167
9.1.3 使用OSSEM规范化数据源 167
9.1.4 实验9-1:使用OSSEM可视化数据源 169
9.1.5 实验9-2:AtomicRedTeam攻击方仿真 172
9.2 探索假说驱动的狩猎 174
9.2.1 实验9-3:假说攻击方对SAM文件执行复制行为 175
9.2.2 爬行(Crawl)、行走(Walk)和奔跑(Run) 176
9.3 进入Mordor 177
9.4 威胁猎手行动手册 181
9.5 开始使用HELK 181
9.6 Spark and Jupyter工具 181
9.7 总结 185
第Ⅲ部分 入侵系统
第10章 Linux漏洞利用基础技术 189
10.1 栈操作和函数调用工作程序 189
10.2 缓冲区溢出 191
10.2.1 实验10-1:meet.c溢出 193
10.2.2 缓冲区溢出的后果 196
10.3 本地缓冲区溢出漏洞利用技术 197
10.3.1 实验10-2:漏洞利用的组件 197
10.3.2 实验10-3:在命令行执行栈溢出漏洞利用 198
10.3.3 实验10-4:通过Pwntools编写漏洞利用代码 200
10.3.4 实验10-5:攻击较小长度的缓冲区 201
10.4 漏洞利用程序代码的研发流程 203
10.5 总结 208
第11章 Linux漏洞利用高级技术 209
11.1 实验11-1:漏洞程序代码和环境部署 209
11.1.1 安装GDB 210
11.1.2 覆盖RIP 210
11.2 实验11-2:使用面向返回编程(ROP)绕过不可执行栈(NX) 212
11.3 实验11-3:击败栈预警 215
11.4 实验11-4:利用信息泄露绕过ASLR 219
11.4.1 第1阶段 219
11.4.2 第2阶段 219
11.5 实验11-5:利用信息泄露绕过PIE 220
11.6 总结 222
第12章 Linux内核漏洞利用技术 223
12.1 实验12-1:环境设置和脆弱的procfs模块 223
12.1.1 安装GDB 224
12.1.2 覆盖RIP 226
12.2 实验12-2:ret2usr 226
12.3 实验12-3:击败stack canaries 229
12.4 实验12-4:绕过超级用户模式执行保护(SMEP)和内核页表隔离(KPTI) 231
12.5 实验12-5:绕过超级用户模式访问保护(SMAP) 234
12.6 实验12-6:击败内核地址空间布局随机化(KASLR) 237
12.7 总结 239
第13章 Windows漏洞利用基础技术 241
13.1 编译与调试Windows程序代码 242
13.1.1 Windows 编译器选项 243
13.1.2 运用Immunity Debugger调试Windows程序代码 244
13.2 编写Windows漏洞利用程序代码 250
13.3 理解结构化异常处理 261
13.3.1 理解和绕过常见的Windows内存保护 262
13.3.2 数据执行防护 264
13.4 总结 270
第14章 Windows内核漏洞利用技术 271
14.1 Windows内核 271
14.2 内核驱动程序 272
14.3 内核调试 274
14.4 选择目标 275
14.5 令牌窃取 285
14.6 总结 291
第15章 PowerShell漏洞利用技术 293
15.1 选择PowerShell的原因 293
15.1.1 无文件落地 293
15.1.2 PowerShell日志 294
15.1.3 PowerShell的可移植性 295
15.2 加载PowerShell脚本 295
15.3 PowerSploit执行漏洞利用与后渗透漏洞利用 301
15.4 使用PowerShell Empire实现C2 304
15.5 总结 311
第16章 无漏洞利用获取shell技术 313
16.1 捕获口令哈希 313
16.1.1 理解LLMNR和NBNS 313
16.1.2 理解Windows NTLMv1和NTLMv2身份验证 314
16.1.3 利用Responder 315
16.2 利用Winexe工具 319
16.2.1 实验16-2:使用Winexe访问远程系统 320
16.2.2 实验16-3:利用Winexe获得工具提权 321
16.3 利用WMI工具 321
16.3.1 实验16-4:利用WMI命令查询系统信息 322
16.3.2 实验16-5:WMI执行命令 324
16.4 利用WinRM工具的优势 326
16.4.1 实验16-6:执行WinRM命令 326
16.4.2 实验16-7:利用Evil-WinRM执行代码 327
16.5 总结 329
第17章 现代Windows环境中的后渗透技术 331
17.1 后渗透技术 331
17.2 主机侦察 332
17.3 用户侦察 332
17.3.1 实验17-1:使用whoami识别权限 332
17.3.2 实验17-2:使用Seatbelt查找用户信息 335
17.4 系统侦察 336
17.4.1 实验17-3:使用PowerShell执行系统侦察 336
17.4.2 实验17-4:使用Seatbelt执行系统侦查 338
17.5 域侦察 339
17.5.1 实验17-5:使用PowerShell获取域信息 340
17.5.2 实验17-6:利用PowerView 执行AD侦察 343
17.5.3 实验17-7:SharpHound收集AD数据 345
17.6 提权 346
17.6.1 本地特权提升 346
17.6.2 活动目录特权提升 348
17.7 活动目录权限维持 353
17.7.1 实验17-13:滥用AdminSDHolder 353
17.7.2 实验17-14:滥用SIDHistory特性 355
17.8 总结 357
第18章 下一代补丁漏洞利用技术 359
18.1 二进制差异分析介绍 359
18.1.1 应用程序差异分析 359
18.1.2 补丁差异分析 360
18.2 二进制差异分析工具 361
18.2.1 BinDiff 362
18.2.2 turbodiff 363
18.2.3 实验18-1:第一个差异分析示例 365
18.3 补丁管理流程 367
18.3.1 Microsoft的星期二补丁 367
18.3.2 获取和提取Microsoft补丁368
18.4 总结 376
第Ⅳ部分 攻击物联网
第19章 攻击目标:物联网 379
19.1 物联网 379
19.1.1 联网设备的类型 379
19.1.2 无线协议 380
19.1.3 通信协议 381
19.2 安全方面的考虑事项 381
19.3 Shodan IoT搜索引擎 382
19.3.1 Web界面 382
19.3.2 Shodan命令行工具 385
19.3.3 Shodan API 386
19.3.4 未经授权访问MQTT可能引发的问题 388
19.4 IoT蠕虫:只是时间问题 389
19.5 总结 390
第20章 剖析嵌入式设备 391
20.1 中央处理器(CPU) 391
20.1.1 微处理器 392
20.1.2 微控制器 392
20.1.3 系统级芯片 392
20.1.4 常见的处理器架构 392
20.2 串行接口 393
20.2.1 UART 393
20.2.2 串行外设接口(SPI) 398
20.2.3 I2C 399
20.3 调试接口 400
20.3.1 联合测试行动组(JTAG) 400
20.3.2 串行线调试(SWD) 402
20.4 软件 402
20.4.1 引导加载程序 403
20.4.2 无操作系统 404
20.4.3 实时操作系统 404
20.4.4 通用操作系统 405
20.5 总结 405
第21章 攻击嵌入式设备 407
21.1 嵌入式设备漏洞的静态分析 407
21.1.1 实验21-1:分析更新包 407
21.1.2 实验21-2:执行漏洞分析 412
21.2 基于硬件的动态分析 416
21.2.1 设置测试环境 416
21.2.2 Ettercap工具 416
21.3 使用仿真器执行动态分析 420
21.3.1 FirmAE工具 420
21.3.2 实验21-3:安装FirmAE工具 420
21.3.3 实验21-4:仿真固件 420
21.3.4 实验21-5:攻击固件 424
21.4 总结 425
第22章 软件定义的无线电 427
22.1 SDR入门 427
22.1.1 从何处购买 427
22.1.2 了解管理规则 429
22.2 示例学习 429
22.2.1 搜索 429
22.2.2 捕获 430
22.2.3 重放 432
22.2.4 分析 435
22.2.5 预览 440
22.2.6 执行 443
22.3 总结 443
第Ⅴ部分 入侵虚拟机管理程序
第23章 虚拟机管理程序 447
23.1 虚拟机管理程序 448
23.1.1 Popek和Goldberg的虚拟化定理 448
23.1.2 Goldberg的硬件虚拟化器 450
23.1.3 Ⅰ型和Ⅱ型虚拟机监视器452
23.2 x86架构的虚拟化技术 453
23.2.1 动态二进制转译 453
23.2.2 环压缩 454
23.2.3 影子分页 455
23.2.4 半虚拟化技术 457
23.3 硬件辅助虚拟化技术 457
23.3.1 虚拟机扩展(VMX) 457
23.3.2 扩展页表(EPT) 459
23.4 总结 461
第24章 创建研究框架 463
24.1 虚拟机管理程序攻击面 463
24.2 单内核 465
24.2.1 引导消息实现 474
24.2.2 处理请求 476
24.3 客户端(Python) 477
24.4 模糊测试(Fuzzing) 486
24.4.1 Fuzzer基类 486
24.4.2 模糊测试的提示和改进 492
24.5 总结 493
第25章 Hyper-V揭秘 495
25.1 环境安装 495
25.2 Hyper-V应用程序架构 497
25.2.1 Hyper-V组件 498
25.2.2 虚拟信任级别 499
25.2.3 第一代虚拟机 500
25.2.4 第二代虚拟机 501
25.3 Hyper-V合成接口 502
25.3.1 合成MSR 502
25.3.2 超级调用 506
25.3.3 VMBus机制 509
25.4 总结 516
第26章 入侵虚拟机管理程序案例研究 517
26.1 Bug分析 517
26.2 编写触发器 521
26.2.1 建立目标 521
26.2.2 EHCI控制器 523
26.2.3 触发软件漏洞 524
26.3 漏洞利用 528
26.3.1 相对写原语 528
26.3.2 相对读原语 529
26.3.3 任意读取 531
26.3.4 完整地址空间泄漏原语 532
26.3.5 模块基址泄漏 535
26.3.6 RET2LIB 535
26.4 总结 539
第Ⅵ部分 入侵云
第27章 入侵Amazon Web服务 543
27.1 Amazon Web服务 543
27.1.1 服务、物理位置与基础架构 544
27.1.2 AWS的授权方式 544
27.1.3 滥用AWS最佳实践 546
27.2 滥用身份验证控制措施 547
27.2.1 密钥与密钥介质的种类 548
27.2.2 攻击方工具 551
27.3 总结 559
第28章 入侵Azure 561
28.1 Microsoft Azure 561
28.1.1 Azure和AWS的区别 562
28.1.2 Microsoft Azure AD概述 566
28.1.3 Azure权限 567
28.2 构建对Azure宿主系统的攻击 568
28.3 控制平面和托管标识 573
28.4 总结 576
第29章 入侵容器 577
29.1 Linux容器 577
29.1.1 容器的内部细节 578
29.1.2 Cgroups 578
29.1.3 命名空间 581
29.1.4 存储 581
29.2 应用程序 584
29.3 容器安全 587
29.4 功能 590
29.5 总结 594
第30章 入侵Kubernetes 595
30.1 Kubernetes架构 595
30.2 指纹识别Kubernetes API Server 596
30.3 从内部入侵Kubernetes 601
30.4 总结 609