반응형
문제
Stack3 looks at environment variables, and how they can be set, and overwriting function pointers stored on the stack (as a prelude to overwriting the saved EIP) Hints: both gdb and objdump is your friend you determining where the win() function lies in memory. This level is at /opt/protostar/bin/stack3 |
stack3는 환경변수와 그들이 어떻게 set되는지 본다.
그리고 스택에 저장된 함수 포인터를 오버라이팅하는 것을 본다.
힌트: 메모리에 win()가 있을 때 gdb와 objdump는 당신이 결정하는 데에 있어선, 당신의 친구이다.
stack3.c
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
void win()
{
printf("code flow successfully changed\n");
}
int main(int argc, char **argv)
{
volatile int (*fp)();
char buffer[64];
fp = 0;
gets(buffer);
if(fp) {
printf("calling function pointer, jumping to 0x%08x\n", fp);
fp();
}
}
스택의 구조를 보면, fp위에 버퍼가 있음을 알 수 있다.
일단 알려준 위치로 가서 stack3를 실행해본다.
뭐가 나오진 않는다.
힌트대로 objdump를 해본다.
그럼 init, main, win 등등 다양한 함수를 확인할 수 있다.
일단 win을 봐본다.
win에서 24 84 04 08 가 리틀엔디안 형태로 주소임을 확인했다.
이제 버퍼를 채워주고 win함수로 이동하게 한다.
반응형
'system' 카테고리의 다른 글
[protostar]stack6.c (0) | 2020.11.02 |
---|---|
[protostar]stack4.c (0) | 2020.09.24 |
[protostar]stack0 (0) | 2020.09.22 |
[protostar]stack1.c (0) | 2020.09.22 |
[protostar]stack2 (0) | 2020.09.17 |