ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Level13 (darkknight -> bugbear)
    $ 시스템 해킹 $/Los Of BufferOverflow 2020. 1. 1. 14:34

     

    이번 문제는 RTL 기법을 이용한 문제인 것 같습니다.

    RET부분에 해당되는 argv[1][47]의 값이 \xbf 가 되면 안되는것 같습니다.

     

    RTL 이란?

    Return To Library의 약자로 동적 라이브러리 영역에 존재 하는 함수의 주소를 이용해서 바이너리에 존재하지 않는 함수를 사용할수 있도록 하는 기법입니다.

    바이너리에 존재 하지 않는 함수는 system 함수, execl 함수 등이 있습니다.

    이전 문제들 에서는 stack 에다가 shellcode를 넣어서 문제를 해결 했었지만 stack 의 주소를 보면 0xbf~~~~~~로 RET에 넣을수 없는 주소입니다.

     

    그렇기 때문에 RTL 기법을 이용해서 문제를 해결 해야 합니다.

     

    쉘을 실행하기 위해서는 쉘코드가 아닌 system 함수를 사용하는데 /bin/sh를 호출해야하기 때문에 /bin/sh의 위치도 알아야 합니다.

     

    bash에 링크가 되어있다고 되어 있습니다.

     

    먼저 문제 파일인 bugbear 파일에 연결되어있는 동적 라이브러리 파일이 무엇인지 알기 위해서 아래와 같은 명령어를 입력해 보겠습니다.

     

    libc.so.6 파일을 사용하고 있으며, 경로는 /libc/libc.so.6이고 위치는 0x40018000에 위치해 있다고 출력이 됩니다.

    이번에는 해당 립씨(libc 파일을 일컫는 말)에서 system 함수와 /bin/sh 문자열의 위치를 출력해 보겠습ㄴ디ㅏ.

     

     

    위의 사진에 나온 주소는 offset 입니다.

    그렇기 때문에 실제 주소 구하는 법은 아래와 같습니다.

    libc주소 + offset = 실제 주소

     

    system 주소 : 0x40018000+0x40ae0 = 0x40058ae0

    "/bin/sh" 주소 : 0x40018000 + 0xe3ff9 = 0x400fbff9

     

    system 함수의 주소를 실제로 해당 분석 파일에서 찾아 보면 아래와 같습니다.

     

    주소는 동일하게 같은 것 을 확인 할 수 있습니다.

     

    문제를 해결하기 위해서 아래와 같이 exploit을해보겠습니다.

    dummy[44] + system 주소 + dummy[4] + "/bin/sh"주소

     

     

    login : bugbear

    password : new divide

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

    Level15 (giant -> assassin)  (0) 2020.01.01
    Level14 (bugbear -> giant)  (0) 2020.01.01
    Level12 (golem -> darkknight)  (0) 2020.01.01
    Level11 (skeleton -> golem)  (0) 2020.01.01
    Level10 (vampire -> skeleton)  (0) 2020.01.01

    댓글

Designed by Tistory.