先看看调用hexmatch前后缓冲区、返回地址和返回地址上8个字节的变化(缓冲区40bytes)
在这里前后插入两个断点
然后写了一个checkspace,目的是让test在返回时返回到touch3的地址。
两处断点处栈分别是这样的
说明0x556647d8处可以放我们曲奇饼的地址!(?)
现在开始写汇编代码
根据上图写出攻击字符串的16进制形式,其中最后两行是曲奇饼的ASCII码
转换成字符串后,报错
看起来像是已经成功到达了touch3,但是没有传递正确的参数。
!!!
我发现是因为我把
movq $556647d8 %rsi
写成了
movq $556647a8 %rsi
分析了一下之后我在攻击字符串16进制表示的其中一个字节处做了改动
就成功啦!