第1篇 基础知识
第1章 漏洞概述
1.1 bug与漏洞
1.2 几个令人困惑的安全问题
1.3 漏洞挖掘、漏洞分析、漏洞利用
1.4 漏洞的公布与0 day响应
第2章 二进制文件概述
2.1 PE文件格式
2.2 虚拟内存
2.3 PE文件与虚拟内存之间的映射
第3章 必备工具
3.1 OllyDbg简介
3.2 SoftICE简介
3.3 WinDbg 简介
3.4 IDA Pro简介
3.5 二进制编辑器
3.6 虚拟机简介
3.7 Crack二进制文件
第2篇 漏洞利用
第4章 栈溢出利用
4.1 系统栈的工作原理
4.1.1 内存的不同用途
4.1.2 栈与系统栈
4.1.3 函数调用时发生了什么
4.1.4 寄存器与函数栈帧
4.1.5 函数调用约定与相关指令
4.2 修改邻接变量
4.2.1 修改邻接变量的原理
4.2.2 突破密码验证程序
4.3 修改函数返回地址
4.3.1 返回地址与程序流程
4.3.2 控制程序的执行流程
4.4 代码植入
4.4.1 代码植入的原理
4.4.2 向进程中植入代码
第5章 开发shellcode的艺术
5.1 shellcode概述
5.1.1 shellcode与exploit
5.1.2 shellcode需要解决的问题
5.2 定位shellcode
5.2.1 栈帧移位与jmp esp
5.2.2 获取“跳板”的地址
5.2.3 使用“跳板”定位的exploit
5.3 缓冲区的组织
5.3.1 缓冲区的组成
5.3.2 抬高栈顶保护shellcode
5.3.3 使用其他跳转指令
5.3.4 不使用跳转指令
5.3.5 函数返回地址移位
5.4 开发通用的shellcode
5.4.1 定位API的原理
5.4.2 shellcode的加载与调试
5.4.3 动态定位API地址的shellcode
5.5 shellcode编码技术
5.5.1 为什么要对shellcode编码
5.5.2 会“变形”的shellcode
5.6 为shellcode“减肥”
5.6.1 shellcode瘦身大法
5.6.2 选择恰当的hash算法
5.6.3 191个字节的bindshell
第6章 堆溢出利用
6.1 堆的工作原理
6.1.1 Windows堆的历史
6.1.2 堆与栈的区别
6.1.3 堆的数据结构与管理策略
6.2 在堆中漫游
6.2.1 堆分配函数之间的调用关系
6.2.2 堆的调试方法
6.2.3 识别堆表
6.2.4 堆块的分配
6.2.5 堆块的释放
6.2.6 堆块的合并
6.3 堆溢出利用(上)——DWORD SHOOT
6.3.1 链表“拆卸”中的问题
6.3.2 在调试中体会“DWORD SHOOT”
6.4 堆溢出利用(下)——代码植入
6.4.1 DWORD SHOOT的利用方法
6.4.2 狙击P.E.B中RtlEnterCritical-Section()的函数指针
6.4.3 堆溢出利用的注意事项
第7章 Windows异常处理机制深入浅出
7.1 S.E.H概述
7.2 在栈溢出中利用S.E.H
7.3 在堆溢出中利用S.E.H
7.4 挖掘Windows异常处理
7.4.1 不同级别的S.E.H
7.4.2 线程的异常处理
7.4.3 进程的异常处理
7.4.4 系统默认的异常处理U.E.F
7.4.5 异常处理流程的总结
7.5 V.E.H简介
第8章 高级内存攻击技术
8.1 狙击异常处理机制
8.1.1 攻击V.E.H链表的头节点
8.1.2 攻击TEB中的S.E.H头节点
8.1.3 攻击U.E.F
8.1.4 攻击PEB中的函数指针
8.2 “off by one”的利用
8.3 攻击C++的虚函数
8.4 Heap Spray:堆与栈的协同攻击
第9章 揭秘Windows安全机制
9.1 Service Pack 2简介
9.2 百密一疏的S.E.H验证
9.3 栈中的较量
9.3.1 .net中的GS安全编译选项
9.3.2 GS机制面临的挑战
9.4 重重保护下的堆
9.5 硬件方面的安全措施
第10章 用MetaSploit开发Exploit
10.1 漏洞测试平台MSF 简介
10.2 入侵Windows系统
10.2.1 漏洞简介
10.2.2 图形界面的漏洞测试
10.2.3 console界面的漏洞测试
10.3 利用MSF制作shellcode
10.4 用MSF扫描“跳板”
10.5 Ruby语言简介
10.6 “傻瓜式”Exploit开发
10.7 用MSF发布POC
第11章 其他漏洞利用技术
11.1 格式化串漏洞
11.1.1 printf中的缺陷
11.1.2 用printf读取内存数据
11.1.3 用printf向内存写数据
11.1.4 格式化串漏洞的检测与防范
11.2 SQL注入攻击
11.2.1 SQL注入原理
11.2.2 攻击PHP+MySQL网站
11.2.3 攻击ASP+SQL Server网站
11.2.4 注入攻击的检测与防范
11.3 XSS攻击
11.3.1 脚本能够“跨站”的原因
11.3.2 XSS Reflection攻击场景
11.3.3 Stored XSS攻击场景
11.3.4 攻击案例回顾:XSS蠕虫
11.3.5 XSS的检测与防范
第3篇 漏洞分析
第12章 漏洞分析技术概述
12.1 漏洞分析的方法
12.2 用“白眉”在PE中漫步
12.2.1 指令追踪技术与Paimei
12.2.2 Paimei的安装
12.2.3 使用PE Stalker
12.2.4 迅速定位特定功能对应的代码
12.3 补丁比较
第13章 MS06-040分析:系统入侵与蠕虫
13.1 MS06-040简介
13.2 漏洞分析
13.2.1 动态调试
13.2.2 静态分析
13.3 远程Exploit
13.3.1 RPC编程简介
13.3.2 实现远程exploit
13.3.3 改进exploit
13.3.4 MS06-040与蠕虫
第14章 MS06-055分析:揭秘“网马”
14.1 MS06-055简介
14.1.1 矢量标记语言(VML)简介
14.1.2 O day安全响应纪实
14.2 漏洞分析
14.3 漏洞利用
14.3.1 实践Heap Spray技术
14.3.2 网页木马攻击
第15章 MS07-060分析:Word文档中的阴谋
15.1 MS07-060简介
15.2 POC分析
第4篇 漏洞挖掘与软件安全性测试
第16章 漏洞挖掘技术浅谈
16.1 漏洞挖掘概述
16.2 Fuzz文件格式
16.2.1 File Fuzz简介
16.2.2 用Paimei实践File Fuzz
16.3 Fuzz网络协议
16.3.1 协议测试简介
16.3.2 SPIKE的Fuzz原理
16.3.3 SPIKE的Hello World
16.3.4 定义Block
16.3.5 生成Fuzz用例
16.4 Fuzz ActiveX
16.5 静态代码审计
第17章 安全的软件生命周期
17.1 Threat Modeling
17.2 编写安全的代码
17.3 产品安全性测试
17.4 漏洞管理与应急响应
参考文献