-
-
[原创] pwnable.kr 中 栈溢出问题 simple login 的writeup
-
发表于: 2019-3-5 23:18 8080
-
这里var_14= byte ptr -14h,eax就是v4,它距离ebp的距离为0x14-0xC = 0x8,但是我们input的最大长度为0xC,比v4大了4字节,所以我们的input可以在memcpy的时候将ebp覆盖。
Download : 735K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8%4L8X3q4T1L8r3g2Q4x3X3g2C8M7W2)9J5c8X3u0A6L8W2)9J5c8X3I4G2k6$3W2F1
Running at : nc pwnable.kr 9003
首先将文件下载下来,拖入IDA,按F5得到伪码。

来到第14行,这里表示会对我们的输入进行一次base64的解密,返回解密后字符串的长度赋值给v6.
最后一步关键操作就是第22行的auth验证函数。

在这里它会生成哈希值,即使每次我们的输入完全一样它也会生成不同的哈希值,所以只能想办法来绕过它。
看一下auth函数的反汇编代码:

这里var_14= byte ptr -14h,eax就是v4,它距离ebp的距离为0x14-0xC = 0x8,但是我们input的最大长度为0xC,比v4大了4字节,所以我们的input可以在memcpy的时候将ebp覆盖。
接下来就是分析思考的时候了。
在执行call指令的时候,类似于执行了push eip,jmp xxxxxxxx,而这里ret类似于pop eip。
在执行call memcpy的时候,假设执行auth函数的时候esp的值为0x0010038,此刻的栈类似这样:

如果我们input输入了0xC个字符的话,假设我们输入0xC个a,执行完memcpy以后栈的情况就变成了:

当auth函数执行到最后的时候,是这样:

会执行一个leave和一个retn。
我们知道,leave的作用类似于mov esp,ebp ,pop ebp ,retn的作用相当于pop eip。
赞赏
他的文章
- [原创]第二题子鼠开天 2932
- [已解决]qemu如何进入monitor模式? 4218
- [求助]v8引擎编译debug问题 3601
赞赏
雪币:
留言: