图书目录

目    录

第Ⅰ部分  预 备 知 识

第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