OverTheWire_Wargame Bandit

[ level23 -> level24 ]




이번 레벨 또한 cron을 이용한 문제입니다.

NOTE 부분을 확인 해 보니 이번엔 우리가 쉘스크립트를 짜야 한다고 하네요.

바로 cron을 확인 해 봅시다.



역시 다음 레벨을 위한 cronjob_bandit24가 우릴 기다리고 있습니다.

내용은 /usr/bin/cronjob_bandit24.sh을 실행하는 것입니다.

cronjob_bandit24.sh에는 어떤 내용이 있는 지 살펴보도록 하죠.



이 쉘스크립트를 실행하는 주체는 bandit24이므로, $myname에는 bandit24가 들어 갈 것입니다.

그리고 경로를 /var/spool/bandit24로 바꿔주는군요.

그리고 해당 경로에 있는 모든 파일(와일드 카드로 *, .*이기에 숨김파일도 포함)의 이름을 i에 저장하면서 루프를 돌기 시작합니다.

현재 경로와 이전 경로를 나타내는 .과 ..을 제외한 나머지(모든 파일)의 경우 timeout 명령어를 이용하여 프로그램을 실행합니다.

그리고 프로그램의 실행이 끝나면 rm 명령어로 해당 프로그램을 삭제합니다.

모든 파일이 삭제 될 때 까지 루프를 도는 쉘 스크립트입니다.

그렇다면 /var/spool/bandit24로 넘어가서 쉘 스크립트를 짜보도록 하겠습니다.



이 쉘 스크립트의 이름은 test.sh로 해주었으며, bandit24로 통하는 패스워드를 1이라는 파일명으로 출력해주는 스크립트입니다.

처음에는 /tmp 경로에 폴더를 새로 만들어 출력 해 주려고 하였으나, 폴더를 만들 경우 bandit23에만 권한이 있기 때문에 파일 생성이 되지 않았습니다.

그래서 결국 동일한 경로에 생성을 해 주기로 생각하였습니다.

또한, cronjob_bandit24.sh의 경우 60초 주기로 돌기 때문에 1이라는 파일은 삭제가 되기까지 약간의 시간이 있을거라 생각하고 풀이하였습니다.



test.sh에 실행 권한을 주고 약간의 텀을 주면서 ls를 여러 번 실행 한 결과 1이라는 이름의 파일만 남게 되었고, cat으로 출력해주면 24레벨로 통하는 패스워드를 얻을 수 있습니다.

OverTheWire_Wargame Bandit

[ level22 -> level23 ]




이번 레벨도 cron을 이용한 문제네요. 저번 문제와 동일하게 쉘스크립트가 실행되고 있는 모양입니다. 확인 해 보도록 합시다.



/etc/cron.d/ 폴더 안에 cronjob_bandit23이 존재하고 있습니다.



cat으로 확인 해 본 결과, 역시 쉘스크립트를 실행하고 있네요.

스크립트는 echo I am user $myname | md5sum | cut -d ' ' -f 1 을 실행하고, 그 결과값을 파일명으로 패스워드를 저장하네요.

whoami의 결과는 현재 환경에서는 bandit22가 나오겠네요. 하지만 우리가 찾아야 하는 것은 bandit23의 패스워드이므로, $myname은 bandit23이 되어야 합니다.

md5sum은 md5 checksum을 확인하는 용도로, 해당 이름의 md5값을 반환시켜줍니다. 그리고 cut 명령어는 문자열을 자르는 substring과 비슷한 명령어입니다.

cut 명령어의 -d 옵션은 문자열을 자르기 위한 기준 문자를 지정해주는데, 위 스크립트에서는 공백을 기준으로 잡았습니다. -f 옵션은 필드를 뜻하는데, 첫 번째 필드에 있는 문자열을 반환하는거죠.

md5sum에 의해 "I am user bandit23"의 md5값을 반환시키는데, 본래 md5sum의 반환값이 [md5변환값 원래문자열] 이기 때문에, cut 명령어를 실행하면 md5변환값만 남게 됩니다.

자, 이제 동작 원리는 파악했으니 직접 명령어를 때려보도록 하죠.



$myname 부분을 bandit23으로 수정 후 바로 출력시켜줍니다.

반환 된 md5값을 파일명으로 cat 해보니 레벨23으로 갈 수 있는 패스워드가 출력되었습니다.

+ Recent posts