编写并调试一个堆栈溢出的程序
  EEp8yVjT9N2T 2024年03月27日 26 0

编写并调试一个堆栈溢出的程序

编写存在栈溢出漏洞的 c++ 程序:

stack_overflow.cpp

#include <iostream>
using namespace std;
void hello(){
    char name[8];
    scanf("%s",name);
    printf("hello,%s!\n",name);
}
void stack_overflow(){
    printf("Aha,suprise!\n");
}
int main(){
    hello();
    return 0;
}

对于 GCC 编译器,可以尝试使用 -fno-stack-protector​ 选项来禁用堆栈保护。

使用 -g ​使其可调试

编译命令:g++ stack_overflow.cpp -o stack_overflow -g -fno-stack-protector

使用 gdb 查看 stack_overflow 函数的地址:0x000055555555520e

命令是 info addr stack_overflow

查看ASCLL码表可知:0x0e 对应的字符是 SO

在终端中,你可以直接输入 SO 字符的 ASCII 码,即按下 Ctrl+V,然后输入 Ctrl+N(对应 ASCII 码的 0x0E),这样就能够输入 SO 字符。

所以该地址的 ASCLL 编码为:^NRUUUU (小端序)

image

image

前面用 16 个'a'用来覆盖 name 缓冲区和栈上的 EBP,后面用 ^NRUUUU 覆盖栈上的 EIP

image

如此即可篡改返回地址,执行 shellcode

​​

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年03月27日 0

暂无评论

推荐阅读
  YOkriIV1Am1d   4天前   13   0   0 网络安全