CTF-PWN练习之返回地址覆盖

本文介绍了CTF-PWN练习中的返回地址覆盖技术,涉及函数调用约定、基本的缓冲区溢出攻击模型。通过实验步骤,包括源码审计、GDB调试和构造溢出攻击,深入理解缓冲区溢出攻击原理,最终成功改写函数返回地址,触发特定行为。

预备知识

一、相关实验

本实验要求您已经认真学习和完成了《CTF-PWN练习》、《CTF-PWN练习之精确覆盖变量数据》、《CTF PWN练习之函数指针改写》等试验。

二、函数调用约定

函数调用约定描述了函数传递参数的方式和栈协同工作的技术细节,不同的函数调用约定原理基本相同,但在细节上是有差别的,包括函数参数的传递方式、参数的入栈顺序、函数返回时由谁来平衡堆栈等。本实验中着重讲解C语言函数调用约定。
通过前面几个PWN系列实验的学习,也许你已经发现了在gdb中通过disas指令对main函数进行反汇编时,函数的开头和结尾的反汇编指令都是一样的:

push   %ebp
mov    %esp,%ebp
......
leave
ret

在函数的开头,首先是一条push %ebp指令,将ebp寄存器压入栈中,用于保存ebp寄存器的值,接着是mov %esp,%ebp将esp寄存器的值传递给ebp寄存器;在函数的末尾,leave指令相当于mov %ebp,%esp和pop %ebp两条指令,其作用刚好与开头的两条指令相反,即恢复esp和ebp寄存器的内容。
如果在函数A中调用了函数B,我们称函数A为主调函数,函数B为被调函数,如果函数B的声明为int B(int arg1, int arg2, int arg3),那么函数A中的调用函数B时的汇编指令的形式如下:

push arg3
push arg2
push arg1
cal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值