CafeM0ca

[LOB]level15 assassin 본문

Hacking/LOB(Red Hat)

[LOB]level15 assassin

M0ca 2018. 1. 18. 05:13
반응형

ID:assassin

PW:pushing me away

이전 문제에서 strcpy대신 strncpy를 사용한다. ret뒤로 페이로드를 구성 못하게할 셈.


FakeEBP를 이용해서 풀어야한다.

FakeEbp: leave,ret가젯을 이용하여 eip를 컨트롤한다.

leave,ret명령어를 열어보면   //leave,ret을 에필로그라 함

leave : mov esp ebp  //esp를 ebp로 옮기고

         pop ebp        //스택 최상단(esp)에서 4byte를 빼고 ebp에 저장한다. pop되니까 당연히 esp값은 +4된다. (스택은 거꾸로 자란다.)

ret : pop eip  //스택 최상단에서 4byte를 빼고 eip는 스택 최상단을 가리킨다.

      jmp eip  //eip가 가리키는 곳을 실행 


return 값으로 leave,ret가젯을 주게 되면 leave,ret이 2번 실행되는데 

처음 leave에서 esp는 sfp를 가리키게 되고 ebp는 sfp-4값을 가리킨다. 

처음 ret에서 eip는 leave,ret가젯을 가리키게 된다.


sfp-4값을 버퍼의 주소로 둬보자.

두번째 leave에서 esp는 ebp(버퍼의 주소)를 가리키고 ebp는 버퍼의 주소-4를 가리킨다.

두번째 ret에서 eip는 ebp+4(버퍼의 주소)를 가리키게 된다.

버퍼의 주소가 쉘코드를 가리키면 exploit에 성공하게되는 원리다.



사진에서 첫번째 에필로그가 진행된 후 esp는 sfp+4를 가리키고있고 ebp는 버퍼의 시작점을 가리키고 있다. 

두번째 에필로그에서 leave명령이 진행되면 esp는 ebp(0xbffffc54)을 가리키게되고 ebp는 buffer(쉘코드)-4를 가리키게 된다. leave명령이 끝난 후 eip는 쉘코드를 가리키는데 eip가 쉘코드 주소를 가리키게 하기위해 첫번째 에필로그에서 ebp가 버퍼의 시작점-4부분을 가리키게하면 된다. 그리고 buffer의 시작점을 쉘코드 주소로 바꾸면 eip -> buffer -> shellcode가 된다. 따라서 쉘이 실행된다.


exploit


반응형

'Hacking > LOB(Red Hat)' 카테고리의 다른 글

[LOB]level17 succubus  (0) 2018.01.20
[LOB]level16 zombie_assassin  (0) 2018.01.19
[LOB]level14 giant  (0) 2018.01.18
[LOB]level13 bugbear  (0) 2018.01.17
[LOB]level12 darkknight  (0) 2018.01.04
Comments