profile image

L o a d i n g . . .

문제

힌트를 확인한 결과입니다.

fgets 함수를 통해 buf에 입력을 받는데, buf의 크기인 10보다 큰 40 byte 만큼 입력을 받고 있습니다.

따라서 버퍼 오버플로우가 발생합니다.

 

이때 우리의 목표는 level 10의 권한으로 쉘을 실행시키는 것으로, buf2의 값이 "go"일 때 level 10의 권한으로 "/bin/bash"가 실행됩니다.

따라서 버퍼 오버플로우를 통해 buf2의 값을 "go"로 변경하면 될 것으로 보입니다.

 

그럼 이제 offset을 구하고 payload를 작성해보겠습니다.

 

 

Offset 구하기

gdb를 이용해 디버깅을 해보겠습니다.

그런데 /usr/bin/bof 파일에 gdb를 실행시키니 permission denied가 뜹니다.

그래서 hint에서 주었던 소스 코드를 가지고 새로 파일을 만들어 컴파일해서 썼습니다.

 

gdb로 실행한 뒤 main 함수를 disassemble 해보았습니다.

지금 우리가 알고 싶은건 buf와 buf2 사이의 offset 입니다.

따라서 buf와 buf2의 메모리 주소를 알기 위해 두 곳에 break point를 겁니다.

 

1. 먼저 fgets를 call 하기 직전에 브레이크 포인트를 겁니다.

그리고 이때의 esp를 확인하면 buf의 주소를 알 수 있습니다.

buf의 주소 : 0xbfffe760

 

2. 그리고 strncmp를 call 하기 직전에 브레이크 포인트를 겁니다.

그리고 이때의 esp를 확인하면 buf2의 주소를 알 수 있습니다.

buf2의 주소 : 0xbfffe770

 

3. offset 구하기

이로써 offset은 0x10 즉, 16byte임을 알 수 있습니다.

즉, offset(16)만큼을 dummy 값으로 채우고 buf2에 "go"를 채우면 될 것입니다.

 

 

Payload 작성하기

Level10의 패스워드는 "interesting to hack!"

위의 논리대로 payload를 작성하였고 성공적으로 익스한 모습입니다!!

 

'Wargame > Hackerschool FTZ' 카테고리의 다른 글

[FTZ] 해커스쿨 FTZ level 11  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 10  (0) 2021.03.26
[FTZ] 해커스쿨 FTZ level 8  (0) 2021.03.23
[FTZ] 해커스쿨 FTZ level 7  (0) 2021.03.23
[FTZ] 해커스쿨 FTZ level 6  (0) 2021.03.23
복사했습니다!