lea*_*erX 18 command-line bash shell-script
在在线解决一些 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
Run Code Online (Sandbox Code Playgroud)
这是令人难以置信的、令人痛苦的缓慢。我需要尝试从 1000 到 9999 的组合,每 10 次尝试大约需要 5 秒。然后,根据建议,我在这一行的末尾加上了一个“&”:
echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt &
Run Code Online (Sandbox Code Playgroud)
而且,它在几秒钟内尝试了 100 种组合。我很惊讶。有人可以向我解释逻辑吗?“&”做了什么?
mar*_*nus 30
添加会&产生一个后台进程。
如果你写a; b,它会运行 command a,等待它完成,然后b按顺序运行 command 。
如果您编写a & b,它将a作为后台进程产生。它不会等待它完成,它会b立即开始运行。它将同时运行。
您可以通过在 shell 中进行试验来了解它的作用。如果您已经X安装,xterm是查看会发生什么的好方法:输入
$ xterm
Run Code Online (Sandbox Code Playgroud)
将导致另一个终端窗口打开,第一个窗口将等到您关闭它。只有当你关闭它时,你才能取回你的外壳。如果你输入
$ xterm &
Run Code Online (Sandbox Code Playgroud)
然后它将在后台运行它,您将立即返回您的外壳,同时xterm窗口也将保持打开状态。
所以如果你写
echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt
Run Code Online (Sandbox Code Playgroud)
它使连接,发送字符串,商店出来的东西在文件中,只有然后移动到下一个接着一个。
添加&使其不等待。它最终会或多或少地同时运行所有一万个。
您的脚本似乎“结束”得更快,因为它可能实际上并没有在那段时间完成。它只是做了一万个后台作业,然后结束了前台作业。
这也意味着,在您的情况下,它会尝试一次或多或少地打开一万个连接。根据另一端的处理能力,其中一些很可能会失败。不仅如此,而且不能保证它们会按顺序运行,事实上它们几乎肯定不会,所以实际上最终会发生什么/tmp/me/dump.txt是任何人的猜测。
你检查输出是否正确?