ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • |Lord Of Bufferoverflow| #3 cobolt - goblin
    Wargame Site/BOF 2019. 5. 19. 23:15

     

     

     

    이제 습관이 되버린 Know Myself ~~ 

    우선 goblin.c 파일을 열어보도록 하자.

     

     

    이번에는 gets 라는 BOF 에 취약한 함수를 사용했다.

    goblin 함수의 인자를 통해서가 아닌, goblin 실행 후 입력을 해주어야하는 방식의 문제이다.

    문제해결을 본격적으로 시작하기 전에, 파이프라인 (|) 의 사용에 대해서 알아보도록 하자!

     


    ls | grep [문자] 과 같은 형태를 자주 사용해보았을 것이다.

    이 때, ls 의 출력의 결과가 grep 의 입력으로 들어가게 되고, [문자] 를 검출하는 것이다.

    궁금하다면, grep [문자] 를 따로 실행시켜보도록 한다. 

     

    하지만, 이 경우 문제가 있다. ls | grep [문자] 의 경우 ls 의 결과만을 입력으로 받기 때문에

    입력으로 들어온 것을 처리하고 나서 쉘이 바로 종료되는 것을 알 수 있었다.

    따라서, 더 이상의 입력이 불가능한 것이었다. 

     

    위의 예에서 ls 의 결과와 함께 cat 이라는 명령어를 입력해주면, grep '    ' 의 상태에서 쉘을 유지할 수 있다.

      따라서, ls 의 결과를 넘겨주는 동시에 더 넘겨줄 것이 있으니 쉘을 유지해라 라는 뜻이 된다.

    이 부분은 직접 실습을 해야 이해가 가능할 것이다 !!


     

     

    이 문제는 파이프라인과 cat 을 활용할 수 있으면 금방 해결되는 문제이다. 

    우리가 ls | grep g 을 했듯이, ls 의 결과만을 도출할 때 cat 이 필요없었듯이

    사실상 goblin 자체를 분석하기 위해서는 cat 이란 명령어는 필요없다.

    이번에도 \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80 를 사용했다.

     

    python -c 'print "A"*20 + "BBBB" + "\x31\xc0...\x80"' | ./goblia

     

    그 결과 core 가 생긴 것을 확인했다.

     

    이번에도 x/100wx $esp - [ 숫자 ] 를 통해서 위치를 파악했다.

     

     

    RET 를 정삭적으로 변조했고, 정상적으로 프로그램이 종료된 것을 알 수 있었다. 하지만, 쉘은 닫혀있는 상태이다.

    마치 ls | grep [문자] 를 했을 때와 같은 상황이다. 따라서 cat 을 사용해서, 추가적인 입력이 있다는 것을 알려주어야 한다.

     

    다음과 같이 /bin/sh 동작에 성공한 것을 볼 수 있다. 이제 goblin 으로만 바꿔주면 끝!!

     

     

    다음 문제 접근을 위해 필요한 패스워드는 'hackers proof' 인 것을 알 수 있다.

    'Wargame Site > BOF' 카테고리의 다른 글

    |Lord Of Bufferoverflow| #5 orc - wolfman  (0) 2019.05.20
    |Lord Of Bufferoverflow| #4 goblin - orc  (0) 2019.05.19
    |Lord Of Bufferoverflow| #2 gremlin - cobolt  (0) 2019.05.19
    |Lord Of Bufferoverflow| #1 gate - gremlin  (0) 2019.05.18
    BOF ASLR  (0) 2019.04.24

    댓글

Designed by Tistory.