ctf-wiki之ret2text学习笔记

ret2text即执行程序中已有代码,例如程序中写有system等系统的调用函数,我们就可以利用控制已有的gadgets(以ret结尾的指令序列,通过这些指令序列,可以修改某些地址的内容)控制system函数。

这是ctf-wiki上ret2text的例子。

首先查看保护


仅仅开启了栈不可执行保护,并且位32位的程序

利用IDA查看程序


发现明显的栈溢出漏洞,gets()函数


发现secure函数中调用了system函数

所以我们可以利用gets函数的漏洞使得程序执行system()函数从而进行获取shell.

所以我们现在要知道输入多少个字符会导致栈溢出

利用脚本pattern或使用pwntools中的函数cyclic生成150个有序字符

使用pattern:

首先生成150个有序字符


生成150个有序字符

接着利用gdb调试,查看溢出点


在0x64413764发生溢出

利用pattern.py脚本自带方法,计算偏移量


计算出偏移量位112

使用pwntools自带方法cyclic:


生成150个有序字符

利用gdb调试


找到溢出点

pwntools也有自带方法计算偏移量即与cyclic相对于的cyclic -l 地址 计算偏移量


计算出偏移量112

我们已经计算出偏移量,那么可以利用栈溢出漏洞调用程序中自带system函数从而得到系统的shell


调用system函数地址0x0804863A

脚本


python脚本

运行脚本


获得系统权限

你可能感兴趣的:(ctf-wiki之ret2text学习笔记)