- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
缓冲区溢出技术[精选]
缓冲区溢出技术 堆栈 从物理上讲,堆栈是就是一段连续分配的内存空间 静态全局变量是位于数据段并且在程序开始运行的时候被加载 动态的局部变量 则分配在堆栈里面 从操作上来讲,堆栈是一个先入后出的队列,其生长方向与内存的生长方向正好相反 我们规定内存的生长方向为向上,则栈的生长方向为向下 压栈的操作push=ESP-4 出栈的操作是pop=ESP+4 在一次函数调用中,堆栈中将被依次压入: 参数,返回地址,EBP 如果函数有局部变量,接下来,就在堆栈中开辟相应的空间以构造变量 函数执行结束,这些局部变量的内容将 被丢失。但是不被清除 在函数返回的时候,弹出EBP,恢复堆栈到函数调用的地址,弹出返回地址到EIP以继续执行程序 在C语言程序中,参数的压栈顺序是反向的:比如func(a,b,c)。在参数入栈的时候,是先压c,再压b,最后压a 在取参数的时候,由于栈的先入后出,先取栈顶的a,再取b,最后取c 运行时的堆栈分配 我们用gcc -S 来获得汇编语言输出,可以看到main函数的开头部分对应如下语句: pushl %ebp movl %esp,%ebp subl $8,%esp 首先把EBP保存下来,然后EBP等于现在的ESP,这样EBP就可以用来访问本函数的 局部变量 之后ESP减8,就是堆栈向上增长8个字节,用来存放name[]数组。现在堆栈 的布局如下: 之后ESP减8,就是堆栈向上增长8个字节,用来存放name[]数组。现在堆栈 的布局如下: 由于我们输入的name字符串太长,name数组容纳不下,只好向内存顶部继续写‘A’ 由于堆栈的生长方向与内存的生长方向相反,这些‘A’覆盖了堆栈的老的元素 EBP,ret都已经被‘A’覆盖了 在main返回的时候,就会把‘ AAAA’ 的ASCII码:0为返回地址,CPU会试图执行0的指令,结果出现错误,这就是一次堆栈溢出 Shellcode的编写 Shellcode.c #include stdio.h void main() { char *name[2]; name[0] = /bin/sh; name[1] = NULL; execve(name[0], name, NULL); } execve( ) execve函数将执行一个程序 程序的名字地址作为第一个参数 一个内容为该程序的argv[i](argv[n-1]=0)的指针数组作为第二个参数 (char*) 0作为第三个参数 execve的汇编代码 $ gcc -o shellcode -static shellcode.c $ gdb shellcode (gdb) disassemble __execve Dump of assembler code for function __execve: 如何精简? 经过以上的分析,可以得到如下的精简指令算法: movl $execve的系统调用号,%eax movl bin/sh\0的地址,%ebx movl name数组的地址,%ecx movl name[n-1]的地址,%edx int $0x80 ;执行系统调用(execve) 问题 当execve执行成功后,程序shellcode就会退出,/bin/sh将作为子进程继续执行 如果execve执行失败,(比如没有/bin/sh这个文件),CPU就会继续执行后续的 指令,结果不知道跑到哪里去了 所以必须再执行一个exit()系统调用, 结束shellcode.c的执行 exit(0)汇编代码 exit(0) 的汇编代码精简 movl $0x1,%eax ;1号系统调用 movl 0,%ebx ;ebx为exit的参数0 int $0x80 ;引发系统调用 execve + exit movl $execve的系统调用号, %eax movl “bin/sh\0”的地址, %ebx movl name数组的地址, %ecx movl name[n-1]的地址, %edx int $0x80
您可能关注的文档
- 绝句三首[精选].ppt
- 绝对值[精选].ppt
- 绝密罗杰道森课程谈判笔记完整版[精选].doc
- 绝对经典 解读时间_学习横向展开议论[精选].ppt
- 绝句(迟日江山丽)[精选].ppt
- 绝对成本理论[精选].ppt
- 绝经妇女激素替代疗法的利弊与临床决策[精选].doc
- 绝缘子-通用-交流盘形-2008年1月版[精选].doc
- 绝版的周庄[精选].ppt
- 绝缘子-通用-直流盘形-2007A[精选].doc
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)