728x90
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#define FLAGSIZE_MAX 64
char flag[FLAGSIZE_MAX];
void sigsegv_handler(int sig) {
printf("%s\n", flag);
fflush(stdout);
exit(1);
}
void vuln(char *input){
char buf2[16];
strcpy(buf2, input);
}
int main(int argc, char **argv){
FILE *f = fopen("flag.txt","r");
if (f == NULL) {
printf("%s %s", "Please create 'flag.txt' in this directory with your",
"own debugging flag.\n");
exit(0);
}
fgets(flag,FLAGSIZE_MAX,f);
signal(SIGSEGV, sigsegv_handler); // Set up signal handler
gid_t gid = getegid();
setresgid(gid, gid, gid);
printf("Input: ");
fflush(stdout);
char buf1[100];
gets(buf1);
vuln(buf1);
printf("The program will exit now\n");
return 0;
}
코드 출처 : picoCTF, buffer overflow 0
사실 이 코드만 봐도 알 수 있다시피 이 코드 자체의 취약점은 너무나 명백하다.

(otter은 로컬에서 내가 자체로 정한 flag 내용이다)

그렇기에 아주 단순한 공격에도 바로 flag를 내뱉는다.
코드를 아래와 같이 패치한다
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#define FLAGSIZE_MAX 64
char flag[FLAGSIZE_MAX];
void sigsegv_handler(int sig) {
printf("%s\n", flag);
fflush(stdout);
exit(1);
}
void vuln(char *input){
char buf2[16];
strncpy(buf2, input, sizeof(buf2)-1);
buf2[sizeof(buf2)-1] = '\0'; // Ensure null-termination
}
int main(int argc, char **argv){
FILE *f = fopen("flag.txt","r");
if (f == NULL) {
printf("%s %s", "Please create 'flag.txt' in this directory with your",
"own debugging flag.\n");
exit(0);
}
fgets(flag,FLAGSIZE_MAX,f);
signal(SIGSEGV, sigsegv_handler); // Set up signal handler
gid_t gid = getegid();
setresgid(gid, gid, gid);
printf("Input: ");
fflush(stdout);
char buf1[100];
fgets(buf1, sizeof(buf1), stdin); // Replace gets with fgets
vuln(buf1);
printf("The program will exit now\n");
return 0;
}

기존의 공격은 통하지 않는다.
그러나 이 패치된 코드도 안전하다는 뜻은 아니다.
이 코드 자체에는 이런 식으로는 해결되지 않는 본질적인 취약점이 2가지가 존재하기 때문이다.
그러나 어쨋든 기본적인 버퍼 오버플로우는 패치되었다.
728x90
'hacking sorcerer' 카테고리의 다른 글
정말 가르쳐주려고 했는데 팀원들이 뜯어 말릴 때 들었어야 했다 (1) | 2023.07.04 |
---|---|
가장 기본이 되는 공격 방식 (attack vector) (0) | 2023.07.01 |
gpt도 활용하는 방법이 있어요 그냥 무턱대고 쓰는게 절대로 아니랍니당~ (헤헷 4 의 위력) (1) | 2023.06.28 |
해킹 해킹 바운스~ 바운스~ (0) | 2023.06.23 |
주식 주식 바운스~ 바운스~ (0) | 2023.06.20 |