面向黑客的Linux,第7部分:BASH脚本基础 我认为黑客都必须有编写脚本的能力。Linux管理员都必须能够编写脚本。随着WindowsPowerShell的到来,越来越多的Windows管理员需要编写脚本来执行自动化任务并提高效率。我们经常需要自动化使用多个命令,有时来自多个工具。要成为一名黑客,您不仅需要具备高级的shell脚本编写技能,还需要能够使用一种广泛使用的脚本语言编写脚本,例如Ruby(Metasploit漏洞利用是用Ruby编写的)、Python(许多黑客工具都是Python脚本)或Perl(Perl是最好的文本操作脚本语言)。 我们将从基本的shell脚本开始,到高级的shell脚本,然后是这些脚本语言中的每一种,我们的最终目标是来开发我们自己顺手的工具。 第1步:shells的类型 shell是用户和操作系统之间的接口。这使我们能够运行命令、实用程序、程序、操作文件等。有许多不同的shell可用于Linux。其中包括Kornshell、Zshell、Cshell和Bourneagainshell(或BASH)。 由于几乎所有Linux和UNIX发行版(包括MacOSX和Kali)都可以使用BASHshell,因此我们将在这里专门使用BASHshell。 第2步:BASH基础知识 要创建一个shell脚本,我们需要从一个文本编辑器开始。您可以使用Linux中的任何文本编辑器,包括vi、vim、emacs、gedit、kate等,但我将在这些教程中使用Leafpad。 第3步:内置BASH命令 除了能够从BASHshell脚本运行任何系统命令、应用程序之外,BASHshell还包含一些它自己的命令。这些包括; :,。,break,cd,continue,eval,exec,exit,export,getopts,hash,pwd, readonly,return,set,shift,test,〔,times,trap,umaskandunset,alias,bind,builtin,command,declare,echo,enable,help,let,local,logout,printf,read,shopt,type,typeset,ulimitandunalias。 稍后的教程中介绍这些命令,这个shell已经内置了在BASHshell中具有它们的功能的命令。 第4步:注释 像任何编码一样,我们可能想要添加注释。注释只是对我们自己或任何其他阅读代码的人的注释,说明我们试图对脚本或脚本的该部分执行什么操作。解释器不会读取或执行这些注释或注释。 BASHshell通过在一行前面加上来启用注释,这是我的第一个脚本,我可以在我的文本编辑器中编写; 这是我的第一个脚本! 解释器将忽略之后的所有内容,然后移至下一行。 第5步:Hello,HackersArise! 我们将从一个简单的脚本开始,该脚本会向屏幕返回一条消息,上面写着Hello,HackersArise!。 我们首先输入shebang或!。这告诉操作系统,shebang后面的任何内容都是我们要用于脚本的解释器。 然后我们在shebang后面加上binbash,表明我们希望操作系统使用BASHshell解释器。我们可以使用其他解释器,例如PERL或Python,但这里我们要使用BASH解释器。 !binbash 接下来,我们输入echo,这是Linux中的一个命令,它告诉系统简单地重复或回显到我们的监视器(stdout)后面的内容。在这种情况下,我们希望系统向我们回显HelloHackersArise!。请注意,我们要回显的文本或消息是用双引号引起来的。 echoHello,HackersArise! 让我们将此文件保存为HelloHackersArise并退出我们的文本编辑器。 第6步:设置执行权限 当我们创建一个文件时,它不一定是可执行的,让我们通过在目录中输入lsl来查看新文件的权限。 我们的新文件具有rwrr(644)权限。该文件的所有者只有读(r)和写(w)权限,但没有执行(x)权限。该组和所有人都只有读取权限。我们需要修改它以赋予我们执行权限才能运行此脚本。我们使用chmod命令执行此操作。要授予所有者、组和所有执行权限,我们键入: kalichmod755HelloHackersArise 现在,当我们对文件进行长列表(lsl)时,我们可以看到我们具有执行权限。 kalilsl 第7步:运行HelloHackersArise 要运行我们的简单脚本,我们只需键入: kali。HelloHackersArise 文件名前的。告诉系统我们要在当前目录中执行这个脚本。这意味着不要查看该文件的PATH变量中的目录,而是只查看我的当前目录并运行HelloHackersArise当我们按下回车键时,我们非常简单的脚本会返回到我们的值 第8步:使用变量 现在我们有一个简单的脚本。它所做的只是回显一条消息。如果我们想创建更高级的脚本,我们可能需要添加一些变量。 变量只是我们可以在内存中保存某些内容的存储区域。可能是一些字母或单词(字符串)或数字。它可以帮助将功能添加到具有可能更改的值的脚本中。 此演示脚本是为了扫描开放了5505端口的电脑。然后创建一个报告结果,其中包含打开此端口的所有IP地址。 如果我们想修改这个脚本,让它提示我们或任何用户输入要扫描的IP地址范围和要查找的端口,该怎么办?如果只是提示我们输入这些值,然后将它们输入到脚本中,使用起来会不会容易得多? 让我们看看我们如何做到这一点。 第9步:向我们的脚本添加提示和变量 首先,我们可以用IP范围替换指定的子网。我们可以使用名为FirstIP的变量和名为LastIP的第二个变量来完成此操作(变量的名称无关紧要,但最佳做法是使用有助于记住它所包含内容的变量名称)。 接下来,我们可以将端口号替换为名为port的变量。这些变量将只是存储区域,用于保存用户在运行扫描之前输入的信息。 接下来,我们需要提示用户输入这些值。我们可以使用上面在编写HelloHackersArise脚本时学到的echo命令来做到这一点。 因此,我们可以简单地回显输入起始IP地址:这句话,这将出现在屏幕上,要求用户在他们的扫描中输入第一个IP地址。 echo输入起始IP地址: 现在,在屏幕上看到此提示的用户将输入第一个IP地址。然后我们需要一种方法来捕获用户的输入。我们可以通过在echo行后面加上read命令和变量名来做到这一点。读取命令获取在键盘(stdin)上输入的值并将其放入后面的变量中。、 读取FirstIP 上述命令会将用户输入的IP地址放入变量FirstIP中。然后我们可以在整个脚本中使用FirstIP中的该值。 当然,我们可以对每个变量做同样的事情,首先提示用户输入信息,然后使用读取命令来捕获它。 接下来,我们只需要在脚本中编辑nmap命令以使用我们刚刚创建和填充的变量。当我们想要将值存储在变量中时,我们可以简单地在变量名称前加上,例如port。因此,要使用nmap扫描从第一个用户输入IP到第二个用户输入IP的IP地址范围并查找用户输入的端口,我们可以像这样重写nmap命令: nmapsTFirstIPLastIPpport 现在,在编写脚本时,它将扫描从FirstIP开始并以LastIP结束的IP地址范围,以查找用户输入的端口。现在让我们保存我们的脚本文件并将其命名为Scannerscript。 第10步:使用用户输入变量运行它 现在我们可以运行简单的扫描程序脚本,其中的变量告诉脚本要扫描的IP地址范围和端口,而无需编辑脚本。 kali。Scannerscript 提示我们输入第一个IP地址,然后是最后一个IP地址和我们要扫描的端口。收集此信息后,它会进行nmap扫描并生成一份报告,其中包含我们指定的开放端口范围内的所有IP地址。