1. 풀이
- hint 내 작성된 소스를 통해 버퍼 오버플로를 이용해 문제를 풀어야 하는것을 추측해볼 수 있음
버퍼 오버플로우(Buffer Overflow)
- 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점으로 시스템 해킹의 대표적인 공격 방법 중 하나
- 데이터가 지정된 크기의 공간보다 커서 해당 메모리 공간을 벗어 나는 원래 의도와 다르게 동작하도록 유도하는 공격 유형
- /usr/bin/bof를 실행해 아무런 값을 입력해 보았으나, 변화 없음
- gdb로 디버깅을 시도 하였으나, level9 사용자는 해당 파일에 대해 실행권한만 있어 gdb로 파일을 읽을 수 없음
- hint 파일의 소스코드를 새로운 파일에 복사 및 컴파일하여 gdb로 분석 수행
- gdb를 통해 bof를 분석해보면 다음과 같음
① Procedure Prelude 수행
- 함수로 진입하면서 함수로 진입하기 전의 스택 포인터(SP)의 위치를 저장한 다음 변수로 사용할 공간을 확보하는 과정
- 즉, 함수 진입 전 리턴주소(RET)와 스택 포인터(SFP)를 저장하여, 함수 수행이 끝난 후 원래 위치로 돌아가기 위해 진행되는 과정
- 1번 과정에서는 RET(4yte)>SFP(4byte)>지역변수(0x28 = 40) 순으로 스택에 저장
② fgets(배열, 문자 길이, STDIN)
0x08048443 <main+35>: pushl 0x8049698 // STDIN
0x08048449 <main+41>: push $0x28 // 문자길이 (0x28 = 40)
0x0804844b <main+43>: lea 0xffffffd8(%ebp),%eax // 0xffffffd8 (buf의 주소)
0x0804844e <main+46>: push %eax // buf 주소
0x0804844f <main+47>: call 0x8048320 <fgets>
- 즉, fgets()를 통해 0xffffffd8 (buf 주소)에 사용자 입력값을 받음
③ strncmp(문자열1, 문자열2, 비교할 문자의 갯수)
0x0804845a <main+58>: push $0x2 // 0x2
0x0804845c <main+60>: push $0x804856a // go
0x08048461 <main+65>: lea 0xffffffe8(%ebp),%eax // 0xffffffe8 (buf2 주소)
0x08048464 <main+68>: push %eax // buf2 주소
0x08048465 <main+69>: call 0x8048330 <strncmp>
- 즉, strncmp()를 통해 0xffffffe8 (buf2 주소)부터 2byte 값을 문자열 go와 비교
- ②와 ③을통해 buf 주소(0xffffffd8)와 buf2 주소(0xffffffe8)간 차이는 16byte을 알 수 있으므로, buf와 buf2 사이에 6byte 만큼의 dummy 값이 존재하는 것을 알 수 있음
- 또한, buf2와 SFP 사이에도 dummy 값이 존재하며, 그 크기는 14byte
④ 문자열 비교 후 수행 순서 결정
0x0804846d <main+77>: test %eax,%eax
0x0804846f <main+79>: jne 0x80484a6 <main+134>
- 두 값을 비교해(if문) 결과가 참일 경우, 즉 문자열이 일치할 경우 level10의 권한 설정(setreuid(3010,3010)) 및 level10의 권한으로 bash를 실행(system("bin/bash"))
- 결과가 거짓일 경우, 즉 문자열이 일치하지 않을 경우 <main+134>로 점프하여 프로그램 종료
- buf2에 문자열 go를 입력하기 위해서는 16byte(buf 10byte + dummy 6byte) 만큼의 문자열이 필요함
- 프로그램 실행 후 위 사진과 같이 값을 입력할 경우 버퍼 오버플로가 발생해 결과적으로 buf2에 go가 입력되어 level10의 권한으로 bash를 실행할 수 있음
'문제풀이 > FTZ' 카테고리의 다른 글
FTZ Level11 풀이 (0) | 2022.10.31 |
---|---|
FTZ Level10 풀이 (0) | 2022.10.31 |
FTZ Level8 풀이 (0) | 2022.10.30 |
FTZ Level7 풀이 (0) | 2022.10.28 |
FTZ Level6 풀이 (1) | 2022.10.28 |