종강해서 다시 블로그 스타드
풀었던건데 정리 못해놨던것들 쭉 정리할꺼임
이번포스팅은 스택 4번 풀이임당.
코드는 다음과 같습니당.
RET - EBP - BUFFER 순으로 쌓이게 되는데 buffer를 가득 채워서 ebp를 넘어서 ret 부분에 win_addr 을 넣어주면 win 함수의 프린트문을 실행 시킬수 있어욤
따라서 우리가 해야 할 일은
1. main ret 찾기
2. win 함수addr 찾기
이 두개밖에 없어요
그래서 gdb로 까봤습니당
여기서 첫번째로 win addr 의 주소를 확인할 수 있어요
이제 main의 ret를 찾아봅시당 그래서 버퍼가 64로 선언되오 있었으니까 넘치도록 한 A100개 줘봤어요
그리고 ebp 의 주소도 확인 해보니 fe0f0 인데 0x41로 차있는걸 확인했어요
넘쳤다는거죵
fe0f0 이 지금 ebp 주소로 되어 있고!
A가 68개 들어갔을때 위치니까, 또 ebp 다음에 ret가 위치하고 있으니까
68 비트 채우고 (buffer + ebp ) ret부분에 win 함수 address를 넣어주면 될거라고 생각했어요
근데 안됬어요 ... 뭐가 문제지
64비트 문제인가. .하고 32비트로 돌려봤어요
32비트에서 스택에 A를 68개 넣은 모습이에요
\x00000000 드레그 된 부분이 ebp 라고 나오네요 그럼 0xbffff33f (0xb7df09a1) 이 ret라는걸 확인할 수 있고
스택에 76만큼 채워넣어주고 win _addr 넣으면 된다는 결론이 나와요
음 .... 32에선 잘 되는데 64에서는 왜 잘 안되지 .. 라고 고민을 하다가
아마 32비트에서는 \x00000000 으로 들어가지만 64빝에서는 \x0000000000000000으로 들어가서 두자리를 먹나 생각이 들어요
정확한건 아니에요 ..
그래서 4바이트 더 넣어주고 win_addr 넣어주니 정상적으로 되써요 ..
'개인공부 > pwnable' 카테고리의 다른 글
pwnable.kr fd 문제 (0) | 2019.10.21 |
---|---|
[protostar] stack5 문제풀이 (0) | 2019.01.02 |
[protostar] stack3 문제풀이 (0) | 2018.11.19 |
[protostar] stack2 문제풀이 (0) | 2018.10.14 |
[protostar] stack1 문제풀이 (0) | 2018.09.16 |