OverTheWire_Wargame Bandit

[ level24 -> level25 ]




자, 이번 문제는 드디어 cron에서 벗어났네요.

한 데몬이 30002포트로 listening 상태에 있다고 합니다. 만약 bandit24의 패스워드와 함께 4자리의 숫자 핀코드를 제대로 때려박아준다면 bandit25로 향하는 패스워드를 알려주겠다네요.

전형적인 브루트포싱 문제입니다. 파이썬으로 코드를 짜서 돌리도록 합시다.



먼저, nc로 반응이 어떠한지 확인을 해 보았습니다.

한 번 연결하면 계속 입력을 받는 구조군요. 실패 시 출력 값은 Fail! You did not supply enough data. Try again. 입니다.

그런줄 알았는데....

Fail 부분은 제대로 된 길이의 인자를 전송하지 않았을 때 발생하는 에러 출력값이었습니다.

제대로 된 문자열을 전송했을 경우의 실패 메시지는 Wrong! Please enter the correct pincode. 입니다.

이걸 기반으로 코드를 짜보도록 하겠습니다.



4중 for문으로 브루트포싱하였습니다. 맨 처음 기본 출력값이 있기 때문에 recv를 한번 해주었고, 그 이후에는 send와 recv를 번갈아가며 실행, 실패 메시지가 출력되지 않았을 경우 그 문자열을 뱉어내는 코드입니다.



bandit25로 향하는 문을 열어줄 패스워드를 뱉어냈습니다!

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레벨로 통하는 패스워드를 얻을 수 있습니다.

+ Recent posts