pwnable.kr write up 之 sample login

作为一个萌新,能看懂真是不容易。

这题很明显是一道溢出题,auth函数中的memcpy有溢出。因为把input复制到v4上,v4在栈中,长度为8.[bp-8h]。然而题目要求的输入不能超过12位,这样你只能够得到ebp,无法一次性把ret addr也给改了,这就很蛋疼了。(需要注意的是题目要求输入的是经过base64encode之后的字符)。而我们想要的bin/sh在程序中已经有了,就在correct那里,所以想办法跳转到那个位置就可以了。首先要控制esp和ebp,利用溢出直接改写掉ebp,让他指向input的地址。等到下一个ret时,我们就可以控制eip了。很神奇是不是。具体就像这样。

payload的组成由三部分,第一部分四个字节,覆盖v4,第二个部分是bin/sh的地址,第三个部分就是input的地址。

首先,payload会覆盖ebp,使ebp指向input的地址,然后,在第一次ret的时候,由于ebp被成功修改,变成input的地址,

重点来了,到了下一个ret的时候,由于ebp已经在input那个位置了,所以esp会变成ebp+4,也就是bin/sh的地址,这也就是eip的下一条指令,成功实现了跳转。

果然要够猥琐才行。

你可能感兴趣的:(随笔)