| Silk |
제가 이해한 바로는 getbuf에서 getbuf함수의 지역변수인 buf에 오버플로우를 일으킬수 있다는 말 같고,,
오버플로우를 일으키면 return address를 덮을 수 있으니까 이를 이용해서 return value를 수정하고싶다..이런거 같네요.
일단 return value는 항상 eax로 들어가고 후에 나오는 val1 , val2의 비교도 선언된 변수가 아니라,
eax == 상수(학번) 이런식일 것 같네요.
그렇다면 getbuf함수를 overflow시켜서 쉘코드를 실행하게 하면 됩니다.
과제의 제한사항이 또 뭐가 있는지 모르겠지만 DEP나 ASLR 등이 걸려있지 않다면
단순히 쉘코드를 buf에 올려서 실행시키는게 가능합니다.
쉘코드의 내용은
mov eax, 상수(학번) ; call [ getbuf 함수의 호출이 끝난 바로 직후 instruction주소 ]
가 되면 됩니다.
스택프레임이 4바이트고 objdump로 보니까 5바이트 명령도 있다.. 머 이런 말씀을 하셨는데.
제 생각엔 이 부분은 아직 어셈블리나 시스템 아키텍쳐에 대한 이해가 부족하신 것 같습니다. |
2013/06/21 |
|