图书目录

第Ⅰ部分 “合乎道德的揭秘行为”简介 / 1

第1章  正义黑客的道德规范 / 3

1.1  理解敌方策略的意义 / 3

1.2  认识安全领域的灰色区域 / 7

1.3  本书与正义黑客类图书的关系 / 8

1.3.1  漏洞评估 / 8

1.3.2  渗透测试 / 9

1.4  关于黑客类图书和课程的争议 / 12

1.4.1  工具的双重性 / 13

1.4.2  识别攻击 / 14

1.4.3  模拟攻击 / 15

1.5  攻击者最喜欢利用的漏洞 / 15

第2章  合乎道德的正常揭秘行为 / 19

2.1  各方看待问题的不同角度 / 20

2.2  CERT目前采取的工作流程 / 21

2.3  完全揭秘策略—RainForest Puppy Policy / 23

2.4  Internet安全组织 / 24

2.4.1  发现漏洞 / 25

2.4.2  通知 / 25

2.4.3  验证 / 27

2.4.4  解决 / 29

2.4.5  发布 / 30

2.5  争议仍将存在 / 30

2.6  案例分析 / 34

2.6.1  正当揭秘过程的优缺点 / 35

2.6.2  供应商更加关注 / 38

2.7  接下来应该做什么 / 38

第Ⅱ部分  渗透测试及工具 / 41

第3章  社会工程攻击 / 43

3.1  社会工程攻击原理 / 43

3.2  实施社会工程攻击 / 44

3.3  渗透测试中常用到的攻击手段 / 46

3.3.1  好心人 / 47

3.3.2  会议室 / 51

3.3.3  加入公司 / 53

3.4  准备好进行面对面的攻击 / 54

3.5  防御社会工程攻击 / 56

第4章  潜入攻击 / 57

4.1  潜入攻击如此重要的原因 / 57

4.2  实施潜入攻击 / 58

4.2.1  侦察 / 58

4.2.2  思想准备 / 60

4.3  进入目标建筑物的常用方法 / 60

4.3.1  吸烟区入口 / 61

4.3.2  人工检查点 / 62

4.3.3  锁住的门 / 64

4.3.4  物理方式开锁 / 66

4.3.5  进入目标之后 / 69

4.4  防御潜入攻击 / 69

第5章  内部攻击 / 71

5.1  模拟内部攻击的重要性 / 71

5.2  实施内部攻击 / 72

5.2.1  工具和准备工作 / 72

5.2.2  了解情况 / 72

5.2.3  获得本地管理员权限 / 73

5.2.4  禁用防病毒软件 / 76

5.2.5  使用Cain / 77

5.3  防御内部攻击 / 83

第6章  使用BackTrack Linux发行 / 85

6.1  BackTrack简介 / 85

6.2  将BackTrack安装到DVD或优盘 / 86

6.3  直接在虚拟机中使用BackTrack ISO映像文件 / 87

6.3.1  使用VirtualBox创建BackTrack虚拟机 / 88

6.3.2  引导BackTrack LiveDVD系统 / 88

6.3.3  探索BackTrack X窗口环境 / 89

6.3.4  启动网络服务 / 90

6.4  永久性更改BackTrack / 90

6.4.1  将BackTrack完整地安装在硬盘或者优盘中 / 91

6.4.2  新建一个包含永久性更改信息的ISO文件 / 92

6.4.3  使用自定义文件自动保存 和恢复更改 / 94

6.5  研究BackTrack引导菜单 / 95

6.6  更新BackTrack / 97

第7章  使用Metasploit / 99

7.1  Metasploit简介 / 99

7.2  获取Metasploit / 99

7.3  使用Metasploit控制台加载 攻击工具 / 100

7.4  使用Metasploit攻击客户端漏洞 / 105

7.5  使用Metasploit Meterpreter进行渗透测试 / 107

7.5.1  使用Meterpreter进行键盘记录 / 110

7.5.2  使用Meterpreter以不同的已登录用户身份运行代码 / 110

7.5.3  使用Meterpreter的hashdump命令和Metasploit的psexec命令以及共享口令登录 / 112

7.6  Metasploit的自动化与脚本化 / 113

7.7  更进一步探讨Metasploit / 115

第8章  渗透测试管理 / 117

8.1  制定渗透测试计划 / 117

8.1.1  渗透测试的类型 / 117

8.1.2  渗透测试的范围 / 118

8.1.3  渗透测试的位置 / 118

8.1.4  渗透测试小组成员构成 / 118

8.1.5  方法和标准 / 118

8.1.6  渗透测试的各个阶段 / 119

8.1.7  渗透测试计划 / 120

8.2  签署渗透测试协议 / 121

8.2.1  工作声明 / 121

8.2.2  “保释信” / 121

8.3  实施渗透测试 / 122

8.3.1  测试启动会议 / 122

8.3.2  渗透测试中的资源访问 / 122

8.3.3  测试预期值管理 / 123

8.3.4  测试问题管理 / 123

8.3.5  欲速则不达 / 123

8.3.6  外部和内部协同 / 123

8.4  在渗透测试中进行信息共享 / 124

8.5  生成渗透测试结果报告 / 128

8.5.1  报告格式 / 128

8.5.2  报告摘要 / 128

第Ⅲ部分  漏洞攻击 / 129

第 9 章  编程技能 / 131

9.1  C编程语言 / 131

9.1.1  C语言基本结构 / 131

9.1.2  程序范例 / 135

9.1.3  使用gcc进行编译 / 136

9.2  计算机内存 / 137

9.2.1  随机存取存储器(RAM) / 137

9.2.2  字节序 / 137

9.2.3  内存分段 / 138

9.2.4  内存中的程序 / 138

9.2.5. 缓冲区 / 139

9.2.6. 内存中的字符串 / 139

9.2.7  指针 / 139

9.2.8 内存知识小结 / 140

9.3  Intel处理器 / 141

9.3.1  寄存器 / 141

9.4  汇编语言基础 / 142

9.4.1  机器指令、汇编语言与C语言 / 142

9.4.2  AT&T与NASM / 142

9.4.3  寻址模式 / 144

9.4.4  汇编文件结构 / 145

9.4.5  汇编过程 / 146

9.5  使用gdb进行调试 / 146

9.5.1  gdb基础 / 146

9.5.2  使用gdb进行反汇编 / 148

9.6  Python编程技能 / 149

9.6.1  获取Python / 149

9.6.2  Python中的Hello World程序 / 149

9.6.3  Python对象 / 150

9.6.4  字符串 / 150

9.6.5  数字 / 151

9.6.6  列表 / 152

9.6.7  字典 / 153

9.6.8  Python文件操作 / 154

9.6.9  Python套接字编程 / 155

第10章  基本的Linux漏洞攻击 / 157

10.1  栈操作 / 157

10.1.1  函数调用过程 / 158

10.2  缓冲区溢出 / 159

10.2.1  meet.c溢出 / 160

10.2.2  缓冲区溢出的后果 / 163

10.3  本地缓冲区溢出漏洞攻击 / 164

10.3.1  漏洞攻击组成部分 / 165

10.3.2  在命令行上进行栈溢出漏洞攻击 / 167

10.3.3  使用通用漏洞攻击代码进行栈溢出漏洞攻击 / 168

10.3.4  对小缓冲区进行漏洞攻击 / 170

10.4  漏洞攻击开发过程 / 173

10.4.1  控制eip / 173

10.4.2  确定偏移 / 173

10.4.3  确定攻击途径 / 176

10.4.4  构建漏洞攻击三明治 / 176

10.4.5  测试漏洞攻击 / 177

第11章  高级Linux漏洞攻击 / 179

11.1  格式化字符串漏洞攻击 / 179

11.1.1  问题描述 / 179

11.1.2  从任意内存读取 / 183

11.1.3  写入任意内存 / 184

11.1.4  利用.dtors获得根特权级 / 186

11.2  内存保护机制 / 189

11.2.1  编译器改进 / 190

11.2.2  内核补丁和脚本 / 193

11.2.3. “返回到libc”漏洞攻击 / 194

11.2.4  综合比较 / 202

第12章  Shellcode策略 / 203

12.1  用户空间shellcode / 203

12.1.1  系统调用 / 203

12.1.2  基本shellcode / 204

12.1.3  端口绑定shellcode / 205

12.1.4  反向shellcode / 206

12.1.5  查找套接字shellcode / 207

12.1.6  命令执行代码 / 208

12.1.7  文件传输代码 / 208

12.1.8  多级shellcode / 209

12.1.9  系统调用代理shellcode / 209

12.1.10  进程注入shellcode / 210

12.2  其他shellcode考虑因素 / 211

12.2.1  shellcode编码 / 211

12.2.2  自我破坏shellcode / 212

12.2.3  反汇编shellcode / 213

12.3  内核空间shellcode / 214

12.3.1  内核空间考虑因素 / 214

第13章  编写Linux shellcode / 217

13.1  基本的Linux shellcode / 217

13.1.1  系统调用 / 217

13.1.2  使用C进行系统调用 / 218

13.1.3  使用汇编语言进行系统调用 / 219

13.1.4  系统调用exit / 219

13.1.5  系统调用setreuid / 221

13.1.6  利用execve实现创建shell的shellcode / 222

13.2  实现端口绑定shellcode / 226

13.2.1  Linux套接字编程 / 226

13.2.2  采用汇编语言编程建立一个套接字 / 228

13.2.3  测试shellcode / 231

13.3  实现反向连接shellcode / 234

13.3.1  反向连接C语言编程 / 234

13.3.2  反向连接汇编程序 / 235

13.4  shellcode编码 / 237

13.4.1  简单的XOR编码 / 237

13.4.2  编码后shellcode的结构 / 238

13.4.3  JMP/CALL XOR解码器示例 / 238

13.4.4  FNSTENV XOR示例 / 239

13.4.5  将代码组合起来 / 241

13.5  利用Metasploit自动生成shellcode / 244

13.5.1  利用Metasploit生成shellcode / 244

13.5.2  利用Metasploit对shellcode进行编码 / 245

第14章  Windows漏洞攻击 / 247

14.1  Windows程序编译与调试 / 247

14.1.1  在Windows上进行编译 / 247

14.1.2  在Windows上用OllyDbg进行调试 / 249

14.2  编写Windows漏洞攻击程序 / 253

14.2.1  漏洞攻击程序开发过程回顾 / 254

14.2.2  ProSSHD服务器 / 254

14.2.3  控制eip / 255

14.2.4  确定偏移 / 257

14.2.5  确定攻击途径 / 258

14.2.6  构建攻击三明治 / 261

14.2.7  根据需要调试漏洞攻击程序 / 262

14.3  理解SEH / 264

14.3.1  SEH的实现 / 264

14.4  理解Windows内存保护(XP SP3、Vista、7和Server 2008) / 266

14.4.1  基于栈的缓冲区溢出检测(/GS) / 266

14.4.2  SafeSEH / 268

14.4.3  SEHOP / 268

14.4.4  堆保护 / 268

14.4.5  DEP / 268

14.4.6  ASLR / 269

14.5  绕开Windows内存保护 / 270

14.5.1  绕开/GS / 270

14.5.2  绕开SafeSEH / 271

14.5.3  绕开ASLR / 272

14.2.4  绕开DEP / 272

14.5.5  绕开SEHOP / 278

14.5.6  内存保护绕开方法小结 / 285

第15章  Content-Type攻击原理与检测 / 287

15.1  Content-Type攻击原理 / 287

15.2  现今可被攻击的文件格式 / 289

15.3  PDF文件格式简介 / 290

15.4  恶意PDF漏洞攻击分析 / 293

15.5  恶意PDF文件检测工具 / 296

15.5.1  PDFiD / 296

15.5.2  Pdf-parser.py / 300

15.6  Content-Type攻击防御测试工具 / 303

15.7  Content-Type攻击防御方法 / 304

15.7.1  安装所有的安全更新 / 304

15.7.2  在Adobe Reader中禁用JavaScript / 305

15.7.3  针对微软Office应用程序和Adobe Reader启用DEP / 305

第16章  WEB应用程序安全漏洞 / 307

16.1  最流行的Web应用程序安全漏洞概述 / 307

16.1.1  注入漏洞 / 307

16.1.2  跨站脚本漏洞 / 308

16.1.3  OWASP十大隐患中的其他内容 / 308

16.2  SQL注入漏洞攻击 / 308

16.2.1  SQL数据库与语句 / 310

16.2.2  测试Web应用程序,搜寻SQL注入漏洞 / 312

16.3  跨站脚本漏洞攻击 / 317

16.3.1  “脚本”的含义 / 317

16.3.2  跨站脚本的含义 / 318

第17章  oIP攻击 / 323

17.1  VoIP的含义 / 323

17.2  VoIP使用的协议 / 324

17.2.1  SIP / 324

17.2.2  Megaco H.248 / 325

17.2.3  H.323 / 325

17.2.4  TLS和DTLS / 326

17.2.5  SRTP / 327

17.2.6  ZRTP / 327

17.3  VoIP攻击类型 / 327

17.3.1  枚举 / 328

17.3.2  SIP口令破解 / 328

17.3.3  窃听与分组捕获 / 329

17.3.4  拒绝服务 / 329

17.4  如何防范VoIP攻击 / 335

第18章  SCADA攻击 / 337

18.1  SCADA的含义 / 337

18.2  SCADA使用的协议 / 338

18.2.1  OPC / 338

18.2.2  ICCP / 338

18.2.3  Modbus / 338

18.2.4  DNP3 / 339

18.3  SCADA fuzzing测试 / 340

18.3.1  使用Autodafé进行SCADA fuzzing测试 / 340

18.3.2  使用TFTP Daemon Fuzzer进行SCADA fuzzing测试 / 346

18.4  Stuxnet恶意软件(网络恐怖主义新浪潮) / 349

18.5  防范SCADA攻击 / 349

第Ⅳ部分  漏洞分析 / 351

第19章  被动分析 / 353

19.1  道德的逆向工程 / 353

19.2  使用逆向工程的原因 / 354

19.2.1  逆向工程注意事项 / 354

19.3  源代码分析 / 355

19.3.1  源代码审计工具 / 355

19.3.2  源代码审计工具的实用性 / 357

19.3.3  手工源代码审计 / 359

19.3.4  自动化源代码分析 / 363

19.4  二进制分析 / 365

19.4.1  二进制代码的手工审计 / 365

19.4.2  自动化的二进制 分析工具 / 376

第20章  使用IDA Pro进行高级静态分析 / 381

20.1  静态分析难点 / 381

20.1.1  剥离的二进制文件 / 381

20.1.2  静态链接程序和FLAIR / 383

20.1.3  数据结构分析 / 389

20.1.4  已编译的C++代码的诡异之处 / 393

20.2  扩展IDA Pro / 396

20.2.1  IDC脚本编程 / 396

20.2.2  IDA Pro插件模块及IDA Pro SDK / 398

20.2.3  构建IDA Pro插件 / 400

20.2.4  IDA Pro加载器及处理器模块 / 402

第21章  高级逆向工程技术 / 405

21.1  软件攻击的目的 / 405

21.2  软件开发过程概述 / 406

21.3  检测工具 / 407

21.3.1  调试器 / 407

21.3.2  代码覆盖分析工具 / 409

21.3.3  统计分析工具 / 410

21.3.4  流程分析工具 / 410

21.3.5  内存使用监视工具 / 412

21.4  模糊测试 / 416

21.5  定制的模糊测试工具和技术 / 417

21.5.1  一个简单的URL模糊测试工具 / 417

21.5.2  对未知协议进行模糊测试 / 420

21.5.3  SPIKE / 421

21.5.4  SPIKE静态内容原语 / 421

21.5.5  SPIKE Proxy / 424

21.5.6  Sharefuzz / 424

第22章  客户端浏览器的漏洞攻击 / 427

22.1  客户端软件漏洞的 重要性 / 427

22.1.1  客户端漏洞可以规避防火墙保护 / 427

22.1.2  客户端应用程序经常在管理权限下运行 / 428

22.1.3  客户端漏洞易于针对 特定人群或机构目标 / 428

22.2  Internet Explorer的安全概念 / 429

22.2.1  ActiveX控件 / 429

22.2.2  Internet Explorer安全区域 / 430

22.3  客户端漏洞攻击的历史与发展趋势 / 431

22.3.1  客户端漏洞的流行 / 431

22.3.2  历史上针对客户端攻击的著名漏洞 / 431

22.4  挖掘基于浏览器的新漏洞 / 437

22.4.1  mangleme / 437

22.4.2  Mozilla安全团队的模糊测试工具 / 440

22.4.3  AxEnum / 441

22.4.4  AxFuzz / 446

22.4.5  AxMan / 446

22.5  可利用的堆喷射技术 / 451

22.5.1  InternetExploiter / 451

22.6  防范客户端漏洞攻击 / 452

22.6.1  同步更新安全补丁 / 452

22.6.2  获取最新信息 / 453

22.6.3  在缩减权限下运行Internet应用 / 453

第23章  攻击Windows访问控制模型 / 455

23.1  攻击访问控制机制的理由 / 455

23.1.1  多数人不理解访问控制机制 / 455

23.1.2  访问控制漏洞易于 攻击 / 456

23.1.3  访问控制漏洞数量 巨大 / 456

23.2  Windows访问控制的工作机制 / 456

23.2.1  安全标识符 / 456

23.2.2  访问令牌 / 457

23.2.3  安全描述符 / 460

23.2.4  访问检查 / 463

23.3  访问控制配置分析工具 / 465

23.3.1  转储进程令牌 / 466

23.3.2  转储安全描述符 / 468

23.4  特殊SID、特殊访问权限和  “禁止访问”问题 / 469

23.4.1  特殊的SID / 469

23.4.2  特殊访问权限 / 471

23.4.3  “禁止访问”的原理 / 472

23.5  访问控制引起的提权漏洞 / 477

23.6  各种对象类型的攻击模式 / 478

23.6.1  服务攻击 / 478

23.6.2  Windows注册表DACL攻击 / 484

23.6.3  目录DACL攻击 / 488

23.6.4  文件DACL攻击 / 493

23.7  其他对象类型的枚举方法 / 497

23.7.1  共享内存段 / 497

23.7.2  命名管道 / 498

23.7.3  进程 / 499

23.7.4  其他已命名的内核对象(信号量、互斥锁、事件、设备) / 500

第24章  智能模糊测试框架Sulley / 503

24.1  协议分析 / 503

24.2  Sulley模糊测试框架 / 504

24.2.1  安装Sulley / 505

24.2.2  强大的模糊测试工具 / 505

24.2.3  块结构 / 507

24.2.4  监视进程中的错误 / 511

24.2.5  监视网络流量 / 512

24.2.6  控制VMware / 512

24.2.7  综述 / 513

24.2.8  崩溃事件的事后分析 / 515

24.2.9  网络使用分析 / 516

24.2.10  进一步研究 / 517

第25章  漏洞的可利用性和漏洞攻击程序 / 519

25.1  漏洞的可利用性 / 519

25.1.1  通过调试分析可利用性 / 520

25.1.2  初始分析 / 520

25.2  理解漏洞攻击问题 / 524

25.2.1  先决条件和后置条件 / 524

25.2.2  可重复性 / 525

25.3  构造漏洞攻击程序有效载荷的有关考虑 / 533

25.3.1  漏洞攻击程序有效载荷的协议元素 / 533

25.3.2  缓冲区的方向 / 534

25.3.3  自毁式shellcode / 534

25.4  对问题进行归档 / 535

25.4.1  背景知识 / 535

25.4.2  环境 / 536

25.4.3  研究结果 / 536

第26章  关闭漏洞:缓解问题 / 537

26.1  各种缓解方案 / 537

26.1.1  端口碰撞技术 / 537

26.1.2  迁移 / 538

26.2  打补丁 / 539

26.2.1  对源代码打补丁的注意事项 / 539

26.2.2  给二进制程序打补丁的注意事项 / 541

26.2.3  二进制变异 / 545

26.2.4  第三方打补丁方案 / 549

第Ⅴ部分  恶意软件分析 / 551

第27章  收集恶意软件和初步分析 / 553

27.1  恶意软件 / 553

27.1.1  恶意软件类型 / 553

27.1.2  恶意软件的防护技术 / 554

27.2  蜜网技术的最新发展趋势 / 555

27.2.1  蜜罐 / 555

27.2.2  蜜网 / 555

27.2.3  为什么要使用蜜罐 / 555

27.2.4  蜜罐的局限性 / 556

27.2.5  低交互性蜜罐 / 556

27.2.6  高交互性蜜罐 / 557

27.2.7  蜜网的类型 / 557

27.2.8  规避VMware检测技术 / 559

27.3  捕捉恶意软件:设置陷阱 / 561

27.3.1  VMware宿主机设置 / 561

27.3.2  VMware客户机设置 / 561

27.3.3  使用Nepenthes进行捕获 / 562

27.4  恶意软件的初步分析 / 563

27.4.1  静态分析 / 563

27.4.2  动态分析 / 565

27.4.3  Norman SandBox技术 / 569

第28章  破解恶意软件 / 573

28.1  恶意软件的发展趋势 / 573

28.1.1  嵌入的组件 / 573

28.1.2  加密的使用 / 574

28.1.3  用户空间隐藏技术 / 574

28.1.4  rootkit技术的应用 / 574

28.1.5  持久化措施 / 575

28.2  对恶意软件进行去混淆处理 / 575

28.2.1  加壳程序基础 / 576

28.2.2  对二进制文件进行 脱壳处理 / 577

28.3  对恶意软件进行逆向工程 / 584

28.3.1  恶意软件的设置阶段 / 584

28.3.2  恶意软件的运行阶段 / 584

28.3.3  自动化的恶意软件分析 / 585