[bandit] level 24 -> level 25
해설)
포트 30002에서 데몬이 실행 중이고, 여기에다가 bandit24의 패스워드와 4자리 정수를 보내면 이것은 너에게 bandit25의 패스워드를 줄 것이다. 핀 코드를 검색하는 방법은 없고, brute-forcing을 통해 10000가지 경우의 수를 직접 해봐야 한다.
브루트 포스란?
브루트 포스란 문제를 해결하기 위해 가능한 모든 경우를 직접 실행시키는 방법을 말한다. 예를 들어, 1부터 100까지의 합을 구하는 데에 있어서, 등차수열의 합 공식을 이용해 구할 수도 있지만, 단순히 1부터 100까지 전부 다 더해서 구하는 방법도 존재한다. 이러한 풀이를 브루트 포스라고 한다.
시작하기에 앞서...갑자기 '시스템 리소스가 부족웅앵...' 하며 리눅스가 안 열리고 막 혼자 초기화되고 그래서 당황했다.
계속 재시작 버튼을 눌렀더니 실행되긴 됐는데 이유를 모르겠다.
nc명령어로 localhost 30002에 연결해보았다.
bandit24의 패스워드와 4자리의 핀 코드를 공백으로 구분해서 입력하라는 멘트가 나온다.
혹시 몰라서 그냥 패스워드만 써넣어봤더니 Fail!이 뜬다.
이를 10000번 시도할 수는 없기 때문에, for문을 사용하는 쉘 스크립트를 직접 작성해보자.
1. shell.sh라는 이름의 쉘 스크립트를 작성한다.
2. 0~9999까지의 정수를 출력하는 코드를 작성하고, result.txt파일에 [패스워드][핀 코드(정수)]의 형태로 복사한다.
3. result.txt파일을 nc localhost 30002로 넘긴다.
저번처럼 tmp아래에 디렉터리를 만들어준 후, shell.sh 이라는 이름의 스크립트를 작성.
<코드>
#! /bin/bash
password="bandit24패스워드"
for i in {0..9999}
do
echo "try: $i"
=> 0부터 9999까지의 정수가 [try : 정수]의 형태로 출력
echo "$password $i" >> ./result.txt
=> [패스워드] [정수] 형태의 문자열이 result.txt로 복사
done
exit 0
shell.sh를 실행시킨다.
(bash를 입력하는 이유는? 구글링해봤더니 bash스크립트만 뜨고 잘 안 나온다.)
이제 result.txt에 핀 코드들이 저장됐을 것이다.
한 번 읽어보자.
이 result.txt를 localhost 포트 30002에다가 전송해보자.
막 틀려서 Try again이 다다다 나오다가, 맞는 정수를 찾았는 지 bandit25의 패스워드를 제공해준다.
uNG9O58gUE7snukf3bvZ0rxhtnjzSGzG
이제 쉘 스크립트 작성이 본격적으로 나오려나 보다. 어렵다.