티스토리 뷰
우선 힌트를 보면 위 C언어 코드로 작성되어진 /usr/bin/bof 프로그램을 실행시켜 level10의 권한을 획득하라고 되어 있습니다.
일단 힌트에 나온 /usr/bin/bof 파일에 대해서 알아보았습니다.
보시다시피 그룹권한 중 실행권한이 level9 사용자에 설정되어 있습니다.
그렇기 때문에 level9 사용자로선 /usr/bin/bof 프로그램을 실행해볼 수밖에 없습니다.
그리고 아래를 보시다시피 실행만 해서는 얻을 수 있는 것은 아무것도 없습니다.
그러다가 다시 생각해보니 힌트에서는 /usr/bin/bof 프로그램의 소스코드를 사전에 제공해주고 있었습니다.
그래서 힌트에 나온 소스코드를 직접 파일로 작성해서 /usr/bin/bof 와 동일한 프로그램을 만들어보면,
분석할 수 있지 않을까 생각하였습니다.
위와 같이 작성하고서 gcc 로 컴파일을 해보았습니다.
(level9 권한으로 파일을 쓸 수 있는 공간은 한정적이기에 tmp 디렉토리에 작성하고,
컴파일하여 실행프로그램을 만들었습니다.)
현재 Linux 환경에는 gdb 가 설치되어 있지만, 저는 Windows 유저로써 Windows 디버거가 편하여,
IDA를 사용해서 분석해보았습니다.
Linux에서 Windows 로 파일을 가져오기 위해서 scp 명령어를 사용하였습니다.
(정확히는 Windows의 WSL 인 Ubuntu 로 가져왔습니다. VMware 의 공유폴더 설정을 따로 하기 번거로워서 말이죠.)
domdomi@Domdom:~$ scp -c aes128-cbc level9@192.168.64.130:/home/level9/tmp/bof ./
그렇게 가져온 bof 파일을 IDA 디버거로 열었습니다.
bof 프로그램이 32bit 환경에서 작성된 것이기 때문에 IDA 도 실행파일을 열기에 최적화된 환경으로 셋팅 후 파일을 분석하였습니다.
s1 변수가 C언어 코드 상에서는 buf2 변수에 해당합니다.
s 변수가 C언어 코드 상에서는 buf 변수에 해당합니다.
상단에 보시면 s1 는 -18h 위치에 있고, s 변수는 -28h 위치에 있다고 합니다.
공간의 위치 상의 계산을 해보면 s 변수가 가지는 크기를 알 수 있습니다.
16진수로 10 즉, 10진수로는 16바이트만큼의 공간이 s 변수에 할당되어져있다고 생각할 수 있습니다.
16바이트 바로 그 이후에는 그럼 당연히 s1 변수의 공간이 있다고 확신할 수 있겠습니다.
(-18h 다음에 -28h 주소가 연속적으로 오는 것은 당연한 것이니깐요)
... | -17h | -18h | -19h | -20h | ... | -27h | -28h | -29h | ... |
그럼 이제 s 변수를 16바이트 공간에 값을 가득채우고, 그 이후에 값을 더 쓰게 된다면 buffer overflow 가 일어나서 s1 변수의 공간을 침범하게 될 것입니다.
(buffer overflow 가 일어나는 이유는 strncpy 함수에서 s 변수의 크기만큼 input 을 받아올 것이 아니라 이를 초과한 40바이트만큼 가져오게 하였기 때문에 발생합니다.)
저는 그래서 buffer 를 아래와 같이 만들어 보았습니다.
a (s변수시작) |
a | a | a | a | a | a | a | a | a |
a | a | a | a | a | a (s변수끝) |
g (s1변수시작) |
o | ||
(s1변수끝) |
s 변수와 s1 변수가 할당받은 총 40바이트 크기의 공간에서 s 변수의 공간은 16바이트로써
16바이트를 모두 a 문자로 채웠습니다. 그리고 거기에 더해서 g와 o 문자를 더 추가해서 입력했을 때,
위와 같이 s1 변수의 공간까지 침범하게 됩니다.
위와 같은 이론을 실제로 문제에 적용해보면 아래와 같이 level10의 권한을 잘 획득해온 것을 알 수 있습니다.
정확히 16개의 a 문자를 작성하고 바로 이어서 go 문자를 입력했습니다.
그랬더니 Good Skill! 이라고 나오면서 level10의 shell로 접속된 것을 알 수 있습니다.
그리고 my-pass 라는 명령을 실행하면 아래와 같이 패스워드가 나오는 걸 알 수 있습니다.
- 끝 -
'보안 > Wargame' 카테고리의 다른 글
[Hackthebox] - Slippy Writeup(문제풀이) (0) | 2021.11.30 |
---|---|
[Hackthebox] - Cat(Mobile) Writeup(문제풀이) (0) | 2021.11.29 |
[Hackthebox] - AbuseHumanDB Writeup(문제풀이) (0) | 2021.11.24 |
[FTZ] level8 문제풀이/Writeup - 해커스쿨(Hackerschool) (0) | 2021.11.18 |
[FTZ] level7 문제풀이/Writeup - 해커스쿨(Hackerschool) (0) | 2021.11.06 |