摘要 | 第2-4页 |
ABSTRACT | 第4-5页 |
第1章 引言 | 第12-15页 |
1.1 本课题的研究意义 | 第12-13页 |
1.2 缓冲区溢出国内外研究现状 | 第13-14页 |
1.3 本文主要内容 | 第14-15页 |
第2章 缓冲区溢出原理概述 | 第15-22页 |
2.1 堆栈的定义 | 第15页 |
2.2 缓冲区溢出的概念 | 第15-20页 |
2.2.1 缓冲区溢出攻击原理 | 第16页 |
2.2.2 缓冲区溢出示例 | 第16-19页 |
2.2.3 缓冲区溢出影响 | 第19-20页 |
2.3 缓冲区溢出漏洞的攻击 | 第20-21页 |
2.4 本章 小结 | 第21-22页 |
第3章 基于缓冲区溢出技术的漏洞挖掘 | 第22-38页 |
3.1 堆栈溢出 | 第22-28页 |
3.1.1 Windows 平台函数调用约定 | 第22-24页 |
3.1.2 结构化异常处理 | 第24-28页 |
3.2 基于堆栈的缓冲区溢出分析 | 第28-37页 |
3.2.1 Windows 平台函数间调用堆栈变化 | 第29-31页 |
3.2.2 返回地址的覆盖 | 第31页 |
3.2.3 覆盖异常 | 第31-33页 |
3.2.4 缓冲区溢出漏洞根源 | 第33-35页 |
3.2.5 漏洞发掘的一般方法 | 第35-37页 |
3.3 本章 小结 | 第37-38页 |
第4章 缓冲区溢出攻击核心技术研究 | 第38-53页 |
4.1 通用SHELLCODE 技术实现 | 第38-46页 |
4.1.1 得到函数址 | 第38-39页 |
4.1.2 获取Kerne132.dll 基址 | 第39-43页 |
4.1.3 查找GetProcAddress()函数地址 | 第43-44页 |
4.1.4 通过Hash 法实现对其它API 函数地址的查找 | 第44-46页 |
4.2 绕过过滤字符的限制 | 第46-48页 |
4.2.1 Shellcode 编码 | 第46-47页 |
4.2.2 Shellcode 解码 | 第47-48页 |
4.3 渗透防火墙 | 第48-50页 |
4.3.1 端口复用技术 | 第48-49页 |
4.3.2 重新绑定端口 | 第49页 |
4.3.3 Getpeername 查找socket | 第49页 |
4.3.4 Hook 系统的recv 调用 | 第49-50页 |
4.3.5 文件上传下载功能的实现 | 第50页 |
4.4 突破WINDOWS 的堆栈保护机制 | 第50-52页 |
4.4.1 突破Windows 2003 堆栈保护技术 | 第50-51页 |
4.4.2 突破Windows XP sp2 的堆栈保护技术 | 第51-52页 |
4.5 溢出点精确定位公式 | 第52页 |
4.6 本章 小结 | 第52-53页 |
第5章 缓冲区溢出的防御策略 | 第53-62页 |
5.1 编写正确的代码 | 第53-54页 |
5.2 基于探测方法的防御 | 第54-55页 |
5.3 堆栈保护 | 第55-58页 |
5.3.1 堆栈的完整性的堆栈保护 | 第55-56页 |
5.3.2 非执行的堆栈防御 | 第56-57页 |
5.3.3 使堆栈向高地址方向增长 | 第57-58页 |
5.3.4 锁定缓冲区技术 | 第58页 |
5.4 C/C++ 解决方案 | 第58-61页 |
5.4.1 标准库方法 | 第59-60页 |
5.4.2 数组边界检查 | 第60-61页 |
5.5 本章 小结 | 第61-62页 |
第6章 数组边界检查的优化方案及实现 | 第62-69页 |
6.1 优化方案的提出 | 第62-64页 |
6.2 软件优化 | 第64-65页 |
6.3 硬件优化 | 第65-66页 |
6.4 方案实现 | 第66-67页 |
6.4.1 指针边界检查的变换 | 第66-67页 |
6.4.2 数组边界检查的变换 | 第67页 |
6.5 实验及结果分析 | 第67-68页 |
6.6 本章 小结 | 第68-69页 |
第7章 总结与展望 | 第69-71页 |
7.1 全文总结 | 第69-70页 |
7.2 展望 | 第70-71页 |
参考文献 | 第71-75页 |
致谢 | 第75-76页 |
攻读学位期间已发表或录用的论文 | 第76页 |