【发布时间】:2018-10-03 15:01:51
【问题描述】:
我正在阅读 Shellcoder 的手册,我目前在第 2 章,我有一个简单的程序可以通过溢出预期的输入然后为 ret 指令发出一个新位置来利用,以便函数 return_input 可以执行两次!
这是用C编写的简单程序
void return_input (void)
{
char array[30];
gets (array);
printf(“%s\n”, array);
}
main()
{
return_input();
return 0;
}
这是主函数的反汇编版本,我们可以看到调用函数的跳转地址。
我使用以下命令并输入溢出的字符,它们后面的地址应该替换 ret 的内容
但正如您所见,我没有运行两次 return_input 函数,而是打印出一个问号并说分段失败
【问题讨论】:
-
UB͏͏͏͏͏͏͏͏͏͏͏͏͏
-
这种“利用”总是那么愚蠢……如果返回地址恰好包含一个值为 0x00 的字节,你会怎么做?即使没有 ASLR,这反过来似乎也很可能。
-
请不要将文本粘贴为图像。没有人希望你的整个屏幕截图看到 2 行文字!
-
您是否尝试过使用预期输入调试程序?
-
@MartinVéronneau 我试过了,但 gdb 不允许我插入断点,它说无法访问内存
标签: c reverse-engineering buffer-overflow exploit