题目: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

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

被折叠的 条评论
为什么被折叠?



