문제

아래 버튼 클릭

좀 기다리면 이렇게 뜬다

아래 버튼 눌러서 문제 다운받기

아래 2개가 다운된다

아래 경로에 다운받은 두 파일 넣기

잘 넣어졌다

아니다. 이경로에 넣어야 한다

vuln.c 파일 열어보기

wsl 실행

들어가면 입력하는 창이 뜬다

hi를 입력해봤다
종료된다

소스코드 분석
#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;
}
아래 명령어 실행해보기
gdb vuln
아래 명령어 실행하기
disass vuln
pwndbg> disass vuln
Dump of assembler code for function vuln:
0x00001353 <+0>: endbr32
0x00001357 <+4>: push ebp
0x00001358 <+5>: mov ebp,esp
0x0000135a <+7>: push ebx
0x0000135b <+8>: sub esp,0x14
0x0000135e <+11>: call 0x149b <__x86.get_pc_thunk.ax>
0x00001363 <+16>: add eax,0x2c49
0x00001368 <+21>: sub esp,0x8
0x0000136b <+24>: push DWORD PTR [ebp+0x8]
0x0000136e <+27>: lea edx,[ebp-0x18]
0x00001371 <+30>: push edx
0x00001372 <+31>: mov ebx,eax
0x00001374 <+33>: call 0x1170 <strcpy@plt>
0x00001379 <+38>: add esp,0x10
0x0000137c <+41>: nop
0x0000137d <+42>: mov ebx,DWORD PTR [ebp-0x4]
0x00001380 <+45>: leave
0x00001381 <+46>: ret
End of assembler dump.
문자를 20자 이상 입력하면 된다.
플래그 나왔다

플래그
picoCTF{ov3rfl0ws_ar3nt_that_bad_ef01832d}
성공

'System Hacking > 인터루드 스터디' 카테고리의 다른 글
| [picoCTF] buffer overflow 2 (0) | 2026.04.02 |
|---|---|
| [picoCTF] buffer overflow 1 (0) | 2026.04.02 |
| [pwnable.kr] bof (0) | 2026.03.26 |
| [pwnable.kr] fd (0) | 2026.03.26 |
| [워게임] 드림핵 : Welcome (0) | 2026.03.19 |