/-------------------/ 스택의 높은 주소
| |
| return address(ret)| (4바이트)
| |
---------------------
| |
| saved frame pointer| (4바이트)
| |
---------------------
| |
| argv[1] | (40바이트)
| |
--------------------- 스택의 낮은 주소
argv로 입력받을 때 ret까지 오버플로우 시켜서 ret를 건드려야 하는데 \xbf는 안 되니깐
스택 영역에 쉘을 올리는 건 불가능.
결국 RTL(Return To Library)로 공략할 생각함.
system함수의 주소와 /bin/sh의 주소까지 알아냄.
페이로드는 ./bugbear `python -c 'print "\x90"*44 + system함수의 주소 + "4바이트 더미값" + /bin/sh의 주소
궁금한건 system함수의 주소가 ret에 위치해 있으니깐 main함수가 끝날 때 system함수로 복귀되면서 실행시키는 건 이해되는데
그 뒤에 4바이트 더미값과 /bin/sh주소는 이해가 안 감...
나 아직 달고나의 버퍼오버플로우 안 봤는데, 원래 LOB하기전에 달고나문서 읽는게 정석이지만...