编写并调试一个堆栈溢出的程序
编写并调试一个堆栈溢出的程序编写存在栈溢出漏洞的 c++ 程序:
stack_overflow.cpp
#include <iostream>
using namespace std;
void hello(){
char name;
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 (小端序)
https://img2023.cnblogs.com/blog/1862513/202403/1862513-20240325223139144-1725581237.png
https://img2023.cnblogs.com/blog/1862513/202403/1862513-20240325223140068-925773911.png
前面用 16 个'a'用来覆盖 name 缓冲区和栈上的 EBP,后面用 ^NRUUUU 覆盖栈上的 EIP
https://img2023.cnblogs.com/blog/1862513/202403/1862513-20240325223140576-892937972.png
云云即可篡改返回地址,执行 shellcode
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]