我们花费了大量的时间列举剖析Web应用及其基础支持架构的手工技术,希望这是Web应用剖析的一次“揭秘之旅”。和这些技术同样有趣的是,我们最早承认这些技术是麻木地重复进行的,特别是对于大应用。我们在整个讨论中已经多次暗示,有许多工具能够自动化并且大大简化这一过程。
我们已经指出,剖析中的一种基本而强大的技术是制作整个应用的一个本地副本,这个副本可供慢慢地仔细检查。我们称这一过程为Web爬行(Crawling),对于大规模的Web应用评估,Web爬行工具是绝对必要的。你的Web爬行结果将为攻击建立知识基线,这一基线是任何Web评估最重要的方面。你所收集的信息将有助于识别目标的整体架构,包括Web应用构造、输入点、目录结构等所有重要细节。Web爬行的其他关键作用包括:
·节省大量的手工劳动!
·提供所有应用组件容易浏览的、本地缓存的副本,包括静态页面、可执行文件、表单等。
·启用镜像内容之上的全局关键词搜索(想想“Password”和其他动人的搜索词)。
·提供能够很容易地揭示如目录、文件和参数的命名惯例等内容的高级快照。
Web爬行很强大,但是并非没有缺点。下面是它无法胜任的工作:
·表单: 爬虫程序是自动化的,常常不能处理设计用于人机交互的Web表单的填写。例如,网站可能有需要填写表单的多步骤账户注册过程。如果爬虫程序无法正确地完成第一个表单,就可能无法达到注册过程的后续步骤,从而将漏掉应用在成功完成注册时将要进入的特权页面。
·复杂流程: 通常,爬行能阐明目录、文件等的逻辑关系。但是有些具有非正统设计的网站可能对抗爬虫程序的简单诠释,并且要求人们手工地点击遍历网站。
·客户端代码: 许多Web爬虫程序在处理客户端代码时遇到困难。如果目标网站有许多JavaScript,很可能你将必须手工排查这些代码,得到应用工作方式的正确基线。这问题通常发生在免费和廉价的Web爬虫程序上。你将会发现许多高级的商业爬虫程序已经克服了这一问题。客户端代码的例子包括JavaScript、Flash、ActiveX、Java Applets和AJAX(异步Java和XML)。
·状态问题: 试图在网站中要求基于Web验证的一个区域中爬行是有问题的。大部分爬虫程序在被要求维持登录状态时遇到大问题。这可能导致基线被切断。应用维护状态的技术数不胜数。所以我们建议手工剖析网页中需要验证的部分,或者在目标网站需要维护状态时求助于Web安全评估产品。没有一种免费的爬虫程序能够胜任这一工作。
·破坏的HTML/HTTP: 许多爬虫程序试图在检查应用时遵循HTTP和HTML规范,但是主要的问题是没有一种Web应用遵循HTML规范。实际上,网站上的一个破坏的链接在一个浏览器中有效,而在另一个中却无效。在自动化产品确认代码损坏,并自动修复代码问题,使其采用Internet Explorer期望的方式工作时,这一问题始终存在。
·Web服务: 越来越多的应用被设计为低耦合的服务序列,传统的Web爬虫也就越来越难以确定域之间的关系和边界。许多现代的Web应用依赖基于Web的API提供数据给它们的客户。没有明确的关于如何执行的指南,传统的爬虫程序将不能正确地执行和映射API。
尽管有这些缺点,我们仍然极力建议将Web爬行作为剖析过程的一个重要部分。接下来,我们将讨论一些最受欢迎的Web爬行工具。
Web爬行工具
下面是我们最喜爱的帮助自动化应用调查中的繁重工作的工具。它们本质上都是蜘蛛,一旦指向一个URL,你就可以坐下来看着它们在你的系统创建一个镜像。记住,这并不是具有ASP源代码和数据库调用的目标网站的实用复制,而只是应用中每个可用链接的完全集合。这些工具进行大部分收集文件的繁重工作。
注意 我们将在第10章中讨论全部Web应用评估工具,包括爬行功能。
Lynx: Lynx是在许多UNIX系统上都能找到的基于文本Web浏览器。它提供一种快速浏览网站的方法,但是大量JavaScript将会阻止它。我们发现它的最佳用途是下载特定页面。
Lynx的“首选项”部分的-dump选项很有用。本质上,这个选项命令Lynx简单地转储网页的输出到屏幕并且退出。你可以重定向输出到一个文件。初看这似乎没什么用,但是lynx包含了嵌入页面HTML源代码中的所有链接列表。这对于列举链接以及查找带有长参数串的URL很有帮助。
[root@meddle]# lynx -dump https://www.victim.com > homepage [root@meddle]# cat homepage ...text removed for brevity... References 1. http://www.victim.com/signup?lang=en 2. http://www.victim.com/help?lang=en 3. http://www.victim.com/faq?lang=en 4. http://www.victim.com/menu/ 5. http://www.victim.com/preferences?anon 6. http://www.victim.com/languages 7. http://www.victim.com/images/
如果你希望看到HTML源代码而不是格式化的页面,那么使用-source选项。另外两个选项-crawl和-traversal将收集格式化的HTML并且存储到文件中。但是,这不是创建网站镜像的好办法,因为保存的文件不包含HTML源代码。
Lynx仍然是捕捉单个URL的杰出工具,它相对getit脚本的主要好处是使用-auth选项执行HTTP基本验证:
[root@meddle]# lynx -source https://www.victim.com/private/index.html Looking up www.victim.com Making HTTPS connection to 192.168.201.2 Secure 168-bit TLSv1/SSLv3 (EDH-RSA-DES-CBC3-SHA) HTTP connection Sending HTTP request. HTTP request sent; waiting for response. Alert!: Can't retry with authorization! Contact the server's WebMaster. Can't Access 'https://192.168.201.2/private/index.html' Alert!: Unable to access document. lynx: Can't access startfile [root@meddle]# lynx -source -auth=user:pass \ > https://63.142.201.2/private/index.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 FINAL//EN"> <HTML> <HEAD> <TITLE>Private Intranet</TITLE> <FRAMESET BORDER=0 FRAMESPACING=0 FRAMEBORDER=0 ROWS="129,*"> <FRAME NAME="header" SRC="./header_home.html" SCROLLING=NO MARGINWIDTH="2" MARGINHEIGHT="1" FRAMEBORDER=NO BORDER="0" NORESIZE> <FRAME NAME="body" SRC="./body_home.html" SCROLLING=AUTO MARGINWIDTH=2 MARGINHEIGHT=2> </FRAMESET> </HEAD> </HTML>
Wget: 该工具(www.gnu.org/software/wget/wget.html)是Windows和UNIX的命令行工具,可以下载网站的内容。它的用法很简单:
[root@meddle]# wget -r www.victim.com --18:17:30-- http://www.victim.com/ => 'www.victim.com/index.html' Connecting to www.victim.com:80... connected! HTTP request sent, awaiting response... 200 OK Length: 21,924 [text/html] 0K .......... .......... . 100% @ 88.84 KB/s 18:17:31 (79.00 KB/s) - 'www.victim.com/index.html' saved [21924/21924] Loading robots.txt; please ignore errors. --18:17:31-- http://www.victim.com/robots.txt => 'www.victim.com/robots.txt' Connecting to www.victim.com:80... connected! HTTP request sent, awaiting response... 200 OK Length: 458 [text/html] 0K 100% @ 22.36 KB/s ...(continues for entire site)...
-r或--recursive选项命令wget跟踪主页上的每个链接。这将创建www.victim.com目录并且用wget在网站上找到的每个HTML文件和目录进行填充。Wget的主要优点是跟踪每个可能的链接。因此,它将下载应用传递给页面的每个参数的输出。例如,网站的viewer.asp可能被下载4次:
·viewer.asp@ID=555
·viewer.asp@ID=7
·viewer.asp@ID=42
·viewer.asp@ID=23
@符号代表原始URL中的?分隔符。ID是传递给viewer.asp文件的第一个自变量(参数)。有些网站可能需要更高级的选项,如代理和HTTP基本验证支持。基本验证所保护的网站可以这样进行爬行:
[root@meddle]# wget -r --http-user:dwayne --http-pass:woodelf \> https://www.victim.com/secure/ --20:19:11-- https://www.victim.com/secure/ => 'www.victim.com/secure/index.html' Connecting to www.victim.com:443... connected! HTTP request sent, awaiting response... 200 OK Length: 251 [text/html] 0K 100% @ 21.19 KB/s ...continues for entire site...
Wget只有一个用途:从网站上读取文件。结果的筛选需要其他UNIX系统或者Windows Cygwin上简单的命令行工具。
Burp Suite Spider: Burp Suite是一组攻击工具,包含映射应用的一个实用程序。不需要手工跟踪链接、提交表单和解析响应,Burp Spider自动地收集这些信息,帮助识别Web应用中可能存在的脆弱功能。将需要爬行的网站添加到当前目标范围,然后简单地启用Spider功能之后使用Burp代理浏览应用。进一步的选项可以通过Options选项卡配置。
Teleport Pro: 当然,对于Windows用户来说总是有一些GUI。Teleport Pro(www.tenmax.com/teleport/pro/home.htm)为Wget的功能增加了图形界面,并且增加了收集信息的筛选工具。
使用Teleport Pro,你可以指定从一个URL的任何部分开始爬行,控制索引的文件深度和类型,并且在本地保存副本。这个工具的主要缺点是它将网站镜像为Teleport Pro项目文件。这种TPP文件无法使用grep之类的工具搜索。Teleport Pro如图2-8所示。
Black Widow: Black Widow扩展了Teleport Pro的功能,提供搜索和收集特定信息的界面。Black Widow的其他好处是能够下载文件到硬盘上的一个目录中。这个目录对于grep和findstr这类工具来更友好。Black Widow如图2-9所示。
Offline Explorer Pro: Offline Explorer Pro是一个商业Win32应用,允许攻击者下载不限数量的Web和FTP网站,以供之后的离线查看、编辑和浏览。它还支持HTTPS和多种验证协议,包括NTLM(只要在给定项目的File|Properties|Advanced|Passwords下的验证配置页中使用域名\用户名语法)。我们在本书会始终讨论Offline Explorer Pro,因为它是我们最喜爱的自动化爬行工具之一。
图2-8 Teleport Pro的许多选项
图2-9 Black Widow将网站内容镜像到本地硬盘