在在线解决CTF挑战时,遇到了需要暴力破解服务器的情况。这是我写的代码:
#!/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
这是令人难以置信的,痛苦的缓慢。我需要尝试从1000到9999的组合,每10次尝试大约需要5秒钟。然后,按照建议,在此行的末尾添加一个“&”:
echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt &
并且,它在几秒钟内尝试了数百种组合。我很惊讶。有人可以向我解释逻辑吗?“&”是做什么的?
添加会&
生成一个后台进程。
如果您编写a; b
,它将运行command a
,等待其完成,然后依次运行command b
。
如果您编写a & b
,它将a
作为后台进程生成。它不会等待它完成,而是会b
立即开始运行。它将同时运行。
您可以通过在Shell中进行实验来查看其功能。如果已X
安装,xterm
则是查看会发生什么情况的好方法:键入
$ xterm
将导致另一个终端窗口打开,第一个将等待直到您关闭它。仅当关闭它时,您才能收回外壳。如果您输入
$ xterm &
然后它将在后台运行它,您将立即获得外壳,而xterm
窗口也将保持打开状态。
所以如果你写
echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt
它建立连接,发送字符串,将输出的内容存储在文件中,然后继续前进到下一个。
添加&
使它不等待。它最终将或多或少地同时运行全部一万个。
您的脚本似乎“更快地”结束了,因为在那个时候它实际上可能没有完成。它仅完成了一万个后台作业,然后结束了前台作业。
这也意味着,在您的情况下,它将尝试一次或多或少地打开一万个连接。根据另一端可以处理的内容,其中一些可能会失败。不仅如此,而且不能保证它们会按顺序运行,实际上几乎可以肯定它们不会运行,因此最终的结果/tmp/me/dump.txt
是任何人的猜测。
您检查输出是否正确?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句