ABOUT ME

-

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

     

    소스코드를 확인해 보면 좀 길어졌습니다.

    RTL2로 RTL을 이용하는 2번째 문제인것 같습니다.

     

    주석을 위아래로 싸고 있는 코드를 살펴 보면 execve의 주소를 가져오는 기능을하는 코드라는 것을 확인 할 수 있습니다.

    또한 RET에 execve의 주소를 넣지 않으면 안된다는 것을 알 수 있습니다.

     

    하지만 문제가 되는 부분이 있습니다.

    아래의 코드는 /home/giant/assassin에 접근을 하는 코드인데 기존에 tmp에 실행파일을 복사 해서 문제를 해결 했었는데 권한을 가질 수 없습니다.

     

    그렇기 때문에 실행파일을 복사해서 문제를 해결할 수 없습니다.

     

    그렇기 때문에 소스코드를 복사해서 소스코드를 좀 수정해서 컴파일을 해야 할 것 같습니다.

    아래의 경로부분을 수정해 주면 됩니다.

     

    gcc를 이용해서 컴파일을 하면 해당 문제로 exploit이 가능합니다.

     

     

    execve 함수를 사용해야 하기 때문에 해당 함수의 주소를 찾아 보겠습니다.

     

    libc 는 libc.so.6(0x40018000)를 사용하고 있습니다.

    execve 함수의 offset 주소는 0x91d48 이므로 해당 함수의 실제 주소는 아래와 같습니다.

    0x40018000 + 0x91d48 = 0x400a9d48

     

    dummy를 넣고 RET에 위의 주소를 넣어보면 아래와 같습니다.

     

    왜 execve 함수의 주소를 RET에 넣었음에도 불구하고 You must use execve! 가 출력이 되는것일까..?

     

    execve 주소를 보면 중간에 \x0a 라는 문자가 개행문자로 들어가서 잘못되는 것 같다는 생각이 들어서 python 구문을 전부 ""로 묶겠습니다.

     

    core를 이용해서 분석을 해보면 될것 같습니다.

     

    이것 저것 수집을 하기 전에 어떻게 문제를 해결 할 것인지 미리 작성해 보겠습니다.

     

    [Dummy 44 byte] + [execve (실행파일의 RET부분)] + [system (execve의 RET 부분)] + [Dummy 4 byte] + [/bin/sh] + [NULL 4 byte]

     

    system 주소와 /bin/sh 주소를 찾아보겠습니다.

     

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

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

     

    exploit을 해보겠습니다.

     

    login : giant

    password : one step closer

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

    Level16 (assassin -> zombie_assassin)  (0) 2020.01.01
    Level15 (giant -> assassin)  (0) 2020.01.01
    Level13 (darkknight -> bugbear)  (0) 2020.01.01
    Level12 (golem -> darkknight)  (0) 2020.01.01
    Level11 (skeleton -> golem)  (0) 2020.01.01

    댓글

Designed by Tistory.