문제
풀이 및 정답
이번 문제도 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
다음!