BugkuCTF-PWN题pwn2-overflow超详细讲解

本文详细解析了Bugku CTF中PWN题pwn2的解题过程,重点介绍了x64函数调用规则和C语言相关知识点,包括栈溢出利用、get_shell_函数地址计算以及相关函数如memset、setvbuf、puts和read的使用。在解题流程中,通过ida分析、gdb调试,最终成功获取flag。

解题思路

1)计算出get_shell_的地址偏移量
2)算出来之后就直接溢出到后门函数

知识点

x64函数调用规则

解题之前我们先学下linux x64的函数调用规则。
x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h、g。
保存完参数之后再把函数后面一条指令的地址入栈保存。
栈结构
在这里插入图片描述
上图就是一个函数的栈结构,上面是栈顶,下面是栈底,栈顶是低地址,栈底是高地址,read函数往栈里写数据是从栈顶往栈底写入

栈顶指针(寄存器):rsp
栈底指针(帧指针):rbp

C语言知识点

memset
memset:可以方便的清空某个结构类型的变量或数组,作用是在一段内存块里填充某个给定的值,它是对较大的结构体或数组进行清零操作的一类最快方法,为string.h头文件里的函数,按字节对内存块进行初始操作
例:memset(buffer, 0, sizeof(buffer)) 给buffer清出一个sizeof(buffer)大小的空间,填充0,做数组初始操作工作。

setvbuf
为什么要使用setvbuf函数
如果你的内存足够大,可以把文件IO的BUF设置大一些,这样每次你用
fopen/fread/fwrite/fscanf/fprintf语句的时候

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值