2.2.3 自动化的Web爬行

我们花费了大量的时间列举剖析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将网站内容镜像到本地硬盘