lab2-2

通过gdb调试,可以看到main函数调用一个函数,这个函数内调用两次myRead进行输入字符串,

通过查看,可以看到输入缓存区的地址,第一个输入缓存区地址为0x804a060,是一个真实地址,

image.png

第二个缓存区是栈中的地址,

image.png

因为第二个缓存区是栈中的地址0xffffcfb0,方便进行与ebp相减,0xffffcfd8-0xffffcfb0得出长度为40个字节。也就是我们需要44个字节才可以把覆盖到ebp,后面的4个字节是ret的地址。

然后需要开始写shellcode,写shellcode的关键就是进入到/bin/sh目录下,需要用到函数execv,我是从网上找了一个最简单的shellcode修改了一下,编译完测试是可以正常执行的。

image.png
image.png

然后获得这个shellcode的字节码

image.png

最后需要把shellcode输入,然后ret处写入shellcode的地址。我把shellcode作为第二次输入,然后用a把剩下的字节补齐,再把第二个输入缓存区的地址写在后面,“a”*19的原因是字节码已经占了25位,一共需要44位,所以剩下的19位用a填充

image.png

但是发现一直无法执行,对进程debug后,发现这个缓存区地址是无法访问的,

image.png

于是想改写shellcode把地址往栈外引,但是发现第一个缓存区地址是真实的地址,于是将shellcode在第一个缓存区写入,第二个缓存区进行溢出,ret处的地址写第一个缓存区的地址,

image.png
image.png

于是可以成功拿到shell

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容