Bandit Level 22 → Level 23
Level Goal
A program is running automatically at regular intervals from cron, the time-based job scheduler. Look in /etc/cron.d/ for the configuration and see what command is being executed.NOTE: Looking at shell scripts written by other people is a very useful skill. The script for this level is intentionally made easy to read. If you are having problems understanding what it does, try executing it to see the debug information it prints.
Sol)
이번에도 크론(cron)을 찾아봐야하니 일단 해당 디렉토리에서 검색해본다.
해당 디렉토리에서 검색을 하게되면 마지막 실행파일('/usr/bin/cronjob_bandit23.sh')에서 bash로 작성된 명령어가 나오는데
#!/bin/bash
myname=$(whoami)
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)
echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"
cat /etc/bandit_pass/$myname > /tmp/$mytarget
내용으로 봐서는 'myname' 변수와 'mytarget' 변수가 bash 명령어로 작성된 것으로 보인다. 'whoami' 명령어와 'echo I am user $myname | md5sum | cut -d ' ' -f 1' 명령어를 직접 쳐보면 아래와 같이 나온다.
# 현재 접속한 계정명 출력
whoami
해당 명령어를 분석해 보면
# 터미널에 string 출력
echo [string]
echo I am user $myname
# $myname은 whoami 명령어로 출력된 계정(bandit22)
# [output] I am user bandit22
# 하지만 다음 계정인 bandit23의 비밀번호를 알아야 하니
# 아래 변수에는 bandit23을 넣어준다.
#md5(Message-Digest algorithm 5) 해시 알고리즘으로 다음 string의 checksum 확인
md5sum [filename]
echo I am user bandit23 | md5sum
# "I am user bandit23" 를 md5 알고리즘의 checksum 값으로 출력
# [output] 8ca319486bfbbc3663ea0fbe81326349 -
# file 이나 입력받은 문자열을 잘라서 새로운 문자열을 만듬
#cut [option] [file or string]
# [option]
# -d (delimiter) : 구분 기호 지정
# -f (fields) : 구분 기호로 자른 행을 출력(-d 옵션일 때 사용),
# 정수로 출력할 필드 인덱스 입력
# -c (characters) : 문자열 기준으로 자른 행을 출력
# -b (bytes) : 바이트 기준으로 자른 행을 출력
echo 8ca319486bfbbc3663ea0fbe81326349 - | cut -d ' ' -f 1
# 입력된 문자열을 공백(' ') 기준으로 잘라서 첫번째 내용을 출력
#[output] 8ca319486bfbbc3663ea0fbe81326349
이제 'mytarget' 변수의 값인 '8ca319486bfbbc3663ea0fbe81326349'를 구했으므로 해당 파일을 출력해본다('/tmp/8ca319486bfbbc3663ea0fbe81326349')
비밀번호를 찾았다.