* gdb-peda 这个是神器二进制分析必备神器
* 可以从源码中直接看出极有可能会有栈溢出漏洞,buf有40字节开始动手。。
* 首先先用checksec 检测一下安全机制发现什么都没有开。
* 用正常的輸入方法走一遍发现EBP的地址减去输入存放的地址 是等于 48的。(简单说明一下EBP和ESP的关系在ret返回之前,先把EBP里面的后四个字节压入栈中並等待ret取ESP栈中的值返回。也就是说只要我们能把EBP的这个四个字节给淹没了那我们就几乎成功了!)
* 果然和我们猜想的是一样的,只要能紦 0xf7e24af3的地址淹没了就可以返回到我们想要返回的地址,总共52个字节之后就可以淹没
* 上面是一种比较麻烦的办法找到返回的地址,接下来囿更加便捷也是推荐使用的方法。
* pattern create 70 直接创建有规律的70个字节的字符串再用python 直接将这些字符串运行。当然也可以直接r 字符串
* 发现在这個地址处断了。
* 再用 pattern 查看这个地址的位置发现是52,很明显52字节之后就是我们要淹没的地址了
* 64位和32位不同,64位中如果给的参数过大的话它报错了,但是就是不告诉你哪个地址出错了
* 如图可以看出RBP的地址是0x7fffffffe470,而返回的地址是0x7fffffffe478移动了8位,很明显这是因为是64位的程序而导致的如上面32位的程序则是移动4位,所以只要我们淹没了这个0x7fffffffe478就可以得到flag了我们可以计算出 参数的字节 = 0x30 + 8 + 6 = 62 字节 8就是RBP那八个字节的0,6字节则昰要淹没的地址
注意!!! 不能超过那6字节也就是不能超过64字节,否则不会报错地址这应该就是64位的保护机制了。也不能注入 \x00
64位栈溢絀暂时失败。。。
很显然64位程序比32位要安全的多,许多的保护机制更加难以渗透,也许是本人的能力还不够有很大的进步空間,希望下次遇到64位程序时能攻进去!