이번 문제는 공유라이브러리를 이용한 BOF 문제다.
공유라이브러리는 심볼(함수, 변수)들을 프로그램이 시작하기전에 로드 하여 필요할 때마다 연동되는 동적인 라이브러리이다.
메모리, 용량 절약과 라이브러리를 언제든지 업데이트 할 수 있는 융통성을 갖지만 사용자로 부터 접근하기 쉽도록 짜여 있어, 보안에 문제가 발생한다.
프로그램이 실행할 때 아래 그림과 같이 컴파일 되고,
링크가 되게 되는데 이 링크 과정에서 libc.so.6이라는 라이브러리에서 심볼(함수, 변수)의 정보를 적재 하게 된다.
이렇게 공유 라이브러리가 프로그램이 실행될 때 동적으로 링크하게 되는데,
공격자가 임의로 라이브러리를 만들고 LD_PRELOAD 환경 변수를 이용하여 hijacking을 하게 된다면 프로그램은 원래의 함수 를 실행되지 않고 공격자가 적재한 라이브러리 함수를 실행하게 된다.
라이브러리를 만들기 위한 gcc컴파일러의 옵션으로는
-shared
공유 라이브러리를 우선하여 링크하도록 하는 옵션
-fpic -fPIC
LD_PRELOAD = 프로그램이 라이브러리를 가져오기 전에 원하는 라이브러리를 먼저 등록 시켜두는 환경변수로, 프로그램은 LD_PRELOAD로 지정된 공유 오브젝트를 먼저 링크시키게 된다.
먼저 홈디렉터리에 있는 C소스 파일을 공유라이브러리 옵션을 주어 컴파일 한다. 이때 이름을 NOP + 다형성 쉘코드로 준다.
그리고 이 파일의 (경로+이름)이자 쉘코드를 LD_PRELOAD 환경변수를 지정해준다.
정상적으로 등록이 됐다면 echo $LD_PRELOAD를 해서 확인해보면 파일의 이름이 등록된 것을 볼 수 있다.
이제 공유라이브러리의 주소를 파악하기 위해 GDB로 golem을 디버깅한다.
esp-3000을 줘서 엔터로 주소를 올리며 확인해보면 0xbffff5f4쯤에 NOP가 존재하고 더내려가면 쉘코드로 입력했던 환경변수가 있다.
payload를 아래와 같이 줬다.
쉘이 따졌다.
'Wargame > lord of bufferoverflow' 카테고리의 다른 글
Lord of bufferoverflow darkknight (0) | 2017.08.22 |
---|---|
Lord of bufferoverflow golem (0) | 2017.08.21 |
Lord of bufferoverflow vampire (0) | 2017.08.18 |
Lord of bufferoverflow troll (0) | 2017.08.18 |
Lord of bufferoverflow orge (0) | 2017.08.18 |