ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Level11 (skeleton -> golem)
    $ 시스템 해킹 $/Los Of BufferOverflow 2020. 1. 1. 14:31

     

    위의 소스코드를 확인해 보면 egghunter 였었던 환경변수를 못쓰게 하는 구문이 사라져 있습니다.

    하지만 stack destroyer이 새로 생겻는데 buffer부터 0xbfffffff까지 RET를 제외한 모든 부분을 0으로 초기화를 해버리는 역할을 합니다.

     

    이런 상황에서 사용할수 있는 것은 라이브러리인데, 

    정적 라이브러리는 .a 로 끝나는 파일이며, 빌드를 할때 실행파일에 포함되는 파일입니다.

    동적 라이브러리는 .so 로 끝나는 파일이며, 여러 프로그램에 공유 되는 라이브러리 입니다.

     

    동적 라이브러리가 정적 라이브러리 보다 더 우선시 되기 때문에 -fPID 옵션과함께 해당 라이브러리 이름을 NOP 과 쉘코드로 하나 생성을 합니다.

     

    attack.c 는 임의의 함수 하나를 만들었습니다.

     

    그리고 생성한 동적 라이브러리를 환경변수에 넣어 줄 것인데, LD_PRELOAD에 넣어 줄 것 입니다.

     

    LD_PRELOAD 란?

    이름 그래도 PRELOAD, 먼저 로드가 된다는 의미를 가지고 있는 환경 변수 입니다.

     

    LD_PRELOAD의 개념은 아래와 같습니다.

     

    그렇기 때문에 LD_PRELOAD 환경변수에 값을 넣어 보겠습니다.

     

    이제 환경 변수에 값이 들어갔으니 golem을 gdb로 열어서 확인해 보겠습니다.

     

    당연히 RET를 제외한 모든 부분은 0으로 덮여져 있을 것 입니다.

     

    하지만 동적 라이브러리를 LD_PRELOAD 환경변수에 넣었기 때문에 어딘가에는 할당이 되어 있어야 합니다.

     

    그래서 x/1000x $esp-4000 에서 환경변수 값을 찾을 수 있었습니다.( $esp-1000부터 1000씩 늘렸습니다. )

     

    쉘코드 앞에 존재하는 \x90의 주소 하나를 RET에 넣으면 exploit을 할수 있습니다.

     

    login : golem

    password : cup of coffee

    '$ 시스템 해킹 $ > Los Of BufferOverflow' 카테고리의 다른 글

    Level13 (darkknight -> bugbear)  (0) 2020.01.01
    Level12 (golem -> darkknight)  (0) 2020.01.01
    Level10 (vampire -> skeleton)  (0) 2020.01.01
    Level9 (troll -> vampire)  (0) 2020.01.01
    Level8 (orge -> troll)  (0) 2020.01.01

    댓글

Designed by Tistory.