prob.zip을 압축을 해제하니, 다음과 같은 같은 파일들을 확인할 수 있었다.

flag.txt와 prob.c는 윈도우 환경에서도 충분히 확인이 가능했지만, prob는 elf 파일이기에 리눅스에서만 실행 가능했다.
Elf 란?
리눅스/유닉스 계열 운영체제에서 사용하는 실행 파일 포맷이다. 윈도우의 .exe 처럼 리눅스의 실행 가능한 바이너리 형식이라고 할 수 있다.
윈도우에서 wsl 을 환경에서 진행해보겠다.
1) 명령 프롬프트(cmd)에 아래 명령어를 입력해 리눅스 환경(wsl)에 접속한다.
wslwsl 설치 및 환경 설정 과정
1) 관리자 권한으로 cmd 실행
2) wsl 설치
wsl --install
2) cp 명령어를 이용해 prob.zip의 파일 경로를 입력한다.
cp [원본 경로] [저장할 디렉터리 경로]
나의 경우 prob.zip이 C 드라이브/사용자에 위치한 경우이므로 다음과 같이 입력한다.
cp /mnt/c/Users/prob.zip ~/ // C:\ --> /mnt/c 변경
3) unzip 명령어를 이용해 prob.zip 압축 파일을 풀어준다.
unzip prob.zip unzip 명령어는 .zip 압축 파일을 해제하는 리눅스 명령어이다.
기본 형태는 다음과 같다.
unzip 파일이름.zip
4) chmod 명령어를 이용해 prob 파일에 실행 권한을 부여한다.
chmod +x probchmod 명령어는 파일이나 디렉터리의 권한을 변경하는 명령어이다. 지금 상황에선 prob에게 실행 권한을 부여하고 있다.
+r : 읽기 권한
+w : 쓰기 권한
+x : 실행 권한
5) prob를 실행한다.
./prob
목표는 flag를 휙득하는 것이기에, 우선 cat 명령어를 사용해 flag.txt 출력을 시도했다. 하지만 cannot! 메시지가 출력되며 조회가 불가능했다. 그래서 이번엔 prob.c 를 조회했다. 내용은 다음과 같다.
#include<stdio.h>
int main()
{
char string[20];
gets(string);
if (!strncmp("ls",string,2))
system(string);
else
printf("cannot!");
return 0;
}
strncmp 함수가 정확히 어떤 뜻인지 몰라서 정확하게 해석하긴 어려웠지만, gets 함수가 사용자의 입력값을 받는 역할이라는 점과, 받은 문자열 string을 system() 함수가 그대로 실행한다는 점은 아 수 있었다.
strncmp 함수의 조건은 아주 명확히 해석하지 못했지만, 문자열 "ls" 입력 후 임의의 명령어를 덧붙일 수 있다고 이해했다.
이러한 조건을 활용해, flag.txt를 출력해보고자 시도했다.
6) 아래와 같은 명령어를 입력한다.
ls; cat falg.txt그랬더니 다음과 같은 flag를 얻을 수 있었다.

잘 몰랐던 개념들을 정리했다.
strncmp 함수란?
두 문자열의 앞쪽 n글자를 비교하는 함수
int strncmp(문자열1, 문자열2, 비교할_글자_수);strncmp("ls", string, 2);"ls"와 string 변수의 앞에서부터 2글자를 비교해 같으면 string을 쉘에서 실행한다.
system 함수란?
C 언어에서 쉘 명령어를 그대로 실행할 수 있게 해주는 함수
- C 코드 안에서 터미널에 명령어를 입력한 것처럼 명령을 실행해주는 역할을 수행
int system(문자열_명령어);gets(string);
if (!strncmp("ls",string,2))
system(string);사용자가 입력한 string이 "ls"로 시작하면, 사용자로부터 받은 입력값(string)을 명령어로 실행한다.
'C 언어 > 멘토링' 카테고리의 다른 글
| [C언어/멘토링] 멘토링 시험 오답 정리 (1) | 2025.06.08 |
|---|---|
| [C언어/멘토링] 노드와 단일 연결 리스트 (0) | 2025.05.27 |
| [C 언어/멘토링] Baekjoon 백준 11720번 - 숫자의 합 (0) | 2025.05.16 |
| [C 언어/멘토링] Call by Value와 Call by Refernce (0) | 2025.05.15 |
| [C 언어/멘토링] Baekjoon 백준 1152번 - 단어 개수 (0) | 2025.05.09 |