본문 바로가기

[Wargame Write-up]/Lord of Buffer Overflow

[LoB RedHat 6.2] LEVEL 11: skeleton -> golem

LEVEL 11: stack destroyer



스택의 하단 부분을 모두 0으로 바꾸는 부분이 추가되었다. 


따라서, argv, 환경변수, 심볼릭링크를 모두 사용할 수 없다.

 

스택 대신 그 옆의 영역인 공유 라이브러리 영역을 이용해보자.


사용자 공유 라이브러리를 임의로 로드시키는 LD_PRELOAD라는 환경변수가 있다.


이걸 사용하면 로드된 라이브러리명이 스택 상단에 위치하게 된다.


즉, 그 이름에 쉘 코드를 넣고 그 주소로 JMP하게 하면 된다.



 

touch 명령으로 빈 파일 exploit.c를 만들고, 아래처럼 옵션을 주어 컴파일하자.

 

 

 

그 후, LD_PRELOAD 환경변수에 절대경로를 등록한다. 잘 등록된 것을 볼 수 있다.

 

 

 

leave에 breakpoint를 걸고, 적절히 인자를 부여한 다음 실행해보자.

 

 

 

공유 라이브러리 영역 주소 중, 우리가 처음에 등록한 부분을 찾아야 한다.

 

 

 

꽤 내리다보면, 아래처럼 우리가 등록한 환경변수가 보인다. 0xbffff5c0를 JMP 주소로 지정하자.

 

 

 

gdb를 닫고, 원본에 공격하면 쉘을 얻을 수 있다.