자 오늘은 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 하여도 비밀번호 응답을 받을 수 있다.
'해킹&보안' 카테고리의 다른 글
[반딧 워게임 : OverTheWire] Level 26 -> 27 (리눅스/해킹/보안 공부) (0) | 2025.03.21 |
---|---|
[반딧 워게임 : OverTheWire] Level 25 -> 26 (리눅스/해킹/보안 공부) (0) | 2025.03.21 |
해킹&보안[반딧 워게임 : OverTheWire] Level 23 -> 24 (리눅스/해킹/보안 공부) (0) | 2025.03.20 |
해킹&보안[반딧 워게임 : OverTheWire] Level 22 -> 23 (리눅스/해킹/보안 공부) (0) | 2025.03.19 |
해킹&보안[반딧 워게임 : OverTheWire] Level 21 -> 22 (리눅스/해킹/보안 공부) (0) | 2025.03.19 |