Security/Pwnable

[Dreamhack] Return Address Overwrite

SpruceMoon 2026. 3. 30. 23:33

문제는 다음과 같다. 

서버를 만들어보고 들어가면

이렇게 뜨는데 도무지 뭔지 모르겠으니 코드를 보자.

코드 구조를 보면, buf 배열의 크기가 고작 0x28 정도인데, %s를 사용하면 엔터나 띄어쓰기를 만나기 전까지 계속 입력받으므로 버퍼오버플로가 발생할 수 있다!

또한 위에 컴파일 옵션에 스택 카나리 보호 기법이 해제되어 있고 바이너리의 메모리 주소가 고정되어있는 것을 알 수 있다.

 

스택 구조는 아마 아래와 같을 것이다.

buf (0x28) SFP(8 bytes) RET (8 bytes)
입력 데이터 저장 이전 함수의 스택 베이스 포인터 함수 종료 후 돌아갈 주소

우리의 목표는 /bin/sh 를 실행하는 get_shell() 함수다! 저길 노리면 쉘을 얻을 수가 있다.

즉, 버퍼오버플로로 RET 영역을 get_shell() 함수의 시작 주소로 덮어쓰는 것이 목표다.

 

 

IDA를 통해 get_shell() 함수의 주소를 찾아봤더니, 0x00000000004006AA라고 나온다!

이 주소를 하드코딩해서 넣으면 되겠다.

작성한 익스플로잇 코드는 다음과 같다. 

쉘을 따내서 cat flag 명령어를 입력했더니 플래그가 잘 나오는 것을 확인할 수 있었다! ^.^

 

 

냠냠굿 해결 ~

'Security > Pwnable' 카테고리의 다른 글

[Dreamhack] bof  (0) 2026.03.30
[Dreamhack] Basic_exploitation_001  (0) 2026.03.30
[Dreamhack] baby-bof  (0) 2026.03.16
[Dreamhack] shell_basic  (0) 2026.03.16
[Dreamhack] welcome  (0) 2026.03.16