#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
char overflowme[32];
printf("overflow me : ");
gets(overflowme);
if(key == 0xcafebabe){
system("/bin/sh");
}
else {
printf("Nah..\n");
}
}
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}
溢出发生在gets(overflowme),ida载入,发现需要覆盖的是a1的地址bp+8h,s的地址[bp-2ch],所以需要覆盖2ch+8h=52字节。
所以可以构造如下python脚本:
,如下图: