Ao resolver alguns desafios do CTF on-line, deparei-me com uma situação em que precisava forçar força bruta em um servidor. Este é o código que escrevi:
#!/bin/bash
for i in {0..9}{0..9}{0..9}{0..9}
do
echo "Now trying code.."
echo $i
echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt
done
Isso foi incrivelmente, dolorosamente lento . Eu precisava tentar combinações de 1000 a 9999 e isso levou cerca de 5 segundos para cada 10 tentativas. Então, seguindo um conselho, coloquei um '&' no final desta linha:
echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt &
E, tentou centenas de combinações em segundos. Fiquei muito surpreso. Alguém poderia me explicar a lógica? O que o '&' fez?
for i in {1000..9999}
wait
no final, no entanto.
nc -z localhost 1000-2000
?
&
faz com que o comando seja executado em segundo plano, isso é tudo. Não tornou mais rápido nem nada. Leia o manual do shell que você estiver usando (presumo que o bash).