ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LEVEL 09 vampire write-up
    System hacking training/Hackerschool LOB 2018. 4. 4. 17:20

    troll -> vampire


    오늘은 vampire라는 문제를 풀이해 보도록 하겠다.


    [문제 + 힌트]



    vampire.c 파일을 열었을때의 모습이다.


    main()에서 인자를 한개 이상 받고 argv[1][47] 부분에서 \xbf 가 맞는지 아닌지 검사를 한다.


    여기까지는 뭐 대충 이전 문제에서 많이 봐왔던 형태이다.


    바뀐부분은 바로 here is changed 라는 주석이 달린 곳인데


    이곳을 보게 되면 argv[1][46] 부분의 값이 \xff 와 같다면 but it's not forever 라는 문장을 출력하고 exit(0) 함으로써 종료를 시킨다.


    그리고 그 밑에서 strcpy() 로 argv[1]의 값을 buffer에 그대로 복사해주는 것을 확인할 수 있는데

    바로 여기서 bof 취약점이 터지는 것을 알 수 있다.


    스택의 구조는 아래와 같다.


    따라서 buffer 40byte와 SFP 4byte를 덮어준 뒤 ret에 return address를 조작하여 우리는 실행 흐름을 제어할 수 있다.


    하지만 위에서도 보았듯이


    strcpy() 함수는 argv[1]의 값을 buffer에 복사해주는 역할을 하고

    이 argv[1]의 값에는 두가지 조건이 있는데


    argv[1][47] 즉, return address의 마지막 부분에 \xbf 가 들어가야 하고

    argv[1][46] 인 마지막에서 두번째 부분이 \xff 가 아니여야 ret 명령까지 실행하게 된다.


    따라서 우리는 쉘코드를 스택에 올려야하지만 0xbfff 로 시작하는 주소를 return address로 변조할 수 없는것이다.


    하지만 0xbfff 만 아니면 예외처리에 걸리지 않기 때문에 0xbfffe 혹은 그 아래 주소로 return address를 덮어씌우면 된다.


    여기서 스택은 main 함수의 파라미터가 존재하는지 먼저 체크한 후, 파라미터가 존재한다면 몇개인지(argc) 그 크기는 얼마나 되는지 (sizeof(argv)

    환경변수는 어떤것으로 잡았는지 envp를 통해 stack의 크기를 default로 잡은 후 지역변수의 크기 만큼 아래로 자란다.


    따라서 이런 특성을 이용하여 환경변수 or argv[]에 엄청난 NOP Sled를 깔고 쉘코드를 넣는다면

    0xbffff 아래의 주소를 가질 수 있을것이다. (argv[] or 환경변수의 크기 만큼 스택이 밀려나기 때문)



    먼저 환경변수에 NOP Sled를 0xffff 개 + 쉘코드를 넣고 익스해보겠다.


    ad.c 라는 환경변수의 주소를 알아오는 프로그램을 하나 만들어준다.



    그리고 NOP Sled * 0xffff + Shellcode 를 fkillrra 라는 이름을 가진 환경변수에 넣어주고 해당 주소를 출력해보면



    이와 같이 fkillrra 라는 이름의 환경변수가 0xbffefcc5에 위치한것을 확인할 수 있다.


    따라서 argv[46] == \xff 를 검사하여 예외처리하는 부분을 우회할 수 있다.


    이제 페이로드를 작성하여 익스하면



    이와같이 쉘을 띄울 수 있다.

    (여기서 주소가 바뀐 이유는 실행이 되는 경로에 따라 주소값이 조금 변경되기 때문이다.)




    그렇다면 argv[]에서도 되는지 확인해보겠다.



    먼저 gdb로 주소를 확인하기 위해 argv[1]에 0xbf * 4 + 0x90 * 0xfff 를 넣어서 실행시키고 스택을 봤다.



    이와같이 0xbffe 로 시작하는 부분에 0x90이 들어갔기 때문에 이 중 아무주소나 return address로 잡고 공격을 하면 될것이다.



    argv[1]에 쉘코드를 넣고 익스하면



    이와같이 역시 쉘을 띄울수있다.


    이상 풀이를 마친다.

    반응형

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

    LEVEL 11 golem write-up  (0) 2018.04.20
    LEVEL 10 skeleton write-up  (0) 2018.04.11
    LEVEL 08 troll write-up  (0) 2018.03.31
    LEVEL 07 orge write-up  (0) 2018.03.31
    LEVEL 06 darkelf write-up  (0) 2018.03.21
Designed by Tistory.