-
[Binary Exploitation] Format #0CTF write_up/NACTF 2019. 9. 24. 00:21
문제를 해결하기 위해서 한번 .c 코드를 확인해 보겠습니다.
일단 인자로 flag 라는 변수를 넘겨 줍니다.
그렇다면 스택 구조를 잠시 예상해 보자면
buf[64] + SFP + RET(main으로 돌아가는 주소) + 인자값 주소 의 형식을 것 으로 예상합니다.
일단 gdb로 열어보겠습니다.
여기다가 break를 걸고 실행해서 $esp를 확인해보겠습니다.
flag.txt 가 필요하다고 하네요! flag.txt를 임의적으로 만들어 보겠습니다.
$esp 값을 확인해 보겠습니다.
$esp-12로 한이유는 입력을 받으면 다음과 같이 나오기 때문에 똑같이 맞춰주기 위해서 한것입니다.
61616161이 들어간 4번 오프셋을 기준으로 한번 인자값 부분을 찾아보겠습니다.
buf[64] + SFP[4] + RET[4] + 인자값[4]
RET에는 main함수로 가는 주소가 들어있을 것입니다.
RET의 주소 : 0x0804928a
64바이트는 16오프셋! buf의 공간은 다음과 같이 드래그 해 두었습니다.
그리고 SFP와 RET가 나와야 하는데 RET가 buf 끝으로 부터 4오프셋 자리에 있기 때문에 다음과 같이 정의가 가능합니다.
드래그 블록처리 한부분 : buf[64]
파란 박스 : 쓰레기값
녹색 박스 : SFP
빨간 박스 : RET
밑줄 : ★인자값★
인자값은 24오프셋 자리에 flag 인자값의 데이터가 들어있습니다.
%24$s 라고 입력했습니다.
왠지 모르게 칼리리눅스에서 %값이 겹쳐져서 보입니다.
Flag : nactf{Pr1ntF_L34k_m3m0ry_r34d_nM05f469}
'CTF write_up > NACTF' 카테고리의 다른 글
[Binary Exploitation] loopy #0 (0) 2019.09.24 [Binary Exploitation] Format #1 (0) 2019.09.24 [Binary Exploitation] BufferOverflow #2 (0) 2019.09.24 [Binary Exploitation] BufferOverflow #1 (0) 2019.09.23 [Binary Exploitation] BufferOverflow #0 (0) 2019.09.23