LEVEL 11: stack destroyer
스택의 하단 부분을 모두 0으로 바꾸는 부분이 추가되었다.
따라서, argv, 환경변수, 심볼릭링크를 모두 사용할 수 없다.
스택 대신 그 옆의 영역인 공유 라이브러리 영역을 이용해보자.
사용자 공유 라이브러리를 임의로 로드시키는 LD_PRELOAD라는 환경변수가 있다.
이걸 사용하면 로드된 라이브러리명이 스택 상단에 위치하게 된다.
즉, 그 이름에 쉘 코드를 넣고 그 주소로 JMP하게 하면 된다.
touch 명령으로 빈 파일 exploit.c를 만들고, 아래처럼 옵션을 주어 컴파일하자.
그 후, LD_PRELOAD 환경변수에 절대경로를 등록한다. 잘 등록된 것을 볼 수 있다.
leave에 breakpoint를 걸고, 적절히 인자를 부여한 다음 실행해보자.
공유 라이브러리 영역 주소 중, 우리가 처음에 등록한 부분을 찾아야 한다.
꽤 내리다보면, 아래처럼 우리가 등록한 환경변수가 보인다. 0xbffff5c0를 JMP 주소로 지정하자.
gdb를 닫고, 원본에 공격하면 쉘을 얻을 수 있다.
'[Wargame Write-up] > Lord of Buffer Overflow' 카테고리의 다른 글
[LoB RedHat 6.2] LEVEL 13: darkknight -> bugbear (0) | 2016.10.19 |
---|---|
[LoB RedHat 6.2] LEVEL 12: golem -> darkknight (0) | 2016.10.19 |
[LoB RedHat 6.2] LEVEL 10: vampire -> skeleton (0) | 2016.10.18 |
[LoB RedHat 6.2] LEVEL 9: troll -> vampire (0) | 2016.10.08 |
[LoB RedHat 6.2] LEVEL 8: orge -> troll (0) | 2016.10.08 |