程序:
#include <stdio.h>
void exploit()
{system("/bin/sh");
}
void func()
{char str[20];read(0,str,50);printf("the str is:%s\n",str);
}
int main()
{func();return 0;
}
关掉保护机制:
gcc -no-pie -fno-stack-protector -z execstack -m32 -o 3.exe 3.c
检查一下:
checksec 3.exe
0x01 kali自带
msf-pattern_create -l 100
创建长度为100的字符串
运行我们的程序:
start
一直下一步,直到需要填入参数:
这个时候程序报错了,表示有溢出了
我们来看看eip的值,0Ab1,表示溢出使返回的地址是这个
使用命令,查看在哪里溢出了
msf-pattern_offset -q 0Ab1
32位,我们可以修改从32位开始的数据,让程序跳转到我们指定的地址执行
0x02 peda
pattern create 100
生成长度为100字符串
使用命令r,让程序继续执行,复制我们生成的字符串,注意单引号不要复制
溢出了,查看现在的EIP,A)AA
使用命令查看溢出位置
pattern offset A)AA
32位
0x03 pwndbg插件
cyclic 100
生成长度为100的字符串,按照上面的顺序,得到溢出eip的值为iaaa
查找溢出位置:
cyclic -l iaaa
32位