ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Stack2 풀이
    System hacking training/Protostar 2018. 2. 4. 15:49

    [문제]



    문제를 보면 variable에 getenv()를 이용하여 환경변수의 값을 넣어주는것을 볼 수 있다.


    그리고 취약점은 역시 strcpy() ! 문자열의 길이를 검사하지 않기 때문에 bof 취약점이 존재한다.


    풀이를 위해 buffer[64] 와 modified 사이의 offset을 구해야한다.


    이는 gcc 컴파일 과정에서 들어가는 쓰레기값 즉, dummy 값이 존재하는지 확인을 하기 위함이다.


    [풀이]


    먼저 gdb로 열어본다.



    dummy 값만 체크를 해보자.


    아 여기서 dummy 값은 문제 풀이를 위해 modified 와 buffer[64] 사이만 확인을 했다.


    결과는 이전 문제와 동일하게 없었다.


    따라서 이 프로그램의 스택 구조를 확인해보면 이러하다.


    <Low address> | char *variable(esp) | dummy(17) | char buffer[64](esp + 0x18) | int modified(esp + 0x58) | SFP | RET | <High address>


    포인터 변수 variable과 char buffer[64] 사이에 dummy 값이 있음을 확인하였다.


    하지만 이는 int modified의 값을 변경하는데 아무런 문제가 되지 않는다.


    buffer는 정확히 64바이트 공간을 확보했고, modified 사이의 dummy 가 들어있지 않으므로


    환경변수에 임의의 값 A를 64개 넣어주고, modified가 변경되어야하는 값 0x0d0a0d0a을 넣어주면 성공이다.



    따라서 export로 GREENIE라는 환경변수에 A를 64개 넣고, 0x0d0a0d0a를 리틀엔디언 형식으로 넣어주면 된다.


    반응형

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

    Stack6 풀이  (0) 2018.02.16
    Stack4 풀이  (3) 2018.02.04
    Stack3 풀이  (0) 2018.02.04
    Stack1 풀이  (0) 2018.02.03
    Stack0 풀이  (0) 2018.02.03
Designed by Tistory.