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

bandit level 22의 목표는
cron에 의해 자동으로, 정기적인 간격에 따라 실행되는 프로그램이 있으므로
/etc/cron.d 디렉토리에서 설정을 확인하고 실행되는 명령어를 확인하여 비밀번호를 획득하는 것입니다.

/etc/cron.d 디렉토리로 이동해서 cronjob_bandit23의 내용을 출력하면,
이전 레벨과 마찬가지로 매분 /usr/bin/cronjob_bandit23.sh를 실행하고 표준 출력과 오류 메세지는 리다이렉션하여 소멸시킵니다.
cron이 실행하는 쉘 스크립트(/usr/bin/cronjob_bandit23.sh)의 내용은 다음과 같습니다.
#!/bin/bash # shebang
myname=$(whoami)
# 해당 작업의 EUID는 bandit23이므로, whoami 호출을 통해 할당되는 $whoami 변수의 값은 bandit23
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)
# 'I am user bandit23'을 32자리 해시값과 -(하이픈)으로 변환, cut으로 32자리 해시값만 추출
echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"
cat /etc/bandit_pass/$myname > /tmp/$mytarget
# 다음 레벨의 비밀번호 파일을 출력 리다이렉션을 통해 /tmp/(32자리 해시값) 파일에 쓰기 작업 수행

MD5 해시 알고리즘은 동일한 입력값에 대해 항상 동일한 출력값을 반환하므로,
MD5 해시 알고리즘이 적용된다는 사실을 아는 사용자라면 누구나 쉘 스크립트가 생성할 파일명을 미리 계산하여 비밀번호를 획득할 수 있습니다.
echo I am user bandit23 | md5sum | cut -d ' ' -f 1 를 실행하여
평문 문자열을 파이프라인을 통해 전달하여, MD5(Message-Digest Algorythm 5) 해시값을 계산하고, 결과물 중에서 식별자(-)를 제외하고 첫번째 필드만을 추출하여 파일 식별자(32자리 해시값)을 생성합니다.
해당 경로는 소유자, 그룹, 그 외 사용자가 모두 읽을 수 있는 상태로 생성되므로,
cat 명령어를 통해 다음 레벨의 비밀번호를 획득합니다.
'Bandit' 카테고리의 다른 글
| Bandit Level 24 -> Level 25 (0) | 2026.01.13 |
|---|---|
| Bandit Level 23 -> Level 24 (1) | 2026.01.13 |
| Bandit Level 21 -> Level 22 (0) | 2026.01.13 |
| Bandit Level 20 -> Level 21 (ptrace?) (0) | 2026.01.13 |
| Bandit Level 19 -> Level 20 (EUID vs RUID?) (0) | 2026.01.13 |