티스토리 뷰
가끔씩 익스플로잇을 할 때, ida
에 나온 stack dummy
가 아래와 같이 나오는 경우가 있다.
이런 상황에서 보통 ebp - 0x40
을 보고 dummy
를 0x40 + sfp
이런식으로 준다.
하지만 실제로 계산해보면 dummy
를 0x4c
개 만큼 줘야한다.
한번 디버깅을 해보자..
Disasm
해당 바이너리는 32bit
바이너리였는데, 함수 프롤로그를 보면
이렇게 되어있다.
보면은 and esp, 0xfffffff0h
어셈을 실행한다.
Debugging
현재 ESP
값은 0xffffd168
이다.
하지만 저 어셈블리를 실행하고 나서는, 당연하게도
당연하게도 ESP
값은 0xffffd160
이 된다.
간단하게 스택을 정렬해주는 작업인거 같은데, 이렇게 되니까 스택에 0x8
짜리 쓰레기 더미가 생긴다.
그러므로 익스할 때, 0x40 + sfp( 0x4 ) + dummy( 0x8 )
해서 총 0x4c
의 더미가 되는거다.
참고로 ROP payload
나 다른 페이로드를 통해서 다시 main
으로 돌렸을때, ESP
하위 4bit
가 0
으로 정렬되있다면 다시 버퍼는 0x44
만큼 주면 될것이다.
정렬하는 이유도 많이 찾아봤지만 제각각 말이 달라서 일단 포스팅은 보류했다.
대충 CPU에서 특정 바이트 만큼 읽어온다, 속도나 메모리 효율을 향상 시킨다거나 이런 이유들이 있었다.
댓글