본문 바로가기

My Study/Exploit

Hackerschool level13

먼저 해당 프로그램이 어떻게 동작하는지 알기위해 gdb로 소스코드를 봐보겠습니다
소스 코드는 위와 같이 됩니다. 역시나 setreuid가 존재하고 있습니다. 그러면 level11,12에서 썼던 쉘코드는 그대로 사용하겠습니다. 그리고 BOF취약한 부분이 어디있나 찾아보니 strcpy함수가 보이고 있습니다. 저기에 공격문을 넣으면 되겠군요.

하지만 도중에 main함수 변수 a가 0x1234567인데 변경되면 바로 종료되버리는 것을 보실 수 있습니다.
그러면 시나리오가 나왔습니다.

쉘코드를 넣고 문자를 쭉 넣되.. 변수 0x1234567 있는 부분은 그대로 유지를 시켜주면서 입력을 한다. 그리고 ret부분에는 쉘코드 있는 곳으로 리턴 주소를 바꾼다.

그림으로 표현해보겠습니다.

level11번과 같이 main함수 인자로 문자열을 전달 받고 있으므로 문자열의 길이에 따라 ebp가 변하게 됩니다. 특히 오버플로우가 나도록 입력하면 ebp주소는 확실히 바뀌게 되겠죠. 
ebp주소와 strcpy( buf,argv[1] ) 에서 buf의 값을 구하도록 하겠습니다.


이제 리턴해야될 주소도 찾았으니 공격을 해보겠습니다.

마지막으로 공격하기 전에 0x1234567이 어떻게 스택에 저장되어있나 봐보겠습니다. 사실 어떻게 저장되는지 다들 아시겠지만..
사실 여기서 삽질 3번정도 했습니다.;; 스택에 어떻게 저장되는지를 몰랐기 때문이죠. 그냥 스택을 봐봤습니다.
보니까 아~ 이렇게였지..라고 생각이 나더군요.

이제 공격!!~ ( 클릭하시면 크게 볼 수 있습니다. )
위 명령어를 그림으로 나타내보도록 하겠습니다. ( 시간이 남아.. )
(위 그림의 A의 개수는 무작위로 썼습니다. 신경쓰지 마세요. )
마지막 리턴 주소를 쉘코드 있는 곳으로 가게 한것입니다.

끝.

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

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