无法在简单程序中利用溢出(第2章shellcoder的手册)

时间:2018-04-23 14:07:37

标签: c reverse-engineering buffer-overflow exploit

我正在阅读shellcoder的手册,我目前在第2章,我有一个简单的程序可以通过溢出预期的输入然后为ret指令发出一个新位置来利用,这样函数return_input可以执行两次!

这是用C

制作的简单程序
void return_input (void)
{
  char array[30];
  gets (array);
  printf(“%s\n”, array);
}
main()
{
  return_input();
  return 0;
}

这是主要功能的反汇编版本,我们可以看到调用函数的跳转地址。

Dissas

我使用以下命令并输入溢出的字符,后面跟着应该替换ret的内容的地址

printf

但是你可以看到我没有运行两次return_input函数而只是打印出一个问号并说分段失败

1 个答案:

答案 0 :(得分:0)

  1. gets读取终止字节并用NULL字节替换它,因此您所需的ret被该NULL字节打破。
  2. 您在反汇编代码中看到的偏移是 NOT 真实地址,您编译的程序设置了PIE标志,因此实际地址可能看起来像0x55555????58a,这就是为什么gdb不允许您插入断点,因为您可能尝试执行b *0x58a或其他操作。使用-no-pie进行编译可以让生活更轻松。