Python 缓冲区溢出漏洞利用问题
我正在尝试完成一个涉及覆盖函数指针的缓冲区溢出。易受攻击的C程序如下所示: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
#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)