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으로 깔끔하게 패스워드를 뱉어줍시다.

+ Recent posts