N00bCTF - very ezzzzzz!! Write up

CTF 중점 스터디

2019. 11. 3. 20:40

첫 번째로 문제에서 제공하는 바이너리 파일을 다운로드받는다.

다운로드 받은 바이너리 파일을 살펴보면, 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