OverTheWire_Wargame Leviathan

[ level1 -> level2 ]




Level1입니다. ls를 때려보니 check라는 바이너리가 떡 하고 자리 잡고 있네요.

게다가 leviathan2의 id로 setuid가 걸려있습니다. 이 check 바이너리를 가지고 요리 하면 level2의 패스워드를 획득 할 수 있을것만 같습니다.

gdb로 까보도록 하죠.



check 바이너리를 실행했을 때 password가 맞지 않으면 에러를 내뱉는 구조이기 때문에 strcmp는 당연히 들어있을 것입니다.

main 함수를 disassemble 했을 때 strcmp@plt의 위치를 잡고 breakpoint를 걸어주도록 합시다.

그리고 strcmp의 구조 상 스택에 들어가는 순서는 source, destination, function call 입니다.

그러므로 자연스럽게 $esp+0x18(=$esp+4)는 src, $esp+0x14(=$esp)는 dst가 될 것입니다.

스택을 확인하면서 보도록 합시다.



일단 string값을 확인 해 보았는데, sex, god, love, secret 등 우리가 알아 볼 수 있는 단어들이 여럿 나열 되어 있습니다.

이 중 하나가 우리가 찾는 이 바이너리의 password 일 것입니다.



hex값으로 보면 esp+0과 esp+4만 확인하면 됩니다.

esp+4의 위치에 있는 'sex'가 바로 우리가 찾는 password였습니다.



'sex'를 password로 입력하자 bash shell이 떨어졌고, euid와 groups 권한을 보니 leviathan2로 상승 되어 있었습니다. 이제 leviathan2의 패스워드만 알아 내면 될 것입니다.

find로 leviathan2의 유저 권한을 가지고 있는 파일을 찾아보았더니 bandit과 유사한 경로에 leviathan2의 패스워드가 자리 잡고 있는 것을 확인 할 수 있었습니다.

cat으로 깔끔하게 패스워드를 뱉어줍시다.

OverTheWire_Wargame Bandit


[ level2 -> level3 ]



Level2에 접속하면 홈 디렉터리에 'spaces in this filename'이라는 파일이 있습니다.

현재 이 파일밖에 없기 때문에 cat * 을 입력하면 와일드카드로 모든 파일명에 해당하는 것을 읽으라는 명령이므로, 당연히 key값이 보여집니다.

다른 방법으로는 cat s 까지 입력 후 tab을 눌러주면 자동 완성이 되므로, 이를 이용하여 출력 할 수도 있습니다.

OverTheWire_Wargame Bandit

[ level1 -> level2 ]


Level0에서 도출 해 낸 key값으로 로그인 해 봅시다.



home directory에 역시 수상한 파일이 있습니다.

cat 명령어로 읽어주면 다음 level로 올라갈 수 있는 key값을 찾아낼 수 있습니다.

+ Recent posts