level 9

2020. 8. 27. 02:19

보면 C 소스코드가 나옵니다.

Buffer Overflow 문제입니다.

buf 변수를 통해 Overflow를 발생시켜 buf2에 앞 두글자가 "go"라는 변수가 저장되게 하면 됩니다.

 

level9 디렉터리에는 쓰기권한이 없으므로 쓰기권한이 있는 tmp 디렉터리로 가서 bof.c 파일에 저 내용을 옮겨보겠습니다.

 

정상적으로 옮기는데 성공했고, 이제 gcc를 통해 컴파일한 후 gdb를 통해 살펴보겠습니다.

 

기본적인 세팅을 해주고

 

여기까지가 main이네요.

잘 보면 fgets 함수 call 이전에 lea를 통해 eax에 ebp-40의 주소값을 넣고 push하는것을 볼 수 있습니다.

이는 fgets의 인자로 ebp-40이 들어간다는 소리이므로 $ebp-0x40 == buf와 같다고 생각할 수 있습니다.

또 strncmp 함수 call 이전에 lea를 통해 eax에 ebp-24의 주소값을 넣고 push하는 것을 볼 수 있습니다. 위의 push는 다른 인자들을 뜻하겠죠?

이를 통해 우리는 $ebp-0x24 == buf2라는 것을 알았습니다.

그러면 스택프레임은 이렇게 구성되어있겠네요.

------------ $ebp-0x40
buf
------------ $ebp-0x24
buf2
------------ $ebp
sfp
------------ $ebp+0x4
ret

그렇다면 buf에 16바이트만 넣어도 흘러넘쳐서 buf2에 들어가는군요.

buf 변수에 아무 값 16바이트, "go" 문자열을 넣어주면 문제가 풀릴 것입니다.

'[▒] 보안 > FTZ' 카테고리의 다른 글

level 11  (0) 2020.09.01
level 10  (0) 2020.08.27
level 8  (0) 2020.08.22
level 7  (0) 2020.08.22
level 6  (0) 2020.08.21

BELATED ARTICLES

more