我必须使用一串 shell 操作码来利用下面代码中的缓冲区漏洞。我几乎已经看到了 Google 建议的所有内容,但由于功能分离,这个特殊问题让我感到困惑。
void printThis(){
if(printf("You did it 1!") >=0) exit(0);
if(printf("You did it 2!") >=0) exit(0);
if(printf("You did it 3!") >=0) exit(0);
}
void readIn(FILE *f){
char exploit[12];
int i;
fscanf(f, "%s", exploit);
for( i = 0; i < 12; i++){
printf("%c", exploit[i]);
}
printf("\"\n");
}
int main(int argc, char** argv){
FILE *fp;
fp = fopen(argv[1], "r");
readIn(fp);
fclose(fp);
printf("You suck at exploiting. I should not be printed.");
}
我很好奇如何readIn()
使用语句的返回地址溢出缓冲区,printThis()
因为它们使用不同的堆栈。直觉说,跳转到 print 调用会起作用,但我无法让它起作用。
有什么建议可以获取 GDB 中有效负载所需的信息吗?谢谢你的帮助!