해킹&보안

[반딧 워게임 : OverTheWire] Level 24 -> 25 (리눅스/해킹/보안 공부)

yamaeking 2025. 3. 20. 12:22

자 오늘은 Level 24 -> 25을 해보도록 하겠다. 

(Login ID :  bandit24/  Password : gb8KRRCsshuZXI0tUuR6ypOFjiZbf3G8

 

1. 문제 내용

https://overthewire.org/wargames/bandit/bandit25.html

 

OverTheWire: Level Goal

We're hackers, and we are good-looking. We are the 1%. <!-- Please read and accept the Rules! --> 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 pin

overthewire.org

 -> daemon(백그라운드 프로세스가 30002번 포트에서 리스닝 대기중이다. 

 -> 님이 이 포트에 bandit24비밀번호+4자리 숫자로 된 핀 코드를 던져 보내면 bandit25 비밀번호를 준다.

 -> 10000가지 조합의 숫자를 다 때려 박는 수 밖에 없음ㅋ(brute-forcing)

 -> 매 번마다 새로운 connection 을 연결할 필요는 없다.

 

2. 문제 풀이

 ->  딱 봐도 쉘 스크립트 짜서 이케이케 저케저케 해야 하는 거 같다.

 

nmap -p 30002 localhost  를 하니 위와 같이 현재 localhost에서 리스닝 중인 port 가 나온다. 뭐 리스닝 중이라니까 당연한 얘기고.  echo "babo" | ncat localhost 30002 로 데이터를 보내보니 아래와 같이 나왔다.

 -> bandit24유저의 비밀번호와 4자리의 핀코드를 한 줄에, 스페이스로 구분하여 보내라고 한다. 

 

 

 

브루팅 포스 스크립트를 짜보도록 하자.

 

 1. /tmp 디렉토리에 sh 파일 생성하고 스크립트 짜기 

touch /tmp/bruteAttack.sh

 

(아래와 같이 권한도 설정해줘라. rwxr-xr-x 를 설정하여 other도 실행할 수 있게 만들어 놓는다. 이유는 나중에 설명함.)

chmod 755 /tmp/bruteAttack.sh
nano /tmp/bruteAttack.sh

 

 <스크립트 설명>

 -> bandit24의 비밀번호를 password 변수에 저장한다.

 

 -> for i in $(seq -w 0000 9999);   0000 ~ 9999 범위에 해당하는 값을 i에 넣는다. 

    : -w (equal width) 옵션은 숫자를 고정된 자리로 뱉어줌. ex) 0은 0000 , 10은 0010 이런 식으로. (아래 참고)

    : 참고로 seq -w 0000 9999 의 경우 위와 같이  0000 0001 0002 ~~ 9999 를 공백으로 구분하여 내뱉어 준다. 그리고    for i in $(seq -w 0000 9999)를 하면 공백으로 내뱉어 준 숫자 하나하나를 i에 대입하여 실행한다(?)라고 보면 될듯

 

 -> echo "$password $i"

   : 비밀번호는 bandit24비번(공백)4자리 핀코드였으니, 위와 같이 공백 하나를 넣어 각각 넣어준다.

 

 -> | ncat localhost 30002

   : echo 값을 표준입력으로 받아서 localhost 30002에 쏴준다. 

 

 *: 참고로 저렇게  {} 블록으로 구분하여 for 문을 실행한 뒤 | ncat localhost 30002 로 해주면, 파이프라인 특성상 매 번 연결을 새로 하지 않고 한 번의 연결로 쭈우욱 입력값들을 보낸다라고 한다.

 

 ** : 그리고 | ncat localhost 30002 | grep -v "Wrong" 을 해주는게 좋다. 아니면 뒤에 보는 것처럼 터미널에 메시지가 너무 많이 출력된다.

 

 

 2. /tmp/bruteAttack.sh 실행.

-> 이 부분 실행할 때, 갑자기 서버가 아래와 같이 끊기기도 하고 재접속해도 안 들어가지는 경우가 있다. 일부러 테스트용으로 저렇게 만들어 놓은듯.

 

 

 -> 하지만 쫄지 말고 bandit23이나 bandit22 같은 것으로 로그인하여 /tmp/bruteAttack.sh 을 실행하여 준다.

 

짜잔 그러면 위와 같이 스크립트가 왱왱 돌아가면서 brute force 를 시도하게 된다. 

Wrong 메시지는 굳이 출력할 필요 없으니, 위에서 말한 것처럼 스크립트 짤 때  | ncat localhost 30002 | grep -v "Wrong"  이런 식으로 짜주는게 좋다.  (-v : invert match, 일치하지 않는 라인만 출력.)

 

 

2. 요약

☞ 쉘 스크립트를 작성하여 brute force 를 진행하면 클리어 가능!

 

☞ 30002 번 포트는 계속(?) 리스닝 중이기에 굳이 bandit24 가 아니라 bandit23 같은 것으로 brute force 하여도 비밀번호 응답을 받을 수 있다.