文章预览
8. pwn02 存在后门函数和/bin/sh字符串,很明显的栈溢出漏洞。gdb调试的时候发现溢出字节数不够。0x1b4-0x198刚好0x1c,只能覆盖ret和ret后的一个地址,也就是8字节。 因此这题为标准栈迁移的利用。在栈溢出中,为了完成这样的构造,需要溢出至少12个字节(32位)。 ——低位—— system () exit () /bin/sh 0 ——高位—— 但有些时候只有8个字节,这个时候就需要栈迁移。 栈迁移的关键在于利用leave;ret指令,这个指令非常常见,任何一个函数的结尾基本都可以找到它。那么leave是什么呢,leave=mov esp ebp;pop ebp。就是将ebp复制给esp,然后将栈顶的内容弹入ebp。栈顶的内容是什么呢?就是ebp内容。 其实就是ebp = ebp内容,esp = ebp(实际上因为过了一行汇编,所以是ebp+4)。 看gdb中正常的一次leave。 leave前 leave后 如何利用leave;ret完成栈迁移呢,很简单,就是在上面这次
………………………………