第1章 基础知识 1
1.1 GDB的基本使用方法 1
1.1.1 断点相关命令 1
1.1.2 执行相关命令 1
1.1.3 信息查看相关命令 2
1.1.4 其他常用命令 3
1.1.5 Insight图形界面调试器 3
1.2 SoftICE的基本使用方法 4
1.2.1 断点相关命令 5
1.2.2 执行相关命令 6
1.2.3 查看与修改相关命令 6
1.2.4 其他常用命令 7
1.2.5 常用默认快捷键 7
1.3 NTSD(WinDbg/CDB)的基本使用方法 8
1.3.1 断点相关命令 8
1.3.2 执行相关命令 8
1.3.3 查看与修改相关命令 9
1.3.4 其他常用命令 9
1.4 IDA Pro的基本使用方法 9
1.4.1 强大的反汇编功能 10
1.4.2 方便的代码阅读功能 12
1.4.3 常用默认快捷键 14
第2章 缓冲区溢出利用技术 15
2.1 缓冲区溢出历史 15
2.2 Linux x86平台缓冲区溢出利用技术 16
2.2.1 Linux的内存管理 16
2.2.2 缓冲区溢出的流程 17
2.2.3 缓冲区溢出的攻击技术 21
2.3 Win32平台缓冲区溢出利用技术 27
2.3.1 Win32平台缓冲区溢出的流程 27
2.3.2 跳转地址 34
2.3.3 远程缓冲区溢出演示 37
2.3.4 结构化异常处理 43
2.3.5 Windows XP和2003下的增强异常处理 54
2.3.6 突破Windows 2003堆栈保护 54
2.4 AIX PowerPC平台缓冲区溢出利用技术 60
2.4.1 熟悉PowerPC体系及其精简指令集计算 60
2.4.2 AIX PowerPC堆栈结构 61
2.4.3 学习如何攻击AIX PowerPC的溢出程序 67
2.5 Solaris SPARC平台缓冲区溢出利用技术 74
2.5.1 SPARC体系结构 74
2.5.2 Solaris SPARC堆栈结构及函数调用过程 75
2.5.3 学习如何攻击Solaris SPARC的溢出程序 84
2.6 HP-UX PA平台缓冲区溢出利用技术 87
2.6.1 PA-RISC体系结构 88
2.6.2 常用指令集 90
2.6.3 运行时体系结构(Run~time Architecture) 93
2.6.4 学习如何攻击HP-UX下的溢出程序 99
2.7 Windows CE缓冲区溢出利用技术 104
2.7.1 ARM简介 104
2.7.2 Windows CE内存管理 105
2.7.3 Windows CE的进程和线程 106
2.7.4 Windows CE的API搜索技术 106
2.7.5 Windows CE缓冲区溢出流程演示 115
第3章 Shellcode技术 124
3.1 Linux x86平台Shellcode技术 124
3.1.1 熟悉系统调用 124
3.1.2 得到Shell的Shellcode 125
3.1.3 提取Shellcode的Opcode 129
3.1.4 渗透防火墙的Shellcode 132
3.2 Win32平台Shellcode技术 146
3.2.1 获取kernel32.dll基址 147
3.2.2 获取Windows API地址 150
3.2.3 写一个实用的Windows Shellcode 156
3.2.4 渗透防火墙的Shellcode 167
3.3 AIX PowerPC平台Shellcode技术 192
3.3.1 学习AIX PowerPC汇编 192
3.3.2 学写AIX PowerPC的Shellcode 194
3.3.3 远程Shellcode 197
3.3.4 遭遇I-cache 216
3.3.5 查找socket的Shellcode 224
3.4 Solaris SPARC平台的Shellcode技术 225
3.4.1 Solaris系统调用 225
3.4.2 得到shell的Shellcode 227
3.4.3 Shellcode中的自身定位 231
3.4.4 解码Shellcode 233
3.4.5 渗透防火墙的Shellcode 238
第4章 堆溢出利用技术 241
4.1 Linux堆溢出利用技术 241
4.1.1 Linux堆管理结构 241
4.1.2 Linux堆管理算法分析 246
4.1.3 Linux堆溢出实例攻击演示 265
4.1.4 Linux两次释放利用演示 281
4.2 Win32平台堆溢出利用技术 289
4.2.1 Windows堆管理结构 289
4.2.2 Windows堆溢出演示 294
4.2.3 Windows XP SP2的增强 319
4.3 Solaris堆溢出利用技术 320
4.3.1 Solaris堆溢出相关结构及宏定义 320
4.3.2 Solaris堆溢出利用流程 322
4.3.3 Solaris堆溢出利用实例 327
4.3.4 Solaris释放堆利用演示 334
第5章 格式化串漏洞利用技术 339
5.1 Linux x86平台格式化串漏洞利用技术 339
5.1.1 格式化串漏洞成因 339
5.1.2 格式化串漏洞演示 340
5.1.3 格式串漏洞的利用 346
5.2 Solaris SPARC平台格式化串漏洞利用技术 353
5 2.1 Solaris SPARC和Linux x86在格式化串漏洞利用上的不同 353
5.2.2 Solaris SPARC格式化串的利用 353
5.3 Win32平台格式化串漏洞利用技术 362
5.3.1 Win32平台格式化串与其他平台的不同 362
5.3.2 Win32平台格式化串的利用方法演示 363
第6章 内核溢出利用技术 368
6.1 Linux x86平台内核溢出利用技术 368
6.1.1 内核Exploit和应用层Exploit的异同点 368
6.1.2 内核Exploit背景知识 368
6.1.3 内核Exploit的种类 370
6.1.4 内核缓冲区溢出(KernelBuffer OverFlow) 370
6.1.5 内核格式化字符串漏洞(Kernel Format String Vulnerability) 380
6.1.6 TCP/IP协议栈溢出漏洞 393
第7章 其他利用技术 411
7.1 BSD的memcpy溢出利用技术 411
7.1.1 FreeBSD的memcpy实现 411
7.1.2 实例演示 416
7.1.3 Apache分块编码远程溢出漏洞利用分析 421
7.2 文件流溢出利用方法 424
7.2.1 FSO简介 424
7.2.2 FSO漏洞实例 424
7.2.3 粗略分析 425
7.2.4 如何写利用程序 429
7.3 C++中溢出覆盖虚函数指针技术 431
7.3.1 VC中虚函数工作机制分析 431
7.3.2 VC中对象的空间组织和溢出试验 435
7.3.3 GCC中对象的空间组织和溢出试验 437
7.3.4 模拟真实情况的溢出试验 439
7.4 绕过PaX内核补丁保护方法 443
7.4.1 PaX内核补丁简介 443
7.4.2 高级的return-into-lib(c)利用技术 444
第8章 漏洞发掘分析 476
8.1 UNIX本地漏洞发掘技术 476
8.1.1 一段漏洞发掘日记 476
8.1.2 UNIX本地漏洞发掘工具介绍 480
8.1.3 常见漏洞类型 485
8.1.4 漏洞发掘过程 492
8.1.5 如何处理发现的漏洞 502
8.2 漏洞自动发掘技术 502
8.2.1 黑盒自动测试 502
8.2.2 源码分析 503
8.2.3 补丁比较 504
8.2.4 基于IDA Pro的脚本挖掘技术 519
8.2.5 其他技术 525
8.3 Linux平台漏洞分析调试 525
8.3.1 Cyrus IMAP Server IMAPMAGICPLUS预验证远程缓冲区溢出漏洞分析 525
8.3.2 Stunnel客户端协商协议格式化串漏洞分析 535
8.3.3 CVS“Directory”double free漏洞分析 545
8.4 Windows平台漏洞分析调试 551
8.4.1 ⅡS WebDAV栈溢出漏洞分析 552
8.4.2 WS_FTP FTPD STAT命令远程栈溢出 573
8.4.3 Windows RPCDCOM接口长文件名堆溢出漏洞调试 583
8.4.4 Microsoft Windows Messenger服务远程堆溢出漏洞调试 592
8.4.5 Windows内核消息处理本地缓冲区溢出漏洞 603
第9章 CGI渗透测试技术 618
9.1 跨站脚本的安全问题 618
9.1.1 跨站脚本简介 618
9.1.2 跨站脚本的危害 618
9.2 Cookie的安全问题 621
9.2.1 Cookie简介 621
9.2.2 Cookie安全 622
9.3 PHP渗透测试技巧 624
9.3.1 一般利用方式 624
9.3.2 PHP 4.3.0的新特性 627
9.3.3 PHP处理RFC1867 MIME格式导致数组错误漏洞 627
9.3.4 正则表达式的陷阱 629
9.3.5 进一步扩大成果 631
9.3.6 突破PHP的safe_mode限制 633
第10章 SQL注入利用技术 635
10.1 MySQL注入技巧 635
10.1.1 MySQL版本识别 636
10.1.2 联合查询的利用 637
1O.1.3 遍历猜测 639
10.1.4 文件操作 640
10.1.5 用户自定义函数 642
10.2 MS SQL Server注入技巧 648
10.2.1 SQL注入简介 650
10.2.2 如何获取数据 652
10.2.3 环境探测 656
10.2.4 获取重要数据 657
10.2.5 获取shell 663
10.2.6 突破限制 670
10.2.7 其他技巧 673
附录A 网络安全英文术语解释 677
参考资料 678