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으로 깔끔하게 패스워드를 뱉어줍시다.
'Wargame > Leviathan:OverTheWire' 카테고리의 다른 글
OverTheWire Leviathan [level5 -> level6] (0) | 2016.01.13 |
---|---|
OverTheWire Leviathan [level4 -> level5] (0) | 2016.01.13 |
OverTheWire Leviathan [level3 -> level4] (0) | 2016.01.13 |
OverTheWire Leviathan [level2 -> level3] (0) | 2016.01.11 |
OverTheWire Leviathan [level0 -> level1] (0) | 2016.01.11 |