第1部分 泄密的道德
第1章 正义黑客的道德规范 3
1.1 本书内容与正义黑客类图书的关系 8
1.1.1 漏洞评估 9
1.1.2 渗透测试 9
1.2 关于黑客书籍和课程的争论 11
1.2.1 工具的双重性 12
1.2.2 攻击发生时要分辨清楚 13
1.2.3 模拟攻击 14
1.3 攻击者为什么有机可乘 15
1.4 摘要 17
1.4.1 习题 17
1.4.2 答案 19
第2章 正义黑客与法制 21
2.1 与计算机犯罪相关的法律 22
2.1.1 18 USC Section 1029 22
2.1.2 18 USC Section 1030 25
2.1.3 相关州法律 30
2.1.4 18 USC Sections 2510 and 2701 32
2.1.5 数字千年版权法规 34
2.1.6 2002年电子安全强化法规 35
2.2 摘要 36
2.2.1 习题 37
2.2.2 答案 39
第3章 完全而道德的揭秘 41
3.1 不同的团队和观点 42
3.2 CERT工作流过程 44
3.3 完全公开策略(RainForest Puppy
策略) 45
3.4 互联网安全组织 47
3.4.1 发现 47
3.4.2 通知 48
3.4.3 验证 50
3.4.4 解决 52
3.4.5 发布 54
3.5 矛盾仍然存在 54
3.6 案例研究 55
3.6.1 完全揭秘过程的利弊 55
3.6.2 厂商要注意的问题 59
3.7 从现在开始,我们应该做什么 59
3.8 摘要 61
3.8.1 习题 62
3.8.2 答案 63
第2部分 渗透测试与工具
第4章 渗透测试过程 67
4.1 测试的种类 67
4.2 如何开始评估 69
4.2.1 建立团队 69
4.2.2 建立实验室 70
4.2.3 合同、安全和免于入狱 71
4.3 评估过程 72
4.3.1 评估的规划 72
4.3.2 召开现场会以启动评估 72
4.3.3 渗透测试过程 73
4.3.4 红队的过程 75
4.3.5 系统测试过程 78
4.3.6 给出报告 83
4.4 摘要 84
4.4.1 习题 85
4.4.2 答案 86
第5章 超越《黑客大曝光》:当今黑客
的高级工具 87
5.1 扫描之“过去的美好时光” 88
5.1.1 Paketto Keiretsu(scanrand,
paratrace) 88
5.1.2 paratrace 95
5.2 踩点:过去和现在 101
5.2.1 xprobe2 102
5.2.2 p0f 108
5.2.3 amap 112
5.2.4 Winfingerprint 116
5.3 嗅探工具 119
5.3.1 libpcap和WinPcap 120
5.3.2 被动嗅探与主动嗅探 121
5.3.3 防范主动嗅探 131
5.3.4 嗅探用户名和口令 132
5.4 嗅探和攻击LAN Manager登录凭据
134
5.4.1 使用挑战和散列(困难的方法)
138
5.4.2 使用ettercap(容易的方法) 138
5.4.3 嗅探并破解Kerberos 141
5.5 摘要 143
5.5.1 习题 144
5.5.2 答案 145
第6章 自动化渗透测试 147
6.1 Python技巧 148
6.1.1 获得Python 148
6.1.2 Hello, World 148
6.1.3 Python对象 149
6.2 自动化渗透测试工具 156
6.2.1 Core IMPACT 156
6.2.2 Immunity CANVAS 159
6.2.3 Metasploit 163
6.3 摘要 172
6.3.1 习题 173
6.3.2 答案 173
第3部分 攻击101
第7章 编程技巧 177
7.1 编程 178
7.1.1 问题解决过程 178
7.1.2 伪代码 179
7.1.3 程序员vs.黑客 181
7.2 C语言 182
7.2.1 基本C语言结构 182
7.2.2 示例程序 187
7.2.3 用gcc编译 188
7.3 计算机内存 189
7.3.1 RAM 189
7.3.2 字节序 189
7.3.3 内存分段 190
7.3.4 内存中的程序 190
7.3.5 缓冲区 191
7.3.6 内存中的字符串 191
7.3.7 指针 192
7.3.8 操作不同的内存区 192
7.4 Intel处理器 193
7.4.1 寄存器 194
7.4.2 算术逻辑部件(ALU) 195
7.4.3 程序计数器 195
7.4.4 控制单元 195
7.4.5 总线 195
7.5 汇编语言基础 196
7.5.1 机器语言 vs.汇编语言 vs.C语言
196
7.5.2 AT&T vs. NASM 197
7.5.3 寻址模式 199
7.5.4 汇编语言文件结构 200
7.5.5 汇编 201
7.6 用gdb调试 201
7.6.1 gdb基础 201
7.6.2 用gdb反汇编 204
7.7 摘要 205
7.7.1 习题 206
7.7.2 答案 207
第8章 基本Linux攻击 209
8.1 栈操作 210
8.1.1 栈数据结构 210
8.1.2 具体实现 210
8.1.3 函数调用过程 210
8.2 缓冲区溢出 212
8.2.1 缓冲器溢出的例子 212
8.2.2 meet.c的溢出 213
8.2.3 缓冲区溢出的结果 217
8.3 本地缓冲区溢出攻击 218
8.3.1 攻击的组成部分 218
8.3.2 由命令行攻击栈溢出 220
8.3.3 用通用攻击代码攻击栈溢出 221
8.3.4 攻击meet.c 223
8.3.5 攻击小的缓冲区 224
8.4 远程缓冲器溢出攻击 227
8.4.1 客户机/服务器模型 227
8.4.2 确定远程机器的esp值 229
8.4.3 用Perl进行人工蛮力攻击 230
8.5 摘要 232
8.5.1 习题 233
8.5.2 答案 234
第9章 高级Linux攻击 235
9.1 格式串攻击 236
9.1.1 问题 236
9.1.2 从任意的内存地址读取 240
9.1.3 向任意位置内存的写入 242
9.1.4 从.dtors到root 244
9.2 堆溢出攻击 248
9.2.1 堆溢出 248
9.2.2 内存分配程序(malloc) 250
9.2.3 dlmalloc 250
9.2.4 堆溢出攻击 254
9.2.5 其他攻击 259
9.3 内存保护方案 260
9.3.1 Libsafe 260
9.3.2 GRSecurity内核补丁和脚本 260
9.3.3 Stackshield 261
9.3.4 综合 261
9.4 摘要 262
9.4.1 习题 263
9.4.2 答案 264
第10章 编写Linux Shellcode 265
10.1 基本的Linux Shellcode 266
10.1.1 系统调用 266
10.1.2 Exit系统调用 269
10.1.3 setreuid系统调用 271
10.1.4 在Shellcode中用execve建立
新的shell 272
10.2 绑定到端口的shellcode 276
10.2.1 Linux socket编程 277
10.2.2 建立socket的汇编程序 280
10.2.3 测试shellcode 283
10.3 反向连接的shellcode 286
10.3.1 用C程序反向连接 286
10.3.2 用汇编程序反向连接 288
10.4 摘要 290
10.4.1 习题 292
10.4.2 答案 294
第11章 编写基本的Windows攻击 295
11.1 编译并调试Windows程序 295
11.1.1 在Windows上编译 295
11.1.2 在Windows上调试 297
11.1.3 建立基本的Windows攻击 307
11.2 摘要 316
11.2.1 习题 316
11.2.2 答案 317
第4部分 漏洞分析
第12章 被动分析 321
12.1 正义黑客的逆向工程 322
12.2 为什么进行逆向工程 322
12.3 源代码分析 323
12.3.1 源代码审计工具 324
12.3.2 源代码审计工具的用途 326
12.3.3 人工源代码审计 327
12.4 二进制分析 332
12.5 二进制自动分析工具 332
12.5.1 BugScam 333
12.5.2 BugScan 334
12.5.3 人工审计二进制代码 335
12.6 摘要 348
12.6.1 习题 348
12.6.2 答案 350
第13章 高级逆向工程 351
13.1 为什么攻击软件 352
13.2 软件开发过程 352
13.3 探测工具 353
13.3.1 调试器 354
13.3.2 代码覆盖工具 356
13.3.3 优化测算工具 356
13.3.4 流程分析工具 356
13.3.5 内存监控工具 359
13.4 杂凑 363
13.5 探测性杂凑的工具和技术 364
13.5.1 一个简单的URL杂凑器 364
13.5.2 杂凑未知的协议 367
13.5.3 SPIKE 368
13.5.4 SPIKE代理 372
13.5.5 Sharefuzz 372
13.6 摘要 373
13.6.1 习题 373
13.6.2 答案 375
第14章 从发现漏洞到攻击漏洞 377
14.1 攻击的可能性 378
14.2 理解问题 382
14.2.1 前置条件和后置条件 382
14.2.2 可复现性 383
14.2.3 对返回libc攻击的防御 392
14.3 把问题记入文档 392
14.3.1 背景信息 392
14.3.2 环境 393
14.3.3 研究结果 393
14.4 摘要 393
14.4.1 习题 394
14.4.2 答案 396
第15章 关闭漏洞:缓解 397
15.1 缓解漏洞威胁的备选方法 397
15.1.1 端口敲击 398
15.1.2 迁移 399
15.2 打补丁 400
15.2.1 对源代码打补丁 400
15.2.2 对二进制代码打补丁 402
15.3 摘要 406
15.3.1 习题 406
15.3.2 答案 408