术语&概念
在开始我们的黑客 Linux 基础知识奇妙世界之旅之前,我想介绍几个术语,这些术语应该澄清本章后面讨论的一些概念。
二进制文件:此术语是指可以执行的文件,类似于 Windows 中的可执行文件。 二进制文件通常位于/usr/bin 或 usr/sbin 目录中,包括 ps,cat,ls 和 cd 等实用程序(我们将在本章中介绍所有四个)以及无线应用程序黑客工具 aircrackng 和入侵检测系统(IDS)Snort。
区分大小写:与 Windows 不同,Linux 区分大小写。 这意味着 Desktop 与 desktop 不同,与 DeskTop不同。 其中每个都代表不同的文件或目录名称。许多来自 Windows 环境的人都会发现这令人沮丧。 如果您收到错误消息“找不到文件或目录”(“ file or directory not found ”),并且您确定文件或目录存在,则可能需要检查您的大小写。
目录:这与 Windows 中的文件夹相同。目录提供了一种组织文件的方式,通常是采用分层方法。
Home :每个用户都有自己的/ home 目录,这通常是默认情况下保存您创建的文件的位置。
Kali Linux :是专为渗透测试而设计的 Linux 发行版。它预装了数百种工具,可以节省您自己下载和安装它们所需的时间。在撰写本文时,我将使用最新版本的 Kali:Kali 2018.2,于 2018 年 4 月首次发布。
root :与几乎所有操作系统一样,Linux 拥有管理员或超级用户帐户,专为可以在系统上执行任何操作的受信任人员使用而设计。这包括重新配置系统,添加用户和更改密码等内容。在 Linux 中,该帐户称为 root。作为黑客或测试者,您通常会使用 root 帐户来控制系统。实际上,许多黑客工具都要求您使用 root 帐户。
脚本:这是在解释环境中运行的一系列命令,可将每行转换为源代码。许多黑客工具都是简单的脚本。 脚本可以使用 bash 解释器或任何其他脚本语言解释器运行,例如 Python,Perl 或 Ruby。Python 是目前黑客中最受欢迎的解释器。
Shell:这是一个在Linux中运行命令的环境和解释器。最广泛使用的shell是bash,它代表Bourneagain shell,但其他流行的shell 包括 C shell 和 Z shell。我将在本书中专门使用 bash shell。终端(Terminal)这是命令行界面(CLI)。
有了这些基础知识,我们将尝试有条不紊地强化成为黑客或渗透测试人员所需的基本 Linux 技能。
Kali之旅
一旦你启动 Kali,你就会看到一个登录界面,如图 1-1 所示。使用 root 帐户用户名 root 和默认密码 toor登录。
您现在应该可以访问您的 Kali 桌面(如下图)。 我们将快速查看桌面的两个最基本的方面:终端接口和文件结构。
PS:这里我换了一个壁纸,不过没关系,不影响系统的使用
终端
使用 Kali 的第一步是打开终端,这是我们将在本书中使用的命令行界面。在 Kali Linux 中,您将在桌面底部找到终端的图标。双击此图标以打开终端或鼠标右键之后打开终端即可 。您的新终端应如下所示。
此终端打开命令行环境(称为 shell),使您可以在底层操作系统上运行命令并编写脚本。虽然 Linux 有许多不同的 shell 环境,但最受欢迎的是 bash shell ,它也是 Kali 和许多其他 Linux 发行版中的默认 shell。要更改密码,可以使用命令 passwd 。
Linux 文件系统
Linux文件系统结构与Windows有些不同。Linux在文件系统的基础上没有物理驱动器(例如C:驱动器),而是使用逻辑文件系统。在文件系统结构的最顶层是/,它通常被称为文件系统的根,就好像它是一个倒置树(见图 1-4)。请记住,这与 root 用户不同。这些术语起初可能看起来令人困惑,但是一旦习惯了 Linux,它们就会变得更容易区分。
文件系统的根(/)位于文件系统目录树的顶部,以下是要了解的最重要的子目录:
- /root root 用户的主目录
- /etc 通常包含 Linux 配置文件 - 控制程序启动时间和方式的文件
- /home 用户的主目录
- /mnt 将其他文件系统附加或安装到文件系统的位置
- /media CD 和 USB 设备通常连接或安装到文件系统的位置
- /bin 其中包含应用程序二进制文件(相当于 Microsoft Windows 中的可执行文件)
- /lib lib 库文件(与 Windows DLL 类似的共享程序)
在开始之前,知道在执行例行任务时不应该以 root 用户身份登录也很重要,因为当你以 root 身份登录时,任何攻击你的系统的人(是的,黑客有时会被黑客入侵)会立即获得 root 权限,从而“拥有”你的系统。在启动常规应用程序,浏览 Web,运行 Wireshark 等工具时以常规用户身份登录。
LINUX 基本命令
首先,让我们看看一些基本命令,它们将帮助您在 Linux 中启动和运行
用 pwd 查看当前目录
与在 Windows 或 macOS 等图形用户界面(GUI)环境中工作的情况不同,Linux 中的命令行并不总是能够明确显示您当前所在的目录。要导航到新目录,通常需要知道你现在的位置。显示当前工作目录使用命令 pwd 。在目录结构中的位置输入 pwd 。在您的终端输入密码以查看您的所在目录位置:
在这种情况下,Linux 返回/root,告诉我当前在 root 用户的目录中。并且因为您在启动 Linux 时以 root用户身份登录,所以您也应该位于 root 用户的目录中,该目录位于文件系统结构顶部(/)的一级目录。如果您在另一个目录中,pwd 将返回该目录名称。
使用 whoami 查看登录用户
在 Linux 中,超级用户或系统管理员名为 root,它具有添加用户、更改密码、更改权限等所需的所有系统权限。显然,您不希望任何人有能力进行此类更改;您希望有人可以信任并且对操作系统有正确的了解。作为黑客,您通常需要拥有所有这些权限来运行您需要的程序和命令(除非您拥有 root 权限,否则许多黑客工具将无法运行),因此您需要以 root 用户身份登录。如果您忘记了以root用户身份还是以其他用户身份登录,则可以使用 whoami 命令查看您登录的用户:
如果我以其他用户身份登录,那么 whoami 会返回你登录的用户的用户名!
浏览 Linux 文件系统
从终端导航到文件系统是一项重要的 Linux 技能。要完成任何工作,您需要能够寻找位于其他目录中的应用程序、文件和目录。在基于 GUI 的系统中,您可以直观地看到目录,但是当您使用命令行界面时,结构完全基于文本,导航文件系统意味着使用某些命令。用 使用 cd 更改目录要从终端更改目录,请使用更改目录命令 cd 。例如,以下是如何进入用于存储配置文件的/ etc 目录:
提示符更改为 root @ kali:/etc/ ,表示我们位于/ etc 目录中。我们可以通过输入 pwd 来确认:
要在文件结构中向上移动一级(朝向文件结构的根目录,或/),我们使用 cd 后跟双点(..),如下所示:
这会将我们从/ etc 升级到/ root 目录,但您可以根据需要向上移动多个级别。只需使用相同数量的双点对(..)作为要移动的级别数:
- 使用 .. 向上移动一级。
- 使用 .. .. 向上移动两级目录。
- 使用 .. .. .. 向上移动三级,依此类推。
使用 ls 列出目录的内容
要查看目录(文件和子目录)的内容,我们可以使用 ls (list)命令。这与 Windows 中的 dir 命令非常相似。
此命令列出目录中包含的文件和目录。您也可以在任何特定目录上使用此命令,而不仅仅是您当前所在的目录,方法是在命令后列出目录名称,例如, ls /etc 显示/etc 目录中的内容。要获取有关文件和目录的更多信息,例如它们的权限、所有者、大小以及上次修改它们的时间,可以在 ls 之后添加 -l 参数(l 代表 long)。这通常被称为长列表。我们来试试吧:
如您所见, ls -l 为我们提供了更多信息,例如对象是文件还是目录、链接数、所有者、组、大小、创建或修改时的时间及其名称。我通常在 Linux 中进行列出文件列表时添加-l 参数,但是每个参数都需要自己添加。我们将在第 5 章中
详细讨论 ls -l 。
Linux 中的某些文件是隐藏的,不会通过简单的 ls 或 ls -l 命令显示。要显示隐藏文件,请添加小写 -a参数,如下所示:
获取帮助
几乎每个命令,应用程序或实用程序都在 Linux 中有一个专用的帮助文件,为其使用提供指导。例如,如果我需工具 nmap 的帮助,我只需输入nmap 命令,然后输入 - help 命令:
请注意这里的双破折号( - )。Linux 中的约定是在单词类选项参数之前使用双短划线( - ),例如帮助,在单字母选项参数之前使用单个短划线( - ),例如-h。输入此命令时,您应该看到该工具的简短描述以及如何使用它的指导。在某些情况下,您可以使用-h或 -? 转到帮助文件 例如,如果我在使用黑客最好的端口扫描工具nmap时需要帮助,我将输入以下内容:
使用 man 引用手册页
除了帮助信息之外,大多数命令和应用程序都有一个手册(man)页面,其中包含更多信息,例如命令或应用程序的描述和概要。只需在命令、实用程序或应用程序之前键入 man 即可查看手册页。例如,要查看 nmap 的手册页,请输入以下内容:
搜索查找
在你熟悉 Linux 之前,找到自己的方法会很令人沮丧,但是对一些基本命令和技术的了解将大大有助于使命令行更加友好。以下命令可帮助您从终端查找内容。
使用 locate 搜索
可能最容易使用的命令是 locate 。接下来是一个关键字,表示您想要查找的内容,此命令将遍历整个文件系统并找到该单词的每个匹配项。例如,要查找 nmap,请输入以下内容:
但是, locate 命令并不完美。有时,定位的结果可能是压倒性的,给你太多的信息。此外, locate 使用的数据库通常每天只更新一次,因此如果您刚刚在几分钟或几小时前创建了一个文件,它可能会在第二28天才显示在此列表中。了解这些基本命令的缺点,以便您可以更好地决定何时最好使用每个命令。
用 whereis 查找二进制文件
如果您要查找二进制文件,可以使用 whereis 命令找到它。此命令不仅返回二进制文件的位置,还返回其源和手册页(如果可用)。以下是一个例子:
用 which 在 PATH 变量中查找二进制文件
which 命令更具体:它只返回 Linux 中 PATH 变量中二进制文件的位置。我们将在第 7 章中更仔细地查看 PATH 变量,但是现在知道 PATH 保存操作系统查找在命令行执行的命令的目录就足够了。例如,当我在命令行上输入nmap 时,操作系统会查看 PATH 变量以查看它应该在哪些目录中查找 namp:
使用 find 执行更强大的搜索
find 命令是搜索实用程序中功能最强大且最灵活的。它能够在任何指定的目录中开始搜索,并查找许多不同的参数,当然包括文件名,还包括创建或修改的日期,所有者,组,权限和大小。这是 find 的基本语法:
find directory options expression
因此,如果我想在根目录中搜索一个名为 apache2(开放源码 web 服务器)的文件,我将输入以下命令:
find 命令从文件系统(/)的顶部开始,遍历每个目录,在文件名中查找 apache2,然后列出找到的所有实例。正如您可能想象的那样,在每个目录中查找的搜索可能很慢。加快速度的一种方法是只查看您希望找到所需文件的所在目录。在这种情况下,比如我们正在寻找配置文件,因此我们可以在/etc 目录中开始搜索,而 Linux 只会搜索其子目录。
快速查看通配符
假设我们正在搜索包含 cat , hat , what 和 bat 的文件目录。 则通配符?用于表示单个字符,因此搜索?at 会找到 hat , cat 和 bat 而不是 what,因为在此文件名 ?at 中前面有两个字母。[]通配符用于匹配方括号内显示的字符。例如,搜索[c , b]at 会匹配 cat 和 bat 而不是 hat 或别的什么。最常用的通配符是星号(*),它匹配任何长度的任何字符,从无字符到无限数量的字符。例如,搜索* at 会找到 hat , cat,bat 及what。
用 grep 过滤
通常在使用命令行时,您需要搜索特定关键字。 为此,您可以使用 grep 命令作为过滤器来搜索关键字。当输出从一个命令传到另一个命令时,通常使用 grep 命令。我在之前介绍了管道,但是现在,只要说 Linux(和 Windows 就此问题)允许我们获取一个命令的输出并将其作为输入发送到另一个命令就足够了。这叫做管道,我们使用 | 命令符号执行此操作(|键通常位于键盘上的 ENTER 键上方)。ps 命令用于显示有关计算机上运行的进程的信息。我们将在第 6 章中更详细地介绍这一点,但是对于这个示例,假设我想看到我的 Linux 系统上运行的所有进程。在这种情况下,我可以使用 ps (进程)命令,然后使用 aux 参数来指定要显示的进程信息,如下所示:
这为我提供了在这个系统中运行的所有进程的列表 - 但是如果我只是想找到一个进程来查看它是否正在运行呢?我可以通过将 ps 的输出信息,管道输出到 grep 并搜索关键字来完成此操作。例如,要查明 apache2服务是否正在运行,我将输入以下内容。
此命令告诉 Linux 显示我的所有服务,然后将该输出发送到 grep ,后者将查看关键字 apache2 的输出,然后仅显示 apache2 相关的输出,从而为我节省了大量时间和视力。
修改文件和目录
找到文件和目录后,您将希望能够对它们执行操作。在本节中,我们将介绍如何创建文件和目录,复制文件,重命名文件以及删除文件和目录。
1、创建文件
有许多方法可以在 Linux 中创建文件,但是现在我们只看两个简单的方法。第一个是 cat ,它是连接(concatenate)的缩写,意思是将各个部分组合在一起(不是你最喜欢的驯养猫科动物 cat)。 cat 命令通常用于显示文件的内容,但也可用于创建小文件。要创建更大的文件,最好在文本编辑器(如 vim,emacs,leafpad,gedit 或 kate)中输入代码,然后将其另存为文件。
用使用 cat 连接
cat 命令后跟一个文件名将显示该文件的内容,但是为了创建一个文件,我们遵循带有重定向的 cat 命令,用 > 符号表示,以及我们想要创建的文件的名称。以下是一个例子:
用touch 创建文件
文件创建的第二个命令是 touch 。此命令最初开发是用来用户只需 touch 文件即可更改其某些详细信息,例如创建或修改日期。但是,如果该文件尚不存在,则此命令默认情况下会创建该文件。让我们用 touch 创建一个文件名为 newfile:
2、创建目录
在 Linux 中创建目录的命令是 mkdir ,它是创建目录(make directory)的缩写。要创建名为 newdirectory的目录,请输入以下命令:
要导航进入到这个新创建的目录下,只需输入:
3、复制文件
要复制文件,我们使用 cp 命令。这会在新的目录位置创建文件的副本,并保留旧文件。在这里,我们将使用 touch 在根目录中创建一个文件 oldfile,并将其复制到/root/newdirectory,在进程中重命名并保留原始 oldfile:
4、重命名文件
不幸的是,Linux 没有专门用于重命名文件的命令(如 Windows 和其他一些操作系统那样),但它确实有 mv (move)命令。
mv 命令可用于将文件或目录移动到新的目录位置,或者只是为现有文件指定一个新名称(重命名)。要将 newfile 重命名为 newfile2,请输入以下内容:
现在当您列出( ls )该目录时,您会看到 ile2 而不是 file1,因为它已被重命名。你可以对目录做同样的事情。
5、删除目录
删除目录的命令类似于删除文件的 rm 命令,但附加了 dir (用于目录),如下所示:
需要注意 rmdir 不会删除非空的目录,但会给你一条警告信息“目录不为空”(Directory notempty),如本例所示。在删除目录之前,必须先删除该目录下的所有内容。这是为了阻止您意外删除您不想删除的对象文件。如果你想一次性删除一个目录及其下的内容,你可以在 rm 之后使用 -r 参数,如上所示!但需要注意的是:要小心使用 -r 选项和 rm ,至少在开始时,因为错误地删除有价值的文件和目录非常容易。例如,在主目录(/)中使用 rm -r 会删除那里的每一个文件和目录 – 这不是你想要的致命性的动作。