Bandit Level 24 → Level 25
Level Goal
A daemon is listening on port 30002 and will give you the password for bandit25 if given the password for bandit24 and a secret numeric 4-digit pincode. There is no way to retrieve the pincode except by going through all of the 10000 combinations, called brute-forcing.
You do not need to create new connections each time
Sol)
이번엔 30002포트로 현재 계정의 비밀번호와 0000~9999 사이의 4자리 핀코드를 같이 보내면 비밀번호를 준다고 한단다. 브루트 포스 방법으로 다 넣어보는 것을 말하니 이전 문제에서 쉘스크립트를 짜봤으니 이번에도 bash로 짜서 돌려보도록 한다.
일단 상태를 확인해보는 게 좋을 것 같다.
level24에서 썼던 'nc'명령어에 옵션없이 Host와 Port를 넣어 상태를 확인해본다.
응답이 위와 같이 오면서 엔터를 입력하면 'Fail!'과 함께 메시지가 출력된다.
연결은 nc로 하면 될 것 같다.
이제 현재 계정 디렉토리에서는 뭘 만들 수 없으니 '/tmp' 디렉토리에서 작업한다. 스크립트를 작성해야 하는데 일단 리스닝 중인 포트로 연결 후 for문으로 0000부터 9999까지 넣도록 한다.
하지만 동작하지 않는다. 스크립트 상으로 보면 nc가 연결된 후 for문이 동작하는데 nc 명령어가 끝난 후 for 문이 실행되기 때문이다.
이번엔 파이프라인을 이용해 연결하고 echo 명령어가 동작하도록 한다.
이번엔 한번만 동작하고 시간이 지나면 다시 해당 포트에 연결을 해서 시도를 하는데 한번 연결을 한 후 for문이 동작을 해야한다.
그래서 이번엔 for문을 블록으로 감싸고 이후에 nc 명령어를 실행시켜 fo문이 nc 명령어 한번에 동작을 하도록 한다.
이번엔 제대로 나오는 듯 싶었으나 'Wrong!' 메시지가 출력되다 멈춘 것 처럼 보인다. 내 예상으로는 쓸데 없는 출력이 시간을 많이 잡아 먹기도 하고 정답이 출력되도 찾기 힘드니 'Wrong!'이 아닌 경우에만 출력할 수 있도록 grap을 함께 써주고 해당 출력 내용을 현재 디렉토리에 'pass.txt'로 저장하도록 했다.
#!/bin/bash
{
for i in {0000..9999};
do
echo "VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar $i"
done
} | nc localhost 30002 | grep -v "Wrong!" > ./pass.txt
그러면 조금 시간이 지나면 아래와 같은 정답이 출력된다.