[Dreamhack] iofile_vtable
[Dreamhack] iofile_vtable
문제 링크
https://dreamhack.io/wargame/challenges/56
문제 설명
Description
이 문제는 서버에서 작동하고 있는 서비스(iofile_vtable)의 바이너리와 소스 코드가 주어집니다.
프로그램의 취약점을 찾고 익스플로잇해 get_shell 함수를 실행시키세요.
셸을 획득한 후, “flag” 파일을 읽어 워게임 사이트에 인증하면 점수를 획득할 수 있습니다.
플래그의 형식은 DH{…} 입니다.
Environment
1
2
3
4
5
6
Ubuntu 16.04
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)
문제 분석
- Ubuntu-16.04 버전이므로 _IO_FILE 구조체의
vtable필드에 대한 검증이 없다. - 4번 메뉴를 이용하면
stderr+1위치에 8바이트를 입력할 수 있는데, 이는 곧stderr파일 구조체의vtable필드이다.- 바이너리를 처음 실행했을 때 입력할 수 있는 8바이트
name배열에get_shell함수의 주소를 입력해둔다. stderr파일 구조체의vtable을name-0x38주소로 조작한 후 2번 메뉴를 이용하여stderr출력을 유도한다.name-0x38인 이유는,fprintf함수를 호출했을 때vtable상에서 참조되는 함수인_IO_file_xsputn함수가vtable로부터0x38만큼 떨어져 있기 때문이다.
- 바이너리를 처음 실행했을 때 입력할 수 있는 8바이트
새롭게 알게된 점
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.