#include<stdio.h>intmain(){int index = ; //填充字符int i;for (i = 0; i < index; ++i) {printf("A"); }char a[100] = ""; //填充数据printf("%s", a);return0;}
修改变量由于上面的代码有一个变量val,我们就修改该变量。通过上面的内存栈图可以看到,用户输入的字符串后面就是val变量的值。也就是说,我们需要先填充10个字符,随后紧跟上我们要改的数值。内存中采用的是小端存储,所以00000001在内存的形式为\x01\x00\x00\x00。根据上面的计算,到返回地址需要填充26个字符,success函数的地址为004013B0,修改payload代码数据,生成exe: 3总结刚开始用vs搞,怎么也无法成功,后来发现需要用gcc编译器,vs的编译器似乎有某种机制,不按正常套路出牌。还有一些保护机制也要进行关闭,否则也没有办法成功,建议大家在linux上尝试。另外,还有strcpy、strcmp等函数也存在这样的漏洞。- END -往期推荐