Kali Linux学习笔记

参考资料:Learning Kali Linux by Ric Messier(O’Reilly). Copyright 2018 Ric Messier, 978-1-492-02869-7

Kali Linux目前是一个基于debian的发行版,它专注于安全测试相关的方方面面,并提供了一系列的专业工具供测试人员使用。这篇笔记包含以下几个方面:

  • Kali Linux 入门
  • 网络安全测试基础
  • 侦察
  • 寻找漏洞
  • 自动化漏洞利用
  • Metasploit进阶
  • 无线安全测试
  • Web应用测试
  • 破解密码
  • 高级技术
  • 报告

这篇笔记中,将简要记录相关资料。

0x01.Linux基础

Linux是一个面向多用户的操作系统内核,基于Linux内核,世界上有着众多Linux发行版,如Ubuntu,Open BSD,Debian,Deepin Linux等。Kali 是一个基于Debian的发行版,包含有很多计算机安全相关工具。下面涉及到的,是Linux的基本使用方法。有使用经验的读者可以跳过/速览此部分

0x01a.文件操作

Linux文件系统结构同UNIX一样,具有通用布局。系统中的磁盘都会归于/(根文件夹)目录下。在根文件夹下通常有以下几个公共目录:

  • /bin 单用户模式下引导系统时必须可用的命令/二进制文件
  • /boot 系统引导文件,包括引导加载器的配置,内核,以及启动内核所需的初始ramdisk文件
  • /dev 伪文件系统,包含用于程序访问硬件设备的条目
  • /etc 与操作系统和系统服务相关的配置文件
  • /home 包含用户主目录的目录
  • /lib 包含任何程序都可用使用的共享代码和函数的库文件
  • /opt 可选的第三方软件
  • /proc 伪文件系统,包含与运行进程有关的文件,包括内存映射,用于以运行程序的命令行,以及与程序相关的其他基本系统信息
  • /root root用户的根目录
  • /sbin 系统二进制文件,同时也需要在单用户模式下可用
  • /tmp 存放临时文件的文件夹
  • /usr 只读用户数据(包括bindoclibsbin和共享子目录)
  • /var 变量数据,包含运行进程、日志文件、运行时数据,以及其他临时文件的状态信息。在系统运行期间,这些文件的大小和存续都会发生变化

启动Kali,然后用你的账户登录。默认会进入图形化界面。此时你需要使用Ctrl+Shift+T(或者在左上角菜单中找到终端并点击)来打开终端(Terminal)。

终端是和系统/软件交互的重要工具,即使只使用图形化工具也应当熟悉,因为大部分工具的命令行版本更加易用,有时也能看到图形界面无法查看的日志信息。

在终端中,输入程序名称以运行程序。输入部分名称并按Tab可以补全指令,上下键可以查看指令历史记录。

可以看到,每一行的开头通常包括username@hostname:[workdir]。其中,username表示当前用户名,hostname表示主机名,workdir表示当前所在的目录。

要查看当前目录下的文件,输入ls并回车。这表示使用ls程序查看当前目录下的文件列表。程序可以附加参数,输入ls -la以长列表(-l)形式显示所有(-a)文件。这条指令中的-la就是附加的参数,它也可以写成-l -a的形式。

  • cd [目录路径] 切换到指定路径。.表示当前路径,..表示上一层路径
  • touch [文件路径] 修改文件的访问时间为此刻(和字面意思一样,“摸”一下文件),不存在则创建空文件
  • chmod (-R) OOO [路径] 修改文件/文件夹权限,三位从左到右:读r写w执行x,三位合并为8进制数,权限有三组,所有者,组,访客(所有人),对应三位8进制数。flag-R表示递归(Recursive),表示更改文件夹和其下所有子文件
  • locate [文件名] 查找数据库获得文件位置
  • witch [文件名] 查找path变量中的可执行程序
  • find [dir] -name [filename] [-print] 递归查找文件,支持正则(需用双引号包围表达式)
  • rm [-r] [路径] 删除文件/文件夹。删除文件夹时,需要使用-r参数。删除前务必确认删除对象是否正确!!!

0x01b.其他常用指令

终端还有其他实用工具,它们涵盖进程管理、权限管理、用户管理、网络工具等相当全面的工具。以下列举几个:

  • cat [文件路径] 输出文件内容到终端
  • ps 获取进程列表
  • man 获取帮助手册
  • top 获取进程列表,使用qCtrl+C退出
  • kill -9 [pid] 终止进程
  • killall [pid/进程名] 终止进程
  • adduser/useradd 创建用户

终端的更多用法有大量其他专业资料,此处不再赘述。

0x02.网络安全测试基础

0x021.安全测试

在提到安全测试之前,需要知道安全性的定义。这通常包含三个基本要素:机密性、完整性和可用性。任何影响系统/软件这些方面之一的内容都会影响软件或系统的安全性。安全测试并不局限于渗透测试提供的观察视角。

0x022.网络安全测试

  • 监控的重要性 保证服务和硬件正常运行 可以用nagios监控进程和硬件使用率
  • 报告有助于重现问题
  • 可以用nc/telnet手动测试服务端口

0x0211.压力测试

一些软件/硬件难以处理大负载的流量。引起这的原因多样,因此,必须预先测试系统以保证负责的系统不会在发生不良事件时瘫痪。下面有几种相关工具:

fragroute 用于破坏和操作来自自己系统的数据包,并将其发往指定IP。下面是一组配置,用于模拟错误的数据包:

1
2
3
4
5
6
ip_chaff dup 7
ip_frag 64 new
drop random 33
dup random 40
order random
print

上述配置文件中,第一行声明IP数据包应当重复交错。7表示生存事时间字段的值为7跳。这会使得数据包在传输的过程中丢失。第二行表示以64字节为单位对IP数据包进行分段。new表示让fragroutes使用新数据而不是旧数据对数据包进行重叠。有33%的情况将会丢弃数据包,有40%的情况会随机复制数据包。fragroute也会随机化数据包命中线缆的顺序,这意味着在理想情况下,它到达端点时,正确序列中将不存在任何内容。最后,print表示相关细节会被打印出来,说明对收到的数据包执行的操作。

将上述文件另存为frag.rules中,在终端中切换到该文件所在路径,并键入fragroute -f frag.rules 192.168.5.40,回车,即可开始测试目标是否能正确处理错误的数据包。

上述指令中,frag.rules是配置文件名,192.168.5.40是发送乱码流量的目标地址。可以根据实际情况更改参数。

hping3 是一个压力测试工具,用于测试系统处理网络堆栈,硬件,传输层的能力。系统会为TCP连接保留一小块内存,一般很难发生溢出。

1
hping3 --flood -S -p 80 192.168.86.1

上述指令演示了利用hping3进行SYN洪水测试的方法。-S表示SYN消息,-p 80表示80端口,--flood表示泛洪模式。

inviteflood 用于发动SIP洪水攻击。

1
inviteflood eth0 kilroy dummy.com 192.168.86.238 150000

上面表示,指定inviteflood作为发送信息的接口。接下来是用户名和相关域名,也可能是IP地址。

对于IPV6,Kali也提供了相应的测试工具:na6,ns6,ra6,rs6,tcp6等。

压力测试时,尽可能多地保留说明信息。

0x0212.拒绝服务工具

slowhttptest Kali提供了其以模拟Slowris攻击。除此以外,它还可以发动R-U-Dead-Yet攻击、Apache Killer攻击等。

thc-ssl-dos 提供了基于SSL的压力测试。其基本想法是加密计算成本高昂,尤其在服务端更是如此。

DHCPig 可以发动DHCP攻击:在客户之前取得到期租约,以此耗尽DHCP服务器中可用的资源,让客户在无法获得IP的状态下处于离线状态。运行pig.py选择目标即可。

0x023.加密测试

加密领域面对的挑战是:双方在不能面对面交流的时候,如何交换密钥来加密传递信息?这很困难。目前广泛使用的协议是TLS协议,即便如此,它也经过了数个版本的更迭。

sslscan 用于检查服务器是否使用过时协议。用法很简单:sslscan [ip]

输出结果将确定服务器是否会收到Heartbleed漏洞的攻击,该漏洞会针对服务器/客户端加密,导致密钥暴露给用户。同时,sslscan会为我们提供支持的密码列表。第一列表示协议和密码套件是否被接受以及他们是否为首选项。你会注意到TLS的每个版本都有自己的首选密码套件。第二列是协议和版本;接下来的列表示密钥强度。随后的列是密码套件,这称呼是因为它考虑了具有不同用途的多种算法。例如:DHE-RSA-AES256-SHA256,这表示它使用Diffie-Hellman方法进行临时的密钥交换。随后的RSA是一种非对称加密算法,用于验证通信的双方,因为密钥还存放在包含服务器验证信息的证书中。如果客户端也有该证书,则可以相互进行身份认证。否则,客户端可以根据要访问的主机名和证书中列出的主机名对服务器进行身份验证。非对称加密还用于加密客户端和服务器之间发送的密钥。

AES是加密会话的算法。这意味着用于会话的密钥是256位的。它是初始会话被派生和共享的密钥。如果会话持续的时间足够长,则可以重新创建会话密钥以防止密钥派生攻击。密钥被会话双方用于加密和解密。

SHA256算法用于验证数据是否被更改,和MD5类似。

所有这些算法构成TLS协议和之前的SSL协议。

如果输出中有类似3DES的内容,那么将会获得一个服务器会话密钥容易受到攻击的示例。这可能导致密钥泄露,继而相关的文件被解密成纯文本,造成信息泄露。

极个别情况下,我们可能在AES256的位置看到NULL值,这意味着请求没有使用加密协议。其原因较为复杂,可能是用户不太关心传输内容。

0x024.捕获数据包

事实上,我们所做的是捕获数据帧。因为我们捕获的层是OSI网络模型的第二层,第三层的数据则被称为数据包,第四层根据协议称为数据报文或段。

tcpdump 是Linux上的数据包捕获重程序。直接运行tcpdump会产生DNS请求和响应,它默认会将源地址和目标地址的IP转换为主机名,加上-n参数可以禁用该转换。

这程序还支持-v选项以显示更为详细的输出。同时,它支持多个-v选项,最详细的级别是-vvv。同时,使用-w [文件名]选项可以将数据帧捕获到数据包捕获(pcap)文件中,然后就可以将其导入其他工具进行分析。

tcpdump的另一个重要特性就是伯克利数据包过滤器(BPF),这组字段允许用户对正在捕获的数据包做限定。用法是,在tcpdump指令后附加一系列参数,并用andor等布尔逻辑词连接他们。支持的参数有:port [端口号]tcp/udp/icmpsrc host/dst host [主机名/IP]等一系列,详见man tcpdump

捕获完成后,需要对数据帧进行分析。你会发现这很麻烦,因为帧太多了。所以借助其他工具是十分必要的。

Wireshark 是最好的分析工具之一。它也可以捕获自身的数据包并存储并生成pcap文件。它提供了一种深入挖掘数据包内容的方法,因此学习用它捕获数据包不是重点,用它分析数据包才是。

使用Follow TCP Stream,我们可以查找我们感兴趣的数据帧。它会为我们做大量的分析工作,比如将客户端数据标红,服务端数据标蓝,将校验和不匹配的数据包标黑等等。

同时,Wireshark还提供了统计菜单,其中包含协议层次结构的统计图。它有助于识别未知的协议,并确定使用频次最高的协议,以及定位攻击来源等。

这款软件在Kali上是开箱即用的,不过也可以安装到其他系统上。作为一个实用工具,它有很大的价值,值得我们仔细学习。

0x025.病毒攻击

其实和病毒没啥关系?

现如今,很多网络都是交换式的。你的设备只会把消息发送到收件人所在的网络端口。在过去,交换机是单拨设备,但是集线器是广播设备,我们会用集线器。进入集线器中的消息都会被发送到集线器中的其他端口,让端点根据MAC地址确定数据帧属于谁。集线器只是一个转发器。

交换机则会读取第二层的首部信息来确定MAC地址。他知道拥有该MAC地址系统所在的端口,它是通过监控每个端口的流量实现上述功能的。源主机的MAC地址会附加到端口上,交换机通常将映射存储到CAM(内容寻址存储器)中。交换机并不是必须扫描整个列表,而是直接引用MAC地址来查找详细信息。该内容成为交换机引用的地址以获取端口信息。

这意味着,你可以配置你所在网络的交换机,把流量从一个或多个端口发送到另一个端口。这是一面镜子,而不是重定向。收件人获取流量,而你也将获得数据包,从而可以从无权访问的系统中收集信息。这就是欺骗攻击

ARP欺骗

ARP(地址解析协议)是一种简单的协议。假定你的系统需要在网络上通信,但它只有IP地址,它会向网络发送(宿主)请求。具有这IP地址的系统将会通过天填写MAC来响应。然后你的系统会得知正确的MAC地址,并将其保存的消息发送到正确的目的地。

你的系统会缓存它所看到的所有映射以提高效率。ARP假设系统表明它拥有IP地址的唯一时间是在有人询问时,然而事实并非如此。如果我让系统发送ARP响应说我拥有你的IP地址,并且任何尝试访问该IP地址的人都应该发送到我的MAC地址,我就会收到本该发送给你的消息。通过发送一个ARP响应,声明你的IP地址在我的MAC地址上,就会把我置于通信双方的中间位置。不过这是单向的,如果我的MAC地址欺骗了你的IP地址,我只会收到应该给你的消息。

为了得到会话另一端的信息,我需要欺骗其他地址。比如你可以欺骗本地网关,以便捕获你与互联网之间的所有通信。需要注意的是消息只会发送给我,我还必须将消息转发给预期目标,否则通信就会停止,因为人们没有收到他们预计会收到的信息。这要求我们的系统将初始消息转发给被攻击目标。

因为ARP缓存会超时,如果我们没有继续让系统转发这些消息,最终缓存会超时,以至于我们无法获得我们想要的信息。这意味着需要继续发送这些消息,即未要求的ARP消息。它是一个尚未被请求单仍然提供的消息。这行为有合理的理由,但是并不常见

我们将会使用Ettercap,它支持基于CLI的GUI,或者WIndows风格的GUI。除了ARP攻击,它还支持其他类型的第二层攻击,比如DHCP中毒和ICMP重定向攻击。它们都是让你从本地网络的其他系统中获取数据流量的方法。

DNS欺骗

捕获本地网络(LAN)之外流量的一种方法是使用DNS欺骗攻击。在此攻击中,你会干扰DNS查找,以确保目标主机解析域名为IP地址时,目标将获取你提供的IP地址。这种攻击也称缓存中毒攻击。我们通常会利用目标附近的DNS服务器,这通常是一个缓存服务器。

一旦你能访问缓存服务器,就可以对缓存进行适当的修改,将目标转向你控制的系统。你还可以通过编辑缓存向其中添加不存在的条目。但这要求你破坏远程DNS服务器。

在LAN中,借助dnsspoof程序,可以在本地模拟这一攻击。攻击者如果可以看到DNS请求,就可以捕获标识符并将其添加到攻击者提供的IP地址响应中。但是,要在交换式网络中做到这一点则需要额外步骤。

准备工作:你需要一个将IP地址映射到主机名的主机(hosts)文件。获得主机文件之后,就可以运行dnsspoof:

1
dnsspoof -i eth0 -f myhosts udp dst port 53

上面的-f选项引用了BPF来过滤捕获的数据包。同样,也可以借助Ettercap/arpspoof来完成这一点。

0x03.侦察

攻击之前,首先得确定攻击范围。就好比使用渗透工具时,得提供一组指定的参数。我们需要确定目标是什么,包括系统和人。为此,我们需要执行侦察任务。借助Kali的工具,我们可以大量收集关于公司及其员工的信息。

0x031.什么是侦察

它指一项收集信息的初步调查的活动。其定义一直以来都与军事活动有关系。收集信息时,最好不要产生太多“噪声”。我们需要在和目标保持一定距离的情况下收集信息。这需要灵活应对。

关于OPeration SECurity(运营安全),二战期间有一个类似的说法:“口风不严会导致沉船”。也就是说,与任务相关的信息都必须保密,任何信息泄露都有可能危及运营。

互联网的一个特点就是,你与其打交道的时间越长,留在它上面的信息就越多。这对于企业和个人都是如此。由于这些信息的重要性,已经产生了很多类似工具,使得我们可以更容易地获取它们。这不仅包含CLI工具,还包括网站,浏览器插件和其他程序。我们会关注一些Kali中可用的工具,以及一些可以添加到Firefox中的扩展。

0x032.开源智能工具

如今,基本上所有人在互联网上都留有痕迹,即使不注册社交软件也是如此。首先是任何有手机号的人都可以通过互联网被找到。

开源智能指的是,你从公共服务中找到的任何内容。比如无论是否可能被视为公开的政府记录,被视为公开信息来源的邮件列表档案。开源一词,不仅仅适用于软件,也同样适用于其他信息。

搜索引擎为我们提供了大量信息,学习使用它的技巧有助于我们过滤无关信息以节省大量时间。

对于员工信息,LinkedIn网站可以识别公司及员工的大数据挖掘资源库。求职网站也可以提供相关公司的大量信息。通过公司的招聘岗位,可以分析公司的基础架构类型。Twitter/Facebook/微博等社交网站也可以提供某个公司及其员工的一些信息。

Kali提供了检索这类信息的工具。程序可以自动从搜索引擎和其他Web网站提取大量信息。类似theHarvester这样的工具可以节省大量时间并且简单易用。Maltego这样的工具可以自动提取大量信息,并直观展示信息间的联系。

Google与黑客攻击

Google搜索引擎提供了一组用户可以修改搜索请求的关键字,从而可以查看更紧凑的查询结果。这种搜索有时被称作Google Dorks,使用关键字识别特定页面的整个过程被称为Google Hacking。有下列关键词可用:

  • site:keyword 匹配特定网站/域名,主机名可以省略。
  • filetype:keyword 匹配文件类型。
  • inurl:intext: 第一个只搜素关键字相关的网址,第二个只显示包含搜索词的文本。
  • cache: 从Google的缓存中提取网页。它可以获取已经关闭的网站的数据。

同时,可以使用ANDOR等布尔运算符来进一步组合限定搜索结果,还可以使用引号确保以正确的顺序获得单词模式。

自动化信息抓取

搜索十分耗时,Kali提供了一些工具来提高效率。

  • theHarvester 它能够从多个数据源搜索信息,包括Google,Bing,LinkedIn,Twitter,PGP等。
1
2
theharvester -d oreilly.com -b pgp    # 搜索用域名oreilly.com注册的PGP密钥
theharvester -d gmail.com -l 1000 -b linkedin # 搜索使用过Gmail的任何人

如果要多次搜索,可以编写个小脚本来减轻工作量。下面的脚本通过命令行中的几个域名对多个数据源进行搜索。

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python

import sys
import os

if len(sys.argv) < 2:
sys.exit(-1)

providers = ['google', 'bing', 'linkedin', 'pgp', 'google-profiles']

for a in providers:
cmd = 'theharvester -d {0} -b {1} -f {2}.html'.format(sys.argv[1], a, a)

上面的脚本对多个数据源进行搜索并将结果保存到相应的HTML文档中。

LinkedIn的数据(在国外)十分有用,因此我们使用InSpy对其进行检索:

1
inspy --empspy /usr/share/inspy/wordlists/title-list-large.txt oreilly

InSpy提供的单词列表只是由文本文件构成的。我们使用的是其中的头衔列表(title-list-large.txt)。你可以根据需要向其中添加关键字。

借助InSpy也能获取公司的技术列表:

1
inspy --techspy /usr/share/inspy/wordlists/tech-list-large.txt oreilly

注意,InSpy需要安装到Kali中才能使用。

Recon-NG

在设置完apikey之后,我们就可以用它的各个模块来搜索信息。使用show列出查询结果,reporting模块可以获取/导出数据库内容。

Maltego

这是一个GUI程序。其中有一些模块可供使用,通过machine,我们可以自动化使用模块完成搜索。

0x033.DNS侦察和Whois

DNS维护着一张域名-IP映射表,这使得我们不必维护一个庞大的主机表。DNS和RIRs(区域互联网管理机构)有关。

DNS侦察

区域互联网注册服务商

作者

xeonds

发布于

2022-10-30

更新于

2024-10-08

许可协议

评论