overflow로 stack retrun address 바꾸는 방법?

dalili의 이미지

#include
#include
#include

void func1();
void func2();

int main(int argc, char **argv)
{
func1();
}

void func1()
{
char str[4];

// overflow code
}

void func2()
{
printf("call func2\n");
}

실행시 func2 호출되게 stack의 return address 를 바꿔 보려고 하거든요
해봤는데 잘 안되네요
어떻게 해야 하나요?

익명 사용자의 이미지

쉽습니다.

void func1()
{
func2();
}
익명 사용자의 이미지

func2 주소를 얻어내시구요. func1() 에서 str 크기인 4byte+sfp 하면 return address 주소가 계산되는데요 그 주소에다가 func2() 넣어주면 실행하면 func2가 호출되긴 할거에요.

근데 일단 이거 요즘 리눅스에서 하시려면 스택가드나 , 랜덤 스택 따위 옵션 다 끄고하셔야지 안그러면 안됩니다.

이건 혼자서 그냥 캐삽질을 엄청 하면 됩니다.

익명 사용자의 이미지

이론은 대충 알고 있는데 삽질 많이 해봤는데 잘 안되더라고요
옵션 끄고 다시 삽질 해봐야겠네요
감사합니다