实验过程:
1:安装32位编译工具 lib32z1 libc6-dev-i386,关闭地址空间随机化
2:安装编译器zsh并替换sh指向的/bin/bash(因为sh具有保护欺骗性uid程序在整个运行中不保持root权限)
3:shellcode(汇编码字节填充,一共64字节)
4:su权限编译stack.c
Fopen(“badfile”,r)badfile必须存在,也就是我们先运行exploit.c生成可执行文件exploit,运行就会生成badfile
gdb调试可执行文件stack
Gdbstack
Disassmain
得到汇编代码:
5:分析得出:offset<+0>到<+13>分别进行了16位对齐操作,并且初始化esp,ebp,在<+14>栈空间接着sub指令使esp-214,也即栈向下增长分配了214*4的字节空间,存放517位str数组,可知str
的地址在
6:设置断点break,print出$esp地址并编译exploit.c:
7:首先运行exploit,生成badfile二进制文件
再运行stack.c漏洞程序去读取badfile,由于badfile在在填充字符时加入了str的起始地址
所以读取这段指令只要把badfile中添加str的地址进行ret覆盖即可,所以将0x080484e8加上64得到0xffffcf14,进行反向覆盖,这里的原因是在栈中分配数组str时,大于str的esp的空间都已经使用,而字节填充数组的方向和栈增长的放向是相反的,所以应该以14cfffff填充buffer尾端字节
以上操作运行完毕
--- --- --- --- --- --- --- -- ---- -------- ----
溢出操作:
如果配置没有做好就不能够获得root权限,因为linux“百毒不侵”的原因便是栈地址随机化,其次/bin/bash下编译器sh的保护机制,在程序运行前已经多次遇阻,无法获得root权限或者提示:栈溢出,核心已转储!
配置成功就是root!

你可能喜欢