본문 바로가기

LOB

LOB 16번 ( assassin → zombie_assassin )

cat zombie_assassin.c

우선 주석에 FEBP가 있으니 무엇인지 찾아보자

FEBPFake EBPebp를 속이는 기법이다. 스택을 그려보면서 이해해보자.

strncpy48byte만 복사를 하므로 ret까지 저렇게 채워준다고 생각했을 때 ebp를 이용하여 쉘코드를

따는 것인데 일단 처음에 buffer 40byte를 지나고 나면

esp, ebp의 위치가 이렇게 되는데 여기서 leave가 실행되는데 leavemov esp, ebppop ebp이므로 우선 mov esp, ebp를 하고나면

이렇게 되고 그다음 pop ebp를 하면

그리고 ret(pop eip + jmp eip)를 수행하는데 eipleave가 들어가니까 다시 mov esp,ebp를 하는데 ebp에는 buffer 시작주소가 있으므로 espbuffer 시작주소로 이동하고 pop ebp를 실행하면서 buffer 시작주소의 4byte위에 위치하게 된다. 따라서 buffer에 저렇게 넣어주면 쉘을 딸 수 있을 것이다

우선 buffer의 주소를 알아내기 위해 gdb로 까자

종료되기 직전에 브레이크 포인트 넣고 실행시키고 buffer의 주소를 찾으면

 

buffer 시작 주소 : 0xbffffbf6

 

leave 주소 : 0x08048df

 

찾은 주소들로 공격을 했는데 세그멘테이션 폴트가 떴다. 다시 주소를 찾아 공격해보자.

그래서 이번엔 strncpy가 끝나고나서 브레이크포인트를 걸고 주소를 찾아보았다.


buffer 시작주소 : 0xbffffa60

 

찾은 주소로 공격했는데 또 세그멘테이션 폴트 뜬다.

다시 찾아보자

그리고 계속 주소를 찾아 공격했는데 안돼서 그냥 system함수와 /bin/sh주소를 이용하자.

system 함수 주소 : 0x40058ae0

/bin/sh 주소 : 0x400fbff9

 

system[4] + nop[4] + /bin/sh[4] + nop[28] + buffer 시작주소 4byte[4] + leave[4]

다시 buffer주소를 찾으러 가자

 

buffer 시작 주소 : 0xbffffa40

이니까 0xbffffa3cSFP에 넣어 공격하자

근데 세그멘테이션 폴트떠서 그냥 buffer주소를 4byte씩 더해 삽질했다.

 


'LOB' 카테고리의 다른 글

LOB 17번( zombie_assassin → succubus )  (0) 2016.11.14
LOB 15번 (giant → assasin)  (0) 2016.10.13
LOB 14번 (bugbear → giant)  (0) 2016.10.13
LOB 13번 (darkknight → bugbear)  (0) 2016.10.13
LOB 12번 (golem → darknight)  (0) 2016.10.06