해당 게시글은 bandit wargame에 대한 스포일러(방향성/힌트/정답)를 제공할 수 있습니다.

bandit level 7에서 비밀번호를 얻기 위해
millionth라는 단어 옆에 나열된 비밀번호 문자열을 출력해야합니다.

grep 'millionth' data.txt
# data.txt에서 'millionth'가 들어간 줄만 출력해라.
grep 명령어를 이용하여 millionth과 같은 줄에 있는 비밀번호만 출력시키면
millionth 단어와 함께 목표한 비밀번호가 출력됩니다.

grep 'millionth' data.txt | awk '{print $2}'
# data.txt에서 'millionth'가 들어간 줄을 추출하여
# 문자열을 공백/탭으로 하여 2번째 단어만 출력해라.
만약 비밀번호만 출력해야 한다면
파이프 라인으로 awk 명령어의 인수로 넘겨주고 2번째 토큰(비밀번호)만 출력하면 됩니다.
awk vs grep vs sed
awk : 열(Column) 중심의 데이터 분석에 특화
grep : 행(Row) 추출에 특화
sed : 행(Row) 중심의 텍스트 변환 및 필터링에 특화
awk
: pattern-directed scanning and processing language
awk 'pattern { action }' filename
# Pattern: 어떤 줄에 적용할지 결정하는 조건 (생략 시 모든 줄에 적용)
# Action: 조건이 참일 때 실행할 명령어 (생략 시 기본값은 { print })
- $0: 현재 처리 중인 전체 행
- $1, $2, ...: 현재 행의 첫 번째, 두 번째, ... 열 (기본적으로 공백이나 탭으로 구분, -F 옵션으로 연산자 지정 가능)
- NR (Number of Record): 현재 처리 중인 행 번호
- NF (Number of Field): 현재 행에 포함된 열의 개수
- FS (Field Separator): 입력 필드 구분자 (기본값은 공백)
- BEGIN { ... }: 데이터를 읽기 전에 한 번만 실행 (헤더 출력, 변수 초기화)
- END { ... }: 데이터를 모두 읽은 후에 한 번만 실행 (결과 요약, 합계 출력)
awk '{ print $1, $3 }' data.txt
# data.txt의 1번째, 3번째 열만 출력
awk '$2 >= 100 { print $0 }' data.txt
# 2번째 열의 값이 100 이상인 행만 출력
awk -F ":" '{ print $1 }' /etc/passwd
# 구분자를 :(colon)으로 지정하여 /etc.passwd의 1번째 열만 출력
awk 'NR >= 10 && NR <= 20' data.txt
# data.txt의 10번째 줄부터 20번째 줄까지 출력
awk '{ sum += $1 } END { print "Total Sum: ", sum }' numbers.txt
# numbers.txt의 1번째 행만 더해서 마지막 줄에 Total Sum : (값)을 출력
sed
: stream editor for filtering and transforming text
sed [option] 'command' filename
# command : 범위 or 동작
- /pattern/: 특정 문자열이 포함된 행 대상
- !: 조건의 반전 (예: 1!d는 1행을 제외한 나머지 )
- option: -n (자동 출력 억제), -i (파일을 직접 수정) 등
- command : s(substitute), d(delete), p (print) 등
Line-by-line processing
- 입력 스트림에서 한 줄을 읽어 패턴 공간(Pattern Space)이라는 임시 버퍼에 넣고
- 지정된 명령어를 해당 버퍼의 텍스트에 적용
- 결과를 표준 출력으로 내보낸 뒤 버퍼를 비우고 다음 줄로 넘어간다
sed 's/apple/orange/' file.txt # 각 행에서 첫 번째 apple을 orange로 변경
sed 's/apple/orange/g' file.txt # 행 전체(global)에서 모든 apple을 변경
sed '1d' file.txt # 첫 번째 줄 delete
sed '1,5d' file.txt # 1~5행 delete
sed '/pattern/d' file.txt # 특정 패턴이 포함된 행 delete
sed -n '5p' file.txt # 5번째 줄만 출력
sed -n '10,20p' file.txt # 10~20행만 출력
sed -n '/START/,/END/p' file.txt # START 문구부터 END 문구 사이의 모든 행 출력

less 명령어를 활용하여 data.txt를 확인하면
cat으로 출력하여 직접 읽어볼 수 있는 분량이 아니라는 사실을 알 수 있습니다.
- less command
| 명령 키 | 동작 | 비고 |
| Space | 한 화면 아래로 | 페이지 단위 스크롤 |
| b | 한 화면 위로 | Backward 이동 (역방향 탐색) |
| G | 파일의 최하단으로 | 파일 끝(EOF)까지 점프 |
| g | 파일의 최상단으로 | 파일 시작점(Offset 0)으로 복귀 |
| /pattern | 문자열 정방향 검색 | 입력한 패턴을 찾아 강조 표시 |
| q | 종료 (Quit) | 표준 출력 버퍼를 반환하고 쉘로 복귀 |
만약 cat 명령어로 data.txt를 출력했더라면 텍스트 데이터들이 무수히 많이 출력될 것입니다.
cat으로 읽었다면 Ctrl + C 단축키를 통해 프로세스를 종료하고
grep 명령어를 이용하여 비밀번호가 포함된 줄만 출력시키면 됩니다.
'Bandit' 카테고리의 다른 글
| bandit Level 9 -> 10 (strings option?) (0) | 2026.01.11 |
|---|---|
| Bandit Level 8 -> Level 9 (sort? uniq?) (0) | 2026.01.11 |
| Bandit Level 6 -> Level 7 (0) | 2026.01.11 |
| Bandit Level 5 -> Level 6 (tmi : tr, echo / human-readable?) (0) | 2026.01.11 |
| Bandit Level 4 -> Level 5 (wildcard?) (0) | 2026.01.11 |