ret2text即执行程序中已有代码,例如程序中写有system等系统的调用函数,我们就可以利用控制已有的gadgets(以ret结尾的指令序列,通过这些指令序列,可以修改某些地址的内容)控制system函数。
这是ctf-wiki上ret2text的例子。
首先查看保护
利用IDA查看程序
所以我们可以利用gets函数的漏洞使得程序执行system()函数从而进行获取shell.
所以我们现在要知道输入多少个字符会导致栈溢出
利用脚本pattern或使用pwntools中的函数cyclic生成150个有序字符
使用pattern:
首先生成150个有序字符
接着利用gdb调试,查看溢出点
利用pattern.py脚本自带方法,计算偏移量
使用pwntools自带方法cyclic:
利用gdb调试
pwntools也有自带方法计算偏移量即与cyclic相对于的cyclic -l 地址 计算偏移量
我们已经计算出偏移量,那么可以利用栈溢出漏洞调用程序中自带system函数从而得到系统的shell
脚本
运行脚本