- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
缓冲区溢出攻击技术-栈溢出攻击技术3
缓冲区溢出攻击技术 -栈溢出攻击技术 XXX The Artemis Project 2006-5-31 内容 缓冲区溢出攻击简介 基本概念及发展历史 背景知识 (Linux win32) 缓冲区溢出攻击的原理 栈溢出攻击如何工作? Linux: 栈溢出, shellcode Win32: 栈溢出, shellcode 总结 缓冲区溢出攻击的威胁 缓冲区溢出攻击的基本概念 向缓冲区中填入过多的数据,超出边界 导致数据外溢,覆盖了相邻的内存空间 利用缓冲区溢出改写数据、改变程序执行流程 干扰系统运行,破坏系统完全性,任意执行恶意代码 缓冲区溢出攻击的发展历史 1980s Morris蠕虫-fingerd缓冲区溢出攻击 1996 Aleph One, Smashing the Stack for Fun and Profit, Phrack 49 1998 Dildog: 提出利用栈指针的方法完成跳转 The Tao of Windows Buffer Overflows 1999 Dark Spyrit: 提出使用系统核心DLL中的Jmp ESP指令完成跳转, Phrack 55 M. Conover: 基于堆的缓冲区溢出教程 缓冲区溢出攻击背景知识与技巧 编译器、调试器的使用 Linux: gcc+gdb Win32: VC6.0+OllyDbg 进程内存空间结构 汇编语言基本知识 栈的基本结构 函数调用过程 GCC编译器基础 最著名的GNU的Ansi c/c++编译器 gcc [options] [filenames] 编译: gcc -c test.c 生成 test.o 连接: gcc -o test test.o 同时搞定: gcc test.c -o test make: 用于控制编译过程 Makefile How To GDB调试器的使用 断点相关指令 break/clear, disable/enable/delete watch – 表达式值改变时,程序中断 执行相关指令 run/continue/next/step attach – 调试已运行的进程 finish/return 信息查看相关指令 info reg/break/files/args/frame/functions/… backtrace – 函数调用栈 print /f exp – 显示表达式的值 x /nfu addr – 显示指定内存地址的内容 list – 列出源码 disass func – 反汇编指定函数 VC6.0命令行 环境变量 我的电脑-属性-高级-环境变量 PATH: C:\Program Files\Microsoft Visual Studio\VC98\Bin; C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin; INCLUDE: C:\Program Files\Microsoft Visual Studio\VC98\Include LIB: C:\Program Files\Microsoft Visual Studio\VC98\Lib 命令行指令 cl sourcefilename – 编译并链接 Win32平台调试器 OllyDbg1.10汉化版 32-bit assembler level analysing debugger by Oleh Yuschuk Free 支持插件机制 OllyUni: 查找跳转指令功能 Softice IDA Pro 背景知识-进程内存空间 Linux进程内存空间 Highest zone (0xc0000000-3G) 进程环境参数: env strings pointers 进程参数: argv strings pointers, argc 栈 存储函数参数、本地参数和栈状态变量 (返回地址, …) LIFO, 向低地址增长 堆 动态分配变量 (malloc) 向高地址增长 .bss: uninitialized data .data: static initialized data .text(0: 指令, 只读数据 Example: ./linux/memory/memory.c Win32进程内存空间 系统核心内存区间 0xFFFFFFFF~0(4G~2G) 为Win32操作系统保留 用户内存区间 00(2G~0G) 堆: 动态分配变量(malloc), 向高地址增长 静态内存区间: 全局变量、静态变量 代码区间: 从0始 栈: 向低地址增长 单线程进程: (栈底地址: 0x0012
文档评论(0)