BUUCTF PWN-RIP详解

本文详细介绍了通过Linux ELF文件的静态分析发现栈溢出漏洞,并利用该漏洞构造exploit的过程。首先通过file命令识别64位文件,然后使用IDA64分析函数,发现gets()和system()函数,揭示了栈溢出和执行shell命令的可能性。通过计算栈帧空间,确定payload长度,最终构造payload远程连接靶机并成功执行命令,获取flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先看到无后缀文件,可以判断应该是Linux EIF文件,用Linux file命令看,发现是64位的文件

在这里插入图片描述
接着上IDA64进行静态分析,发现两个函数
在这里插入图片描述
main()函数按F5查看伪代码,发现危险函数gets,可以判断存在栈溢出漏洞


接着查看fun()函数,发现是system函数,system是c语言下的一个可以执行shell命令的函数
在这里插入图片描述

接下来思路就清晰了,我们需要利用gets函数获取一个长字符串覆盖rip来控制程序流到fun()函数

函数的局部变量会存放在他的栈中,那么在main函数中,我们双击s变量,查看s分配了多少空间

在这里插入图片描述

这里可以使用gbd动态调试,也可以简单点直接算

0x0-(-0x0f)=0xf

是15个字节的空间,也就是在main函数的栈帧中,给s划分了一个15字节的存储空间

因为是64位的EIF文件,所以rbp是8个字节
(如果对这部分不太理解,笔者做了PWN基础知识详解,可以阅读这篇文章)
https://blog.youkuaiyun.com/weixin_43780092/article/details/126694251
在这里插入图片描述

那么我们还需要8个自己的数据把Caller’s rbp的数据填满(当然在本题中应该是rbp,因为是64位的系统),这样可以溢出进入Return
Address了,所以接下来我们输入Return
Address(返回地址),也就是说,也就是fun函数的地址,地址我们可以看到是0x401186

在这里插入图片描述

现在可以构建exp了

from pwn import *  
p=remote("node4.buuoj.cn",29244) //靶机地址和端口
payload='A'*15+'B'*8+p64(0x401186+1).decode("iso-8859-1")
//char s的15个字节+RBP的8字节+fun函数入口地址,+1为了堆栈平衡,p64()发送数据时,是发送的字节流,也就是比特流(二进制流)。
p.sendline(payload)
p.interactive()

运行exp发现跑通了,先ls查看文件,发现flag

在这里插入图片描述
cat flag解出本题

在这里插入图片描述

有错误的地方欢迎指正交流!
-------------------------------------------------------------------------------------------------------------------------------请添加图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值