Profile

머리정리하는곳

c2w2m2

Off By One




이런식으로 bof 가 나지 않는 코드가 있다.


이런 프로그램의 eip 를 바꾸는 방법이 있다~!


( gcc -o ObO ObO.c -fno-stack-protector -mpreferred-stack-boundary=2 -m32 )



1024 만큼만 넣는데 segmentation fault 가 뜨는것을 볼수있다! 어떻게 된거지 분석 ㄱㄱㄱㄱ


bp는 


main : func call , leave , ret

func : leave , ret


으로 잡고 했다


main 의 func call 부분은 그닥 필요없어보여 넘겼고, func 의 leave 를 보자.


현재 ebp 에 0xffffd1bc 라는 주소가 들어있고, 이 주소는 0xffffd100을 가르키고, 그건 또 0x41414141이라는 우리가 argv에 넣은 수많은 A중 4개를 가르키고 있다. 다음으로 ㄱㄱ


leave 가 실행되고, mov ebp,esp , pop ebp 를 하는 과정에서 ebp가 0xffffd1bc 가 가르키던 0xffffd100 이 된것을 볼수 있다. 


여기서 슬슬 이상하다는걸 눈치챌수 있지만 일단은 계속 가보자



leave 실행 전에는 별거 없지만


 

leave를 실행한 순간 아까와 같은 경우로 ebp가 0xffffd100 이 가르키던 0x41414141로 바뀐것을 볼 수 있다.


그렇다면 ret을 실행 할 경우 어떻게 될까?



헉 eip가 덮인다


쉘을 따보자면



이런식으로 딸수 있다


'Analysis' 카테고리의 다른 글

Pwntools 기본적인 사용법 - 2  (0) 2017.10.11
PPR 없이 ROP  (0) 2017.09.28
Pwntools 기본적인 사용법 - 1  (1) 2017.09.22
SROP  (0) 2017.08.25
2차원 배열 분석  (0) 2017.08.19