Protostar - Stack 1 (버퍼 오버플로우 공격 + 메모리 참조)
oolongeya
·2021. 8. 21. 20:05
Stack1.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
volatile int modified;
char buffer[64];
if(argc == 1) {
errx(1, "please specify an argument\n");
}
modified = 0;
strcpy(buffer, argv[1]);
if(modified == 0x61626364) {
printf("you have correctly got the variable to the right value\n");
} else {
printf("Try again, you got 0x%08x\n", modified);
}
}
|
cs |
Protostar - Stack 1의 문제와 별 다른점이 없는 소스코드이다.
단 modified, buffer 선언 후 if(argc == 1) 조건문이 추가되었다.
즉 ./stack1을 통해 실행을 하고 끝나는게 아니라 ./stack1 1234 처럼 인자값을 추가해야 한다는 것이다.
입력받은 인자값을 buffer 배열에 복사하는 것을 확인할 수 있다
strcpy(buffer, argv[1])
마지막 조건문은 modified의 값이 0x61626364인지 확인한다.
Protostar에선 리틀엔디안 방식이니 dcba로 입력해야겠다.
인자를 확인하는 조건문이 있었던 것 처럼 입력하지 않으면 종료된다.
또한 you got 0x00000000을 통해 친절하게 메모리 부분을 보여준다.
를 통해서 rbp-0x4를 덮어씌우면 됨을 바로 알아낼 수 있다.
python -c "print('a'*76)" 으로 복사한뒤 마지막에 dcba만 추가해주겠다.
이전 stack.0을 확실하게 이해했다면, stack.1은 stack0과 같은 문제에서 공부한 것과 같다.
반응형
'시스템 해킹 (Pwnable) > Wargame' 카테고리의 다른 글
Protostar - Stack 5 (쉘 코드 + 버퍼 오버플로우 + attach) (0) | 2021.08.28 |
---|---|
Protostar - Stack 4 (버퍼 오버플로우 공격 + 메모리 참조) (0) | 2021.08.25 |
Protostar - Stack 3 (버퍼 오버플로우 공격 + 메모리 참조) (0) | 2021.08.24 |
Protostar - Stack 2 (버퍼 오버플로우 공격 + 메모리 참조) (0) | 2021.08.22 |
Protostar - Stack 0 (버퍼 오버플로우 공격 + 메모리 참조) (0) | 2021.08.21 |