预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共45页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

缓冲区溢出技术堆栈运行时的堆栈分配我们用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码:0x41414141作为返回地址,CPU会试图执行0x41414141处的指令,结果出现错误,这就是一次堆栈溢出Shellcode的编写Shellcode.cexecve()execve的汇编代码如何精简?问题exit(0)汇编代码exit(0)的汇编代码精简execve+exit万事具备,还欠什么?jmp+call在large_string中填入buffer的地址 把shell代码放到large_string的前面部分将large_string拷贝到buffer中造成溢出,使返回地址变为buffer,而buffer的内容为shell代码。这样当程序试从strcpy()中返回时,就会转而执行shell如何利用别人的漏洞利用别人的程序的堆栈溢出获得rootshell 以一个有strcpy堆栈溢出漏洞的程序,利用前面说过的方法来得到shell 同样必须完成两件事 把自己的shellcode提供给对方,让对方可以访问shellcode 修改对方的返回地址为shellcode的入口地址HowHow下面这个函数,用eax返回当前程序的堆栈指针。(所有C函数的返回值都放在eax寄存器里面) --------------------------------------------------------------- unsignedlongget_sp(void){ __asm__("movl%esp,%eax"); } ---------------------------------------------------------------猜?前面我们用来覆盖堆栈的溢出字符串为: 现在变为: 其中: N为NOP.NOP指令意思是什么都不作,跳过一个CPU指令周期。在intel机器上,NOP指令的机器码为0x90 S为shellcode A为我们猜测的buffer的地址 这样,A猜大了也可以落在N上,并且最终会执行到S