ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LEVEL 01 gate write-up
    System hacking training/Hackerschool LOB 2018. 3. 11. 17:52

    LOB 첫 번째 문제를 풀었다.


    문제풀이에 앞서


    Redhat Linux 6.2는 기본적으로 bash의 버전이 1.14버전이다.

    이 버전에서는 0xff를 인식하지 못하는 버그가 있다고 한다.

    0xff 가 0x00과 같은 역할을 하게된다.

    따라서 중간에 0xff가 들어가게되면 strcpy()같은 문자열을 복사하는 함수에서 복사를 하는 도중 끊기게 된다.

    그렇지만 bash2는 이 버그를 고친 2.3버전이기 때문에 bash2를 사용하여야 Payload에 0xff를 넣을 수 있다.


    이러한 점을 알고있어야한다.


    따라서 /bin/bash 대신 /bin/bash2를 사용하여 문제를 풀이하였다.



    ID : gate / PW : gate 로 로그인을 하면 gremlin 이라는 바이너리와 gremlin.c 라는 c 파일이 존재한다.


    gremlin.c 파일을 열어보면 다음과 같이 strcpy()의 사용으로 bof가 일어날 수 있는데

    strcpy()는 문자열을 복사해주는 용도로 사용이 되지만 길이를 제한하지 않아 Overflow가 일어날 수 있다.


    또한 gremlin이라는 파일에는 



    이처럼 setuid가 걸려있다.


    gremlin 바이너리를 실행시키면 gremlin의 권한을 잠시 빌려 실행을 하기때문에

    이 파일을 이용하여 쉘을 띄운다면 gremlin의 권한으로 쉘이 실행된다.


    char buf[256]의 위치를 확인하기 위해 gdb로 열어보았다.



    sub esp , 0x100 으로 스택에 256byte를 할당해놨다.


    스택구조는 이러하다.

    | char buf[256] | SFP | RET |


    char buf 다음으로 오는 SFP를 덮고, RET에 쉘코드의 주소를 입력하면 쉘을 띄울 수 있다.


    이에 따라 먼저 쉘코드를 환경변수에 등록해준다.



    그리고 fkillrra 라는 환경변수의 주소를 구하기 위해 c 파일 하나를 만들어준다.



    실행을 하게 되면



    환경변수의 주소를 구할 수 있고 이 주소를 return address에 덮어주면 shell을 띄울 수 있다.



    이상 LOB LEVEL 01 gate의 풀이를 마친다.

    반응형

    'System hacking training > Hackerschool LOB' 카테고리의 다른 글

    LEVEL 06 darkelf write-up  (0) 2018.03.21
    LEVEL 05 wolfman write-up  (0) 2018.03.16
    LEVEL 04 goblin write-up  (0) 2018.03.16
    LEVEL 03 cobolt write-up  (0) 2018.03.15
    LEVEL 02 gremlin write-up  (0) 2018.03.15
Designed by Tistory.