从ret2libc开始,我们将不再局限于像ret2text那样的栈溢出了,而是要开始接触另一个技术————ROP技术。什么是ROP技术我此前详细写了博客,在此不再赘述。
ret2libc就是拿程序里已有的函数库做文章,可以ret到的plt表,或或者ret到函数实际放置的got表处
egctfshow pwn入门39&41
这两个题思路是一样的,区别是39有bin/sh,41有sh
首先这个题是存在明显栈溢出的,而system和sh是有但是不在一起的



查了一下sh和bin/sh有什么区别,实际上可以用sh代替bin/sh


这段payload首先填充了buf,然后把system地址改到了返回地址,然后把system的ret用四个字节填充了。为什么要填充4个字节呢,我们知道,32位系统传参是用栈传递的,我们用call调用函数时,call会把函数的返回地址压入栈中,函数调用结束后会执行ret指令,回到返回地址处。但我们并不希望system函数返回到某处,因此将返回地址填充上所谓的“虚假地址”,而返回地址往后是system函数的一参,也是我们希望sh在的地方。因此接下来把sh写到system函数的一参,就可以执行shll了
