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

+ Recent posts