종강해서 다시 블로그 스타드 


풀었던건데 정리 못해놨던것들 쭉 정리할꺼임 


이번포스팅은 스택 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

+ Recent posts