第Ⅰ部分 “合乎道德的揭秘行为”简介 / 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
