面向黑客的 Linux,第 7 部分:BASH 脚本入门
我认为黑客和 Linux 管理员都必须掌握编写脚本的能力。随着 Windows PowerShell 的引入,越来越多的 Windows 管理员也需要使用脚本来执行自动化任务并提升效率。我们经常需要自动化使用多个命令,有时还涉及多种工具。为了成为一名合格的黑客,您不仅需要精通高级 shell 脚本编写技巧,还需要掌握至少一种广泛应用的脚本语言,如 Ruby (Metasploit 漏洞利用就是用 Ruby 编写的)、Python(很多黑客工具都是 Python 脚本)或 Perl(Perl 是最优秀的文本操作脚本语言)。
我们将从基础的 shell 脚本开始,逐步过渡到高级 shell 脚本,然后再深入学习这些脚本语言,最终目标是开发出适合自己的工具。
第 1 步:了解各种 shell 类型
shell 是用户和操作系统之间的接口。这使我们能够运行命令、实用程序、程序、操作文件等。Linux 提供了许多不同类型的 shell,包括 Korn shell、Z shell、C shell 和 Bourne again shell(或 BASH)。
由于几乎所有的 Linux 和 UNIX 发行版(包括 Mac OS X 和 Kali)都支持 BASH shell,因此我们将在此处重点使用 BASH shell。
第 2 步:BASH 脚本的基础知识
要创建一个 shell 脚本,我们首先要选择一个文本编辑器。Linux 中有很多文本编辑器可供选择,如 vi、vim、emacs、gedit、kate 等,但我将在这套教程中使用 Leafpad。
第 3 步:BASH 内置命令
除了可以运行任何系统命令和应用程序外,BASH shell 还包含了一些内置命令。这些命令包括:
:, ., break, cd, continue, eval, exec, exit, export, getopts, hash, pwd,
readonly, return, set, shift, test, [, times, trap, umask 和 unset, alias, bind, builtin, command, declare, echo, enable, help, let, local, logout, printf, read, shopt, type, typeset, ulimit 和 unalias。
在后续教程中我们会详细介绍这些命令。这些命令已经内置在 BASH shell 中。
第 4 步:添加注释
就像任何编程一样,我们可能希望添加注释。注释是用于对我们自己或任何阅读代码的人的说明,说明我们试图通过脚本或脚本的某一部分实现什么。解释器不会读取或执行这些注释或“注释”。
BASH shell 使用在一行前面加上“#”来启用注释。在我的第一个脚本中,我可以在我喜欢的文本编辑器中编写:
#这是我的第一个脚本!
解释器将忽略 “#” 后面的所有内容,然后移至下一行。
第 5 步:“Hello,Hackers-Arise!”
我们将从一个简单的脚本开始,该脚本会在屏幕上显示一条消息:“Hello,Hackers-Arise!”。
我们首先输入 shebang 或“#!”。这告诉操作系统,shebang 后面的任何内容都是我们要用于脚本的解释器。
然后我们在 shebang 后面加上 /bin/bash,表示我们希望操作系统使用 BASH shell 解释器。我们可以使用其他解释器,如 PERL 或 Python,但这里我们要使用 BASH 解释器。
#!/bin/bash
接下来,我们输入 echo,这是 Linux 中的一个命令,它告诉系统简单地重复或“回显”到我们的监视器 (stdout) 后面的内容。在这种情况下,我们希望系统向我们回显“ Hello Hackers-Arise !”。请注意,我们要“回显”的文本或消息是用双引号括起来的。
echo "Hello,Hackers-Arise!"
我们将此文件保存为 HelloHackersArise 并退出文本编辑器。
第 6 步:设置执行权限
当我们创建一个文件时,默认情况下它并不是可执行的。让我们通过在目录中输入 ls -l 查看新文件的权限。
我们的新文件具有 rw-r--r-- (644) 权限。该文件的所有者只有读 (r) 和写 (w) 权限,但没有执行 (x) 权限。该组和所有人都只有读取权限。我们需要修改它以赋予我们执行权限才能运行此脚本。我们使用 chmod 命令执行此操作。要授予所有者、组和所有人的执行权限,我们键入:
kali > chmod 755 HelloHackersArise
现在,当我们对文件进行长列表(ls -l)时,我们可以看到我们具有执行权限。
kali > ls -l
第 7 步:运行 HelloHackersArise
要运行我们的简单脚本,我们只需键入:
kali > ./HelloHackersArise
文件名前的 ./ 告诉系统我们在当前目录中执行这个脚本。这意味着系统不会查看该文件的 PATH 变量中的目录,而是只查看我的当前目录,并运行 HelloHackersArise。当我们按下回车键时,我们非常简单的脚本会返回到我们的屏幕。
第 8 步:使用变量
现在我们有了一个简单的脚本。它所做的只是回显一条消息。如果我们想创建更高级的脚本,我们可能需要添加一些变量。
变量只是我们在内存中保存某些内容的存储区域。这可能是字母或单词(字符串)或数字。变量可以帮助我们在脚本中添加具有可变值的功能。
此演示脚本是为了扫描打开了 5505 端口的计算机。然后创建一个报告,其中包含打开此端口的所有 IP 地址。
如果我们想修改这个脚本,让它提示我们或任何用户输入要扫描的 IP 地址范围和要查找的端口,该怎么办?如果只是提示我们输入这些值,然后将它们输入到脚本中,使用起来会不会更容易?
让我们看看我们如何做到这一点。
第 9 步:向我们的脚本添加提示和变量
首先,我们可以用 IP 范围替换指定的子网。我们可以使用名为“FirstIP”的变量和名为“LastIP”的第二个变量来完成此操作(变量的名称无关紧要,但最佳实践是使用有助于记住它所包含内容的变量名称)。
接下来,我们可以将端口号替换为名为“port”的变量。这些变量将只是存储区域,用于保存用户在运行扫描之前输入的信息。
接下来,我们需要提示用户输入这些值。我们可以使用上面在编写 HelloHackersArise 脚本时学到的 echo 命令来做到这一点。
因此,我们可以简单地回显“输入起始 IP 地址:”,这将出现在屏幕上,要求用户在他们的扫描中输入第一个 IP 地址。
echo "输入起始IP地址:"
现在,在屏幕上看到此提示的用户将输入第一个 IP 地址。然后我们需要一种方法来捕获用户的输入。我们可以通过在 echo 行后面加上 read 命令和变量名来做到这一点。read 命令获取在键盘 (stdin) 上输入的值并将其放入后面的变量中。
read FirstIP
上述命令会将用户输入的 IP 地址放入变量 FirstIP 中。然后我们可以在整个脚本中使用 FirstIP 中的该值。
当然,我们可以对每个变量做同样的事情,首先提示用户输入信息,然后使用 read 命令来捕获它。
接下来,我们只需要在脚本中编辑 nmap 命令以使用我们刚刚创建和填充的变量。当我们想要将值存储在变量中时,我们可以简单地在变量名称前加上 $,例如 $port。因此,要使用 nmap 扫描从第一个用户输入 IP 到第二个用户输入 IP 的 IP 地址范围并查找用户输入的端口,我们可以像这样重写 nmap 命令:
nmap -sT $FirstIP-$LastIP -p $port
现在,在编写脚本时,它将扫描从 FirstIP 开始并以 LastIP 结束的 IP 地址范围,以查找用户输入的端口。现在让我们保存我们的脚本文件并将其命名为 Scannerscript。
第 10 步:使用用户输入变量运行它
现在我们可以运行简单的扫描程序脚本,其中的变量告诉脚本要扫描的 IP 地址范围和端口,而无需编辑脚本。
kali > ./Scannerscript
它会提示我们输入第一个 IP 地址,然后是最后一个 IP 地址和我们要扫描的端口。收集这些信息后,它会进行 nmap 扫描并生成一份报告,其中包含我们指定的开放端口范围内的所有 IP 地址。