이런식으로 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 |