문제

Bandit Level 22->23


풀이 및 정답

이번 문제도 level 22와 유사하게 cron 데몬이 자동으로 실행하는 스크립트를 살펴보는 것이다.

/etc/cron.d경로에 있는 cronjob 중에서 23 레벨에 관한 파일을 열어보면,

/usr/bin/cronjob_bandit23.sh 스크립트가 동작하는데 모든 출력이 /dev/null로 보내지고 있다.

/usr/bin/cronjob_bandit23.sh를 열어본다.

#!/bin/bash
= 해당 쉘 스크립트 파일이 bash 쉘을 사용해 실행될 것을 명시

myname=\$(whoami)
= myname 이라는 변수 선언을 할 것인데 whoami명령어 값을 할당

mytarget=\$(echo I am user \$myname | md5sum | cut -d ‘ ‘ -f 1)
= mytarget 변수 선언, 값으로 I am user $myname 을 md5sum 을 통한 체크섬 이후 ‘ ‘(공백)을 기준으로 첫번째 필드에 등장한 값을 할당

cat /etc/bandit_pass/\$myname > /tmp/\$mytarget = bandit23 의 패스워드를 /tmp/$mytarget에 저장

결론은 $mytarget의 값을 찾을 수 있으면 level 23의 패스워드를 획득할 수 있을 것이다.

그렇다면 mytarget에 할당된 명령어를 그대로 쳐볼 수 있을 것이다. whoami 명령어는 동작하는 계정을 반환해주기에 myname 값은 bandit23 이다.

echo I am user bandit23 | md5sum | cut -d ' ' -f 1

해당 명령어를 동작하면 $mytarget에 할당된 값을 출력해볼 수 있을 것이다.
$mytarget에 할당된 값을 출력해보았고 곧바로 비밀번호를 획득할 수 있었다.

passwd : 0Zf11ioIjMVN551jX3CmStKLYqjk54Ga

mytarget에 할당될 값을 변수에 담아 동작

mytarget에 할당될 값이 체크썸을 통해 변형된 문자열임을 알았다면 굳이 출력해볼 필요는 없을 것이다.
따라서 해당 명령어를 동작한 값을 변수를 선언해 일시적으로 변수명으로 사용해볼 수 있을 것 같다.

realPath=$(echo I am user bandit23 | md5sum | cut -d ' ' -f 1)  

해당 명령어를 그대로 bash 쉘에서 동작시켜 realPath 변수에 담아 넣고

cat /tmp/$realPath

명령어를 동작시켜 비밀번호를 받아볼 수 있다.
passwd : 0Zf11ioIjMVN551jX3CmStKLYqjk54Ga

다음!