0ctf2018-babystack_writeup

这篇博客详细介绍了0ctf2018-babystack挑战的解决过程,包括检查保护机制、发现栈溢出漏洞、计算read位置偏移、利用dl_resolve攻击方式来构造栈并编写POC。在解决问题的过程中,作者遇到了如read函数缓冲区处理和dlsym表定位的问题,并给出了相应的解决策略。

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

题目:0ctf2018-babystack

1.检查保护机制:
在这里插入图片描述

可以看到程序只提供了NX保护。

2.在IDA中进行反编译,发现一个可读的位置,存在栈溢出漏洞,可能可以利用:
在这里插入图片描述

3.使用peda计算read位置的偏移:
在这里插入图片描述

得到read位置距离返回地址的偏移为44,比read的长度0x40小,说明栈溢出漏洞可直接被利用。

4.查看文件ELF表
在这里插入图片描述

通过elf表中查看得知程序中不存在system函数,无法直接跳转;也不存在输出函数,无法打印got表地址。

5.查看vmmap
在这里插入图片描述

通过vmmap可以看到bss段可写,故尝试dl_resolve攻击方式。

6.构造栈
在这里插入图片描述

7.编写POC

from pwn import *
name = './babystack'
p = process(name)
elf= ELF(name)
#获取原地址
rel_plt_addr = elf.get_section_by_name('.rel.plt').header
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值