Ret2text
原理
在 CTF 和二进制安全里,Ret2text 是一种非常经典的栈溢出利用手法。它的名字可以这样拆开理解:
Ret:Return,代表 “返回地址”
2 / to:到、跳转到
text:
.text段,存放程序机器指令的区域
简单说,Ret2text 就是利用栈溢出漏洞,将函数的返回地址篡改为程序 .text 段中已存在的合法代码,从而劫持控制流去执行这些代码来获取 shell
因为执行的代码是程序本来就有的,所以它不需要注入 Shellcode,也能绕过 NX 保护
实战案例
帮我取一个题目名称(Ret2text)

没开金丝雀,read 函数读取大小为 64 字节

变量 s 距离 r 处是 0x28 个字节

后门函数地址是 0x0401162

1 | from pwn import * |
easy stack(Ret2text)

没有金丝雀

后门函数地址

nc 过去先看看回显什么

开局给了后门函数地址

找到打印的第二句话的位置

观察变量 s 的栈布局

离 r 处有 0x88 + 0x4 的距离,但是 read 函数给了 0x100 的长度,完全够溢出

1 | from pwn import* |