-
Fake EBP는 말그대로 EBP를 속이는 기법이다.
해당기법은 RET까지 덮을수있다.
leave - mov esp,ebp, pop ebp 명령을 가지고있다.
esp에 ebp가 들어가고, ebp가 pop이된다.
처음에 ret명령이 실행될떄 pop eip 실행되고, leave,ret주소를 넣었기때문에 다시 되돌아간다.
mov esp,ebp , pop ebp가 실행될떄 전 leave명령이 실행되면서 ebp에는 buf+4값이 esp로 이동된다.
그리고 다시 pop ebp명령을통해 리턴되고, eip에는 buf+4주소들어가 buf+4를 가리켜 명령을실행하게된다.
buf+4를 넣는것은, pop명령이 4바이트를 증가시키기 때문이다.
예제 소스를보자.
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buffer[40];
strncpy(buffer,argv[1],56);
return 0;
}
정확히 ret까지만 덮히게 56바이트를 입력받을수있다.
공격방법은 아래와같다.
dummy[4] + "system" + exit or dummy[4] + "A"*4 + /bin/sh + dummy[28] + buf+4 + leave
이런식으로 공격을 수행해준다.