첫 번째로 문제에서 제공하는 바이너리 파일을 다운로드받는다.
다운로드 받은 바이너리 파일을 살펴보면, 32 bit elf 파일이고, 메모리 보호 기법으로는 NX bit가 적용되어 있는 것을 확인할 수 있다.
그리고 이 바이너리 파일을 gdb를 통해 디스어셈해보면, 위와 같은 메인함수를 볼 수 있다.
이 메인함수를 살펴보면 처음에 0x40 크기의 버퍼를 선언해놓고, gets 함수( Buffer Overflow 발생 )를 통해 이 버퍼에 값을 읽어들이고 있다.( 중간부터 계속 sleep_puts라는 함수를 사용하는데 이 함수를 디스어셈해보면 2초 동안 sleep했다가 전달받은 메시지를 출력하는 함수로서 BOF와 관련이 없는 함수이다. ). 그리고 이 바이너리에 선언되어 있는 함수를 살펴보면 get_flag라는 함수가 존재한다. 이 함수를 디스어셈해보면 다음과 같다.
/bin/sh 를 인자로 전달하고 system 함수를 호출하고 있다.( BOF를 통해 RET에 get_flag함수의 주소가 들어가게 하면 shell을 획득할 수 있다. )
더미값으로 68 byte( buffer의 크기 + SFP )를 전송하고 get_flag의 주소를 전달하면 Shell이 실행된다.
Written by choi_jiung
'CTF 중점 스터디' 카테고리의 다른 글
Wargame.kr_db is really good_Write up (0) | 2019.11.03 |
---|---|
Newbie CTF_babypwn 풀이_정세인 (0) | 2019.11.03 |
ShadowCTF Magic Password 풀이 (0) | 2019.11.01 |
Pwnable.kr lotto 문제 풀이_ 정세인 (0) | 2019.10.27 |
N00bCTF - What is bof? Write up (0) | 2019.10.27 |