Python 缓冲区溢出漏洞利用问题

Python 缓冲区溢出漏洞利用问题,python,buffer-overflow,Python,Buffer Overflow,我正在尝试完成一个涉及覆盖函数指针的缓冲区溢出。易受攻击的C程序如下所示: #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <string.h> void win() { printf("code flow successfully changed\n"); } int main(int argc, char **argv) { volatile i

我正在尝试完成一个涉及覆盖函数指针的缓冲区溢出。易受攻击的C程序如下所示:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

void win()
{
  printf("code flow successfully changed\n");
}

int main(int argc, char **argv)
{
  volatile int (*fp)();
  char buffer[64];

  fp = 0;

  gets(buffer);

  if(fp) {
      printf("calling function pointer, jumping to 0x%08x\n", fp);
      fp();
  }
}
得到一个奇怪的结果:

calling function pointer 0x55468ac3
Segmentation fault (core dumped)

检查内存后,我发现缓冲区中正确填充了0x41s,但接下来的两个字(fp*)是0x55468ac3和0x00000055。我无法理解为什么数据会以这种方式被隐藏。

您是否尝试过一次一条指令(显然,当您接近72条指令时)单步执行程序集,以查看您感兴趣的内存在什么时候发生了更改?换行符??请尝试导入sys;sys.stdout.write('A'*72+'\xca\x46\x55\x55')”@K.Jiang,因为Python
print()
函数默认为追加换行符。使用
print(something,end=”“)
覆盖默认值。我明白了。事实上,我再次尝试运行此功能,但结果却完全相同。有趣的是,如果我将任何附加字节更改为大于0x80的值,它就会变得一团糟。
calling function pointer 0x55468ac3
Segmentation fault (core dumped)