나의 기록, 현진록

[War Game] LOB skeleton 본문

War Game/LOB

[War Game] LOB skeleton

guswlsdk 2018. 2. 12. 15:04
반응형

LOB skeleton








buffer로부터 +44~48 byte 바이트를 제외하고 모두 0으로 초기화된다.

ret이후부터 0xbfffffff까지의 영역은 ret부터 커널 전까지의 영역을 말한다.


어디 영역을 사용해야 하는 것일까?


공부할 때 모르는 부분이 있을 때는

답안을 보고 공부를 하는 것도 한가지 방법이라고 생각한다.

다른 블로그를 보고 공유 라이브러리를 이용하는 문제라는 것을 알게 되었다.


다음은 메모리의 구조이다.

[kernel] [program name] [env] [argv]  -중략-  [buf] [ret] [공유 라이브러리] [heap] [data]


커널 이후부터 (0xbfffffff)

ret까지 초기화 된다면

공유 라이브러리는 초기화 되지 않을 것이다.


프로그램을 시작할 때 공유 라이브러리가 가장 먼저 적재된다.

이때 적재란 데이터가 메모리에 할당되는 것을 말한다.


LD_PRELOAD라는 환경변수에 라이브러리를 등록하면

다른 공유 라이브러리보다 먼저 참조하게 된다고 한다.


단, LD_PRELOAD에 함수나 변수가 등록되지 않을 경우엔

그 외의 공유 라이브러리를 참조한다고 한다.



이름이 쉘코드인 파일을 하나 만들어 LD_PRELOAD 환경변수에 등록해보자.

golem.c 파일을 가지고 해도 된다.


-fPIC

object file 파일을 만드는 옵션


-shared

공유 라이브러리를 우선으로 링크하는 옵션


공유 라이브러리로 사용될 오브젝트 파일을 만드는 옵션이다.



이 파일을 그대로 LD_PRELOAD 환경변수에 넣는다.





환경변수에 적용되었으니

환경변수가 저장된 주소를 확인한다.



저장된 주소는 0xbffff542


이 주소 이후의 주소를 ret값에 덮는다.


페이로드 작성








반응형

'War Game > LOB' 카테고리의 다른 글

[War Game] LOB darkknight  (0) 2018.02.19
[War Game] LOB golem  (0) 2018.02.14
[War Game] LOB vampire  (0) 2018.02.11
[War Game] LOB troll  (0) 2018.02.09
[War Game] LOB orge  (0) 2018.02.08