第1章 安全编码基础... 1
1.1 引言...... 2
1.2 C/C++... 3
1.2.1 语言特性..... 3
1.2.2 Hello,World!实例..... 4
1.2.3 数据类型..... 5
1.2.4 流程控制..... 7
1.2.5 函数..... 8
1.2.6 类..... 9
1.2.7 案例研究:傅立叶系数
估算..... 10
1.3 Java.. 13
1.3.1 语言特性..... 14
1.3.2 Hello,World!实例..... 15
1.3.3 数据类型..... 15
1.3.4 流程控制..... 16
1.3.5 方法..... 18
1.3.6 类..... 18
1.3.7 获取HTTP报头..... 20
1.4 C#... 21
1.4.1 移植到C#平台的商业
案例..... 21
1.4.2 语言特性..... 22
1.4.3 Hello,World!实例..... 23
1.4.4 数据类型..... 23
1.4.5 流程控制..... 25
1.4.6 方法..... 26
1.4.7 类..... 26
1.4.8 C#线程..... 28
1.4.9 案例研究:命令行IP地址
解析..... 29
1.5 Perl. 38
1.5.1 数据类型..... 39
1.5.2 运算符..... 40
1.5.3 Perl脚本实例..... 42
1.5.4 专用变量..... 44
1.5.5 模式匹配和替换..... 44
1.5.6 正则表达式修饰符..... 45
1.5.7 常用的Perl工具..... 45
1.5.8 I Am a Perl Coder!. 46
1.5.9 日志修改工具..... 47
1.6 Python... 52
1.7 本章小结...... 56
1.8 要点回顾...... 56
1.9 相关网站链接...... 57
1.10 常见问题...... 58
第2章 NASL脚本.... 61
2.1 引言...... 62
2.1.1 NASL的发展史..... 62
2.1.2 NASL的目标..... 62
2.2 NASL脚本的语法...... 63
2.2.1 注释..... 64
2.2.2 变量..... 64
2.2.3 运算符..... 66
2.2.4 控制结构..... 69
2.3 编写NASL脚本...... 72
2.3.1 编写NASL个人专用工具..... 73
2.3.2 Nessus框架下的编程..... 75
2.4 案例研究:经典的
NASL脚本...... 77
2.5 NASL代码移植...... 81
2.6 本章小结...... 90
2.7 要点回顾...... 91
2.8 相关网站链接...... 92
2.9 常见问题...... 92
第3章 BSD套接字.... 95
3.1 引言...... 96
3.2 BSD套接字编程简介...... 96
3.3 TCP客户端与服务器...... 97
3.4 UDP客户端与服务器...... 103
3.5 套接字选项...... 111
3.6 基于UDP套接字的
网络扫描...... 113
3.7 基于TCP套接字的
网络扫描...... 122
3.8 线程与并行...... 134
3.9 本章小结...... 136
3.10 要点回顾...... 136
3.11 相关网站链接...... 137
3.12 常见问题...... 137
第4章 Windows套接字.... 139
4.1 引言...... 140
4.2 Winsock概述...... 140
4.3 Winsock 2.0... 141
4.3.1 通过Visual Studio 6.0
链接..... 142
4.3.2 通过源代码链接..... 143
4.4 案例研究:使用WinSock
抓取网页...... 146
4.5 编写客户端程序...... 147
4.6 编写服务器程序...... 151
4.7 编写exploit及漏洞
检测程序...... 155
4.8 本章小结...... 163
4.9 要点回顾...... 164
4.10 常见问题...... 165
4.11 案例研究:使用Winsock
执行Web攻击...... 166
4.12 案例研究:使用Winsock
执行远程缓冲区溢出...... 168
第5章 Java套接字.... 173
5.1 引言...... 174
5.2 TCP/IP概述...... 174
5.2.1 TCP客户端..... 175
5.2.2 IP地址及域名解析..... 178
5.2.3 基于文本的输入/输出:
LineNumberReader类..... 181
5.2.4 TCP服务器..... 185
5.2.5 使用浏览器连接
TCPServer1.. 189
5.2.6 处理多重连接..... 189
5.2.7 WormCatcher. 198
5.3 UDP客户端与服务器...... 204
5.4 本章小结...... 211
5.5 要点回顾...... 211
5.5.1 TCP客户端..... 211
5.5.2 TCP服务器..... 211
5.5.3 UDP客户端与服务器..... 211
5.6 常见问题...... 212
第6章 编写可移植的代码.... 215
6.1 引言...... 216
6.2 UNIX和Windows移植
指南...... 216
6.2.1 预编译指令..... 216
6.2.2 确定操作系统..... 218
6.2.3 进程的创建和终止..... 222
6.2.4 多线程..... 227
6.2.5 信号..... 234
6.2.6 文件操作..... 236
6.2.7 目录操作..... 239
6.2.8 库..... 242
6.2.9 Daemon/Win32服务编程..... 247
6.2.10 内存管理..... 254
6.2.11 命令行参数处理..... 255
6.2.12 整型数据类型..... 259
6.3 本章小结...... 260
6.4 要点回顾...... 260
6.5 常见问题...... 261
第7章 可移植的网络编程.... 263
7.1 引言...... 264
7.2 BSD套接字和Winsock... 264
7.3 可移植的构件...... 266
7.3.1 返回值..... 266
7.3.2 扩展错误信息..... 268
7.3.3 API. 270
7.3.4 原始套接字..... 302
7.3.5 Pcap和WinPcap... 313
7.4 本章小结...... 319
7.5 要点回顾...... 319
7.6 常见问题...... 319
第8章 编写shellcode I 323
8.1 引言...... 324
8.2 shellcode概述...... 324
8.2.1 工具..... 324
8.2.2 汇编程序设计语言..... 325
8.2.3 Windows和UNIX的
汇编比较..... 328
8.3 寻址问题...... 329
8.3.1 方案一:使用call和
jmp指令..... 329
8.3.2 方案二:将参数值入栈..... 330
8.4 NULL字节问题...... 331
8.5 系统调用的实现...... 332
8.5.1 系统调用编号..... 332
8.5.2 系统调用参数..... 332
8.5.3 系统调用返回值..... 334
8.6 远程shellcode.. 334
8.6.1 端口绑定shellcode.. 334
8.6.2 套接字描述符重用
shellcode.. 336
8.7 本地shellcode.. 337
8.7.1 execve shellcode.. 338
8.7.2 setuid shellcode.. 339
8.7.3 chroot shellcode.. 340
8.7.4 Windows shellcode.. 344
8.8 本章小结...... 350
8.9 要点回顾...... 350
8.10 相关网站链接...... 352
8.11 邮件列表...... 352
8.12 常见问题...... 352
第9章 编写shellcode II 355
9.1 引言...... 356
9.2 shellcode实例...... 356
9.2.1 write系统调用..... 359
9.2.2 execve shellcode.. 362
9.2.3 端口绑定shellcode.. 370
9.2.4 socket系统调用..... 373
9.2.5 bind系统调用..... 374
9.2.6 listen系统调用..... 374
9.2.7 accept系统调用..... 375
9.2.8 dup2系统调用..... 375
9.2.9 execve系统调用..... 376
9.2.10 反向连接shellcode.. 381
9.2.11 重用套接字的shellcode.. 384
9.2.12 重用文件描述符..... 386
9.2.13 shellcode编码..... 392
9.3 重用程序变量...... 397
9.4 跨操作系统的shellcode.. 401
9.5 了解现有的shellcode.. 402
9.6 本章小结...... 406
9.7 要点回顾...... 406
9.8 相关网站链接...... 407
9.9 邮件列表...... 407
9.10 常见问题...... 407
第10章 开发exploit程序I 409
10.1 引言...... 410
10.2 定位漏洞...... 410
10.3 远程与本地exploit程序
的编写...... 411
10.4 格式化字符串攻击...... 412
10.4.1 格式化字符串..... 412
10.4.2 格式化字符串漏洞
的修复..... 414
10.5 案例研究:xlockmore用户
提供的格式化字符串漏洞
CVE-2000-0763... 414
10.6 TCP/IP漏洞...... 417
10.7 竞争条件...... 418
10.7.1 文件竞争条件..... 418
10.7.2 信号竞争条件..... 419
10.8 案例研究:man输入验证
错误...... 419
10.9 本章小结...... 421
10.10 要点回顾...... 422
10.11 相关网站链接...... 423
10.12 常见问题...... 423
第11章 开发exploit程序II 425
11.1 引言...... 426
11.2 为exploit编写套接字和
绑定...... 426
11.2.1 客户端套接字编程..... 426
11.2.2 服务器端套接字编程..... 428
11.3 栈溢出exploits.. 429
11.3.1 内存的组织..... 430
11.3.2 栈溢出..... 431
11.3.3 寻找开源软件中可
利用的栈溢出..... 435
11.4 案例研究:X11R6 4.2
XLOCALEDIR溢出...... 435
11.5 堆破坏exploits.. 440
11.6 案例研究: OpenSSL SSLv2
畸形客户端密钥远程缓冲区
溢出漏洞CAN-2002-0656... 444
11.7 整型bug exploits.. 457
11.7.1 整数环绕..... 458
11.7.2 忽略大小检查..... 460
11.7.3 其他整型bug.. 462
11.8 案例研究: OpenSSH质询
响应整型溢出漏洞
CVE-2002-0639... 462
11.9 案例研究:UW POP2 缓冲
区溢出漏洞CVE-1999
-0920... 466
11.10 本章小结...... 474
11.11 要点回顾...... 475
11.12 相关网站链接...... 476
11.13 常见问题...... 476
第12章 开发exploit程序III 479
12.1 引言...... 480
12.2 MSF的使用...... 480
12.3 用Metasploit进行
exploit开发...... 485
12.3.1 确定攻击向量..... 485
12.3.2 计算偏移量..... 486
12.3.3 选择控制向量..... 491
12.3.4 发现返回地址..... 495
12.3.5 使用返回地址..... 498
12.3.6 确定坏字符..... 500
12.3.7 确定空间限制..... 500
12.3.8 空操作指令拖动器..... 502
12.3.9 选取有效载荷和
编码器..... 503
12.4 将exploit集成到MSF中...... 511
12.4.1 框架..... 511
12.4.2 分析一个现有的exploit
模块..... 512
12.4.3 覆盖方法..... 516
12.5 本章小结...... 517
12.6 要点回顾...... 517
12.7 相关网站链接...... 518
12.8 常见问题...... 518
第13章 编写安全组件.... 521
13.1 引言...... 522
13.2 COM..... 522
13.2.1 COM对象..... 522
13.2.2 COM接口..... 522
13.2.3 COM运行时..... 523
13.2.4 COM对象的实现..... 524
13.2.5 COM进程内服务器
的实现..... 526
13.3 ATL... 527
13.3.1 C++模板..... 528
13.3.2 ATL客户端技术..... 528
13.3.3 ATL服务器技术..... 531
13.3.4 ATL属性..... 543
13.4 将COM扩展添加到
RPCDump工具中...... 547
13.4.1 COM EXE服务器
实现..... 548
13.4.2 控制流..... 551
13.4.3 应用程序集成例程..... 552
13.4.4 工具接口定义..... 555
13.4.5 组件类..... 557
13.4.6 应用程序集成:
COMSupport.h.. 563
13.4.7 应用程序集成:
RPCDump.C... 564
13.5 本章小结...... 566
13.6 要点回顾...... 566
13.7 相关网站链接...... 567
13.8 常见问题...... 567
第14章 创建Web安全工具.... 571
14.1 引言...... 572
14.2 设计...... 572
14.2.1 攻击签名格式..... 572
14.2.2 签名..... 573
14.3 深入分析...... 573
14.3.1 套接字和执行..... 573
14.3.2 解析器..... 583
14.3.3 头文件..... 595
14.3.4 编译..... 599
14.3.5 执行..... 599
14.4 工具输出...... 600
14.5 本章小结...... 600
14.6 要点回顾...... 601
14.7 相关网站链接...... 601
14.8 常见问题...... 601
附录A 词汇.... 605
附录B 安全工具汇编.... 613
附录C exploit文档.... 619
附录D 系统调用参考.... 621
附录E 数据转换参考.... 625