例行检查,保护全开,且没给libc
分析
一进去就是一个意义不明的函数,我们先不管它
然后就是正常的菜单题,比较诡异的是choice的选择返回值并不是atoi的,而是read的返回值,add可以添加四个块,show输出一个意义不明的随机数,del和edit也都正常,没有什么问题,现在看起来正常思路就没有了,只能去看看那个意义不明的函数
发现进行了一堆意义不明的malloc,但是最后一次会把flag写入chunk且并没有清零
写到这里我直接震惊,为什么别人的ida和我的不一样,我咋死活看不出来chunk大小
这是我的:
别人的:
行吧。
简而言之,这里是一个[0x300, 0x500]范围内随机大小的chunk,而我们只需要申请这个大小中的chunk,就有可能申请到里面含有flag的chunk,那么如何泄露出来呢?
是靠choice的返回值,它的返回值和read相关,我们只需要使read的返回值是0,就可以访问到qword_202120[ - 1],正好是我们的第四个chunk,我们再把大小为0x10的chunk头部给填充掉,即可获得flag。
ps:pwntools 可以使用 shutdown_raw(‘send’) 关闭管道的 send 方向,使远程 read() 读到 EOF,返回 0。
exp
1 | #!/usr/bin/env python3 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 0bs3rver的小屋!