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

bandit level 23의 목표는
cron에 의해 자동으로, 정기적인 간격에 따라 실행되는 프로그램이 있으므로
/etc/cron.d 디렉토리에서 설정을 확인하고 실행되는 명령어를 확인하여 비밀번호를 획득하는 것입니다.
NOTE는
해당 레벨을 클리어하기 위해 쉘 스크립트 작성이 필요하며,
쉘 스크립트는 실행된 후 사라지므로 다른 곳에 저장하라는 내용입니다.

#!/bin/bash #shebang
myname=$(whoami)
# runtime 시점의 실행 주체인 bandit24로 할당된다
cd /var/spool/$myname/foo
echo "Executing and deleting all scripts in /var/spool/$myname/foo:"
# echo에 의해 /var/spool/$myname/foo에 있는 모든 파일을 실행 후 삭제한다는 메세지 출력 (일종의 주석)
for i in * .*;
do
if [ "$i" != "." -a "$i" != ".." ];
then
echo "Handling $i"
owner="$(stat --format "%U" ./$i)"
if [ "${owner}" = "bandit23" ]; then
timeout -s 9 60 ./$i
fi
rm -f ./$i
fi
done
# .(현재 디렉토리) ..(부모 디렉토리)를 제외하고
# stat 명령어를 통해 추출한 owner가 bandit23라면
# 60초의 시간제한을 두고 실행하고 60초가 지나면 실행중지한다.
# /var/spool/$myname/foo의 모든 파일을 삭제한다.

#!/bin/bash
cat /etc/bandit_pass/bandit24 > /tmp/tmp.A4ednlf6YF/banditpw24
cp 명령어를 통한 파일복제는 원본 파일의 권한비트를 보존하기 때문에
내부 데이터만을 유출하는 방법은 명시적으로 권한을 개방하는 출력 리다이렉션 방식이 더 유효합니다.

cron에 의해 shell script를 실행하고 비밀번호 파일을 쓰는 사용자는 bandit24입니다.
chmod 777도 유효하지만 최소 권한 원칙을 따르기 위해
실행될 쉘 스크립트는 읽기 및 실행 권한만을 부여하고,
읽어올 파일이 생성될 임시 디렉토리에도 쓰기 및 실행 권한만을 부여합니다.
cp 명령어로 대상 디렉토리에 실행 권한이 부여된 스크립트를 투입하면
cron으로 실행되는 쉘 스크립트가 bandit24 권한으로 보호된 파일을 읽어 임시 디렉토리에 쓰도록 유도합니다.
'Bandit' 카테고리의 다른 글
| Bandit Level 25 -> Level 26 (0) | 2026.01.13 |
|---|---|
| Bandit Level 24 -> Level 25 (0) | 2026.01.13 |
| Bandit Level 22 -> Level 23 (0) | 2026.01.13 |
| Bandit Level 21 -> Level 22 (0) | 2026.01.13 |
| Bandit Level 20 -> Level 21 (ptrace?) (0) | 2026.01.13 |