Ret2Text原理及应用
0x 01 Ret2Text原理
- BSS段通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS段属于静态内存分配。
- Data通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
- Text通常是指用来存放程序执行代码的一块内存区域。称为代码段。
- rodata段存放C中的字符串和#define定义的常量
ret2text 即控制程序执行程序本身已有的的代码 (.text),使EIP指向具有system(“/bin/sh”)的代码段
0x 02 实例分析
ida查看程序中,存在system函数
main函数伪代码如下:
首先寻找多少字节能溢出切刚好能够覆盖return addr。我们使用gdb-peda提供的pattern_create和pattern_offset。pattern_create是生成一个字符串模板输入后根据EIP来确定覆盖return addr的长度。
1 | gdb-peda$ pattern_create 200 |
然后让程序跑起来输入这串字符串后程序崩溃。根据错误地址计算偏移量
1 | Legend: code, data, rodata, value |
最终exp如下:
1 | from pwn import * |