为什么ROP攻击后printf函数不显示字符串?

时间:2019-06-13 19:29:22

标签: security gcc assembly buffer-overflow exploit

我正在尝试使用缓冲区溢出执行具有ROP攻击的功能。

我的代码:

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 void jumphere(){
  5     printf("SUCCESS!!");
  6 }
  7 
  8 int main(int argc, char** argv){
  9     char buffer [8];
 10     strcpy(buffer, argv[1]);
 11 
 12     printf("%s\n", buffer);
 13 
 14     return 0;
 15 }

目标是执行提供特定输入的jumphere函数。

在主函数的末尾,当执行ret指令时,我弄清楚了$ eip指向什么,然后用jumphere函数的地址改写了该地址。

我成功跳转到jumphere函数,但是没有显示“ SUCCESS”。

为了找到原因,我制作了另一个简单的代码来打印字符串。

简单代码:

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 void printing(){
  5     printf("SUCCESS");
  6 }
  7 
  8 int main(int argc, char** argv){
  9     printing();
 10 }

两个代码之间的区别是:

SimpleCode 中,指令流在printing之后转到call <printing>函数,并在main结束时返回到printing函数。执行ret中的main时将打印该字符串。

但是在 MyCode 中,它在jumphere函数结束后转到main,并且不会返回到main

我该如何解决这个问题?

0 个答案:

没有答案