实战安全工程师训练佳品之WebGoat
WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并非程序中的bug,而是故意设计用来讲授Web应用程序安全课程的。这个应用程序提供了一个逼真的教学环境,为用户完成课程提供了有关的线索。
对 于每堂课,都对应于WebGoat应用程序中的一个实际的安全漏洞,为了能亲身实践如何利用这个漏洞,您首先需要具备该漏洞的有关知识,虽然 WebGoat应用程序本身提供了有关的简介,但是很可能需要查找更多的资料才能搞定这个漏洞,所以,它对于激发安全测试人员和开发人员来的学习兴趣和提 高安全知识的理解及动手能力方面,都是非常有帮助的。举个例子,在其中一个课程中,用户必须使用SQL注入来窃取(杜撰的)信用卡号。——51CTO王文 文:看到这个,由衷的感叹老外对网络安全教育的认真和开放的程度。
一、为什么要设计WebGoat
在 学习和实践Web应用程序安全知识时,我们所面临的一大难点是:到哪里去找可以练手的web应用程序呢?显然,明目张胆地扫描在线书店或者网络银行可不是 个好主意,小心警察叔叔会找上门来。此外,安全专业人员经常需要测试某些安全工具,以检查它们的功能是否如厂商所鼓吹的那般,这时他们就需要一个具有确定 漏洞的平台作为活靶子。但是,无论学习web测试,还是检查工具性能,都要求在一个安全、合法的环境下进行。即使你的意图是好的,但是在未经许可的情况下 企图查找安全漏洞也是绝不允许的。这时,WebGoat项目便应运而生了。
WebGoat 项目的主要目标很简单,就是为Web应用程序安全学习创建一个生动的交互式教学环境。将来,项目研究小组希望将WebGoat发展成为一个安全性基准测试 程序平台和一个基于Java的蜜罐网站。如果您有兴趣,也可以查阅这个项目的路线图,其中能够找到一些可以立即参与的任务。——51CTO王文文:是不是 挺像一个黑客游戏?既能过瘾又能练习网络安全技术,最重要的是不用去危害真实的网站。
二、WebGoat概要
WebGoat 是一个用来演示Web应用程序中的典型安全漏洞的应用程序,旨在在应用程序安全审计的上下文中系统、条理地讲解如何测试和利用这些安全漏洞。 WebGoat是用Java语言写成的,因此可以安装到所有带有Java虚拟机的平台之上。此外,它还分别为Linux、OS X Tiger和Windows系统提供了安装程序。部署该程序后,用户就可以进入课程了,该程序会自动通过记分卡来跟踪用户的进展。当前提供的训练课程有 30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符 串型SQL注入、web服务、Open Authentication失效危险的HTML注释……等等!
我们希望通过WebGoat帮助测试人员掌握以下技能:
◆理解web应用程序中的各种高级交互过程
◆确定出有助于发动攻击的客户端可见数据
◆识别和理解能将应用程序暴露在攻击之下的数据和用户交互
◆对这些交互进行测试,并暴露出它们的漏洞
◆攻击应用程序以演示和利用服务器的弱点
对于WebGoat来说,它的安装过程就是下载和解压缩,然后就可以使用了。然而,一些用户可能更喜欢下载war文件。下面就所有的安装方式分别做详细的说明。
四、WebGoat Developer版安装方法
WebGoat 5.2 Developer版(位于SourceForge网站),注意:这个版本旨在提供一个WebGoat实验室环境。如果您想开发自己的教学课程,请与Google code站点上的基线同步。
这 个开发人员版本除了包含标准版本外,还多了一个已配置的Eclipse环境。这个开发人员版本使用也会简单,下载、解压缩然后单击脚本即可。如果您仅仅希 望研究有关课程的话,它用起来跟标准版本没有什么区别。然而,如果希望组建实验室,或者在课堂上使用WebGoat的话,可以使用eclipse.bat 脚本来启动一个预配置的WebGoat环境。具体的使用说明,请参见自带的_HOW TO create the WebGoat workspace.txt_文件。
1.将Eclipse-Workspace.zip抽取至工作目录
2.双击eclipse.bat文件
3.在Eclipse右上角的包资源管理器中,右键单击WebGoat项目,并刷新
4.在Eclipse右上角的包资源管理器中,右键单击Servers项目,并刷新
5.在Eclipse 底部的服务器视图中,右键单击localhost服务器,并启动它
6.在浏览器中导航至http://localhost/WebGoat/attack。
7.源代码发生的任何变化,都会自动地引起编译操作,保存后会自动重新部署。
五、WebGoat War文件版安装方法
这 个版本将假定已经预先安装了WebGoat Standard版本,或者主机已经安装了java 1.5(或更高版本)和tomcat 5.5。如果您尚未安装Standard版本,那么就需要修改tomcat/conf/tomcat-users.xml文件来添加WebGoat用户, 具体请参阅http://code.google.com/p/webgoat/wiki/FAQ。
1.从WebGoat Downloads 链接下载WebGoat-OWASP_WAR-X.X.zip。
2.如果Tomcat正在运行的话,请先将其关闭——只需关闭Tomcat窗口即可。
3.将war文件拷贝至WebGoat-X.X/tomcat/webapps/webgoat.war
4.删除现有的WebGoat-X.X/tomcat/webapps/webgoat目录
(1).这会导致所有的课程状态被丢失
(2).若要保存课程状态,请保留webapps/webgoat/users文件夹的副本
(3).重新启动WebGoat之后恢复这个用户目录
5.切换至WebGoat-X.X目录
6.双击webgoat.bat文件
这时Tomcat窗口就会启动。
7.在浏览器中导航至http://localhost/WebGoat/attack。
六、所需其他工具
对于老道的应用程序安全审计人员来说,可用的辅助工具有很多。就我们这种类型的安全审计来说,最常用的工具就是本地代理和web/应用程序爬虫。为了完成全套WebGoat课程,web代理程序是必不可少的。
应用程序审计代理
一般的web代理通常都能接收、处理和转发客户和服务器之间的HTTP和HTTPS数据,这样就能让所有的web通信流量都流经某个点,以便通过高速缓存或者应用安全策略来监视利用率、提高性能,等等。
应用程序代理工具可用来拦截本地客户端的浏览器和服务器端之间所有的HTTP和HTTPS通信,它实际上充当了一个可以监视、检查和(最重要地)修改所有的交互的中间人角色。
通过这种工具,审计人员可以准确确定出在客户和服务器之间传递的到底是什么样的数据。此外,它们还可以对这些数据进行分析和修改,从而测试对应用程序的影响。
在WebGoat的许多课程中,应用程序审计代理或者具备同等功能的软件都是必不可少的。下列是我们推荐的工具:
◆WebScarab:WebScarab Project
◆BurpProxy- http://portswigger.net/
◆ParosProxy - http://parosproxy.org
应用程序爬虫
所 谓爬行一个站点,实际上就是识别和访问网站应用程序内所有预定的页面和链接,并建立本地副本;当然建立副本这一点通常是可选的。然后,我们就可以分析爬行 结果,得到应用程序内目标脚本、表单、页面和字段等组成的明细表供后面的测试之用。镜像下来的内容也可以用来分析有关信息,这样做要比人工或者在线分析要 快得多了。
下列是我们推荐的工具:
◆WebScarab:WebScarab Project
◆BurpSpider - http://portswigger.net
◆ParosProxy - http://parosproxy.org
七、WebGoat操作指南
开 始使用WebGoat之前,必须首先启动Tomcat,这可以通过Tomcat的bin目录中的脚本/批处理程序startup来完成。此外,要想正常使 用WebGoat,它必须具备作为服务器运行所需的权限,并允许一些不常见的web行为。当主机运行WebGoat时,WebGoat的安全漏洞会牵连到 主机,从而使主机很容易遭到攻击。如果机器连接到了互联网,那么就应该将其断开。运行的个人防火墙可能会阻止WebGoat的正常使用。所以,运行 WebGoat时需要禁用所有的个人防火墙。
我们可以通过浏览器浏览localhost的80端口访问Tomcat服务器,如http://127.0.0.1。
WebGoat位于WebGoat目录,其中的课程包含在http://127.0.0.1/WebGoat/attack中。
WebGoat应用程序施行基于角色的安全机制。登录对话请求会要求输入身份凭证,登录时,可以将guest作为用户标识和密码使用。
图1 登录页面 |
成功登录之后,Tomcat服务器将显示WebGoat的欢迎页面。
图2 欢迎页面 |
下面介绍WebGoat的基本操作。我们知道,无论应用程序安全审计的哪个阶段,都需要对目标的运作机制有深入的了解。这通常包括:
◆考察客户端内容,诸如HTML和脚本
◆分析客户和服务器之间的通讯
◆检查cookie及其他本地数据
浏览器已经使得查看HTML源代码变得非常轻松,而WebGoat又增加了多种操作,包括显示参数、显示HTML、显示Cookies和显示Java等。
图3 WebGoat显示HTML源代码 |
在 普通环境之下,浏览器只提供查看HTML源代码的功能部件,对于微软公司的Internet Explorer浏览器,可以通过“查看”菜单下的“源文件”选项来查看HTML源代码。对于Firefox浏览器来说,查看页面源码的功能同样位于“查 看”菜单下的“页面源代码”下。 WebGoat的显示HTML功能仅仅展示当前课程相应的HTML代码,而不包括侧栏和上栏对应的HTML代码。
图4 显示HTML源代码 |
这里,参数和cookie显示为红色。
图5 显示参数Cookies |
这里显示Java操作会弹出一个包含源代码的新窗口。
下面介绍如何使用代理,要想充分挖掘WebGoat的各种功能,我们需要借助以审计人员常用的应用程序审计代理程序。这有助于进行更深入的分析,并能修改客户端-服务器的交互和传输过程中的数据。由于不同的工具,其使用和配置方法也不相同,但基本概念是一致的:
◆应用程序审计代理必须位于客户端的浏览器和远程服务器之间。
◆它应该允许显示和修改传输中的所有HTTP数据。
该 工具通常会直接插入浏览器,或者在另一个本机端口进行侦听。当代理程序直接插入浏览器的时候,需要在浏览器中键入一个特殊的URL。当该工具侦听端口时, 则需要对浏览器进行相应的配置,方可正常使用该工具。在微软公司的Internet Explorer中,可以通过工具菜单完成配置工作,如下所示:
1. 选择工具菜单中的“Internet 选项”菜单项。
2. 选择“连接”选项卡。
3. 单击选项卡下方的“局域网设置…”按钮。
4. 在局域网设置对话框中,选中为LAN使用代理服务器的复选框。
5. 不选“对本地地址不使用代理服务器”框。
6. 输入代理工具将要侦听的地址和端口。对于WebScarab而言,其默认侦听端口是8008。
图6 局域网设置 |
现在,每当从客户端的浏览器接收或者发送数据时,我们都能通过拦截、分析和修改这些HTTP请求来测试应用程序,从而安全性缺陷。审计人员可以借助这类代理获得多种能力,包括:
◆不管GET/POST参数的隐藏状态如何,都可以对其进行修改。
◆无论是持久性还是非持久性的Cookie,当它们进入和离开浏览器时,我们都可以对其进行修改。
◆因为参数可以在发送给服务器之前进行即时修改,所以我们可以绕过所有的客户端数据验证。
◆能够暴露高速缓存的数据,以便于分析。
◆能够暴露出Server:及其他报头,这对于调查远程web服务器类型和所用的应用程序-服务器技术非常有利
八、WebScarab入门指南
WebScarab具有大量的功能,因而可能会让新用户有一种无从下手之感。为求简单起见,拦截和修改浏览器和HTTP/S服务器的请求和响应可以作为初学者很好的入门课,因为这无需学习太多的内容就可以完成。
首先,我们假定您能够自由访问因特网,也就是说,您并非位于一个代理之后。为简单起见,我们还假定您使用的浏览器是Internet Explorer。
图7 |
上面是WebScarab启动后的截图,其中有几个主要的区域需要介绍一下。首先要介绍的是工具栏,从这里可以访问各个插件,摘要窗口(主视图)和消息窗口。
摘 要窗口分成两个部分,上面部分是一个树表,显示我们访问的站点的布局,以及各个URL的属性。下面部分是一个表格,显示通过WebScarab可以看到的 所有会话,正常情况下它们以ID逆序排列,所以靠近表顶部的是最近的会话。当然,会话的排列次序是可以更改的,如果需要的话,只需通过单击列标头即可。
为了将WebScarab作为代理使用,需要配置浏览器,让浏览器将WebScarab作为其代理。 我们可以通过IE的工具菜单完成配置工作。通过菜单栏,依次选择选择“工具”菜单、“Internet 选项”、“连接”、“局域网设置”来打开代理配置对话框。
图8 |
WebScarab 默认时使用localhost的8008端口作为其代理。需要对IE进行配置,让IE把各种请求转发给WebScarab,而不是让IE读取这些请求,如 上图所示。确保除“为LAN使用代理服务器”之外的所有复选框都处于未选中状态。为IE配置好这个代理后,在其它对话框中单击确定按钮,并重新回到浏览 器。浏览一个非SSL的网站,于是转向WebScarab。
这时,您应该看到如下图所示的画面;否则的话,或者是在浏览时遇到错误的话,您 应当回到上面的步骤,检查你的Internet Explorer中的代理设置是否如上所述。如果代理设置是正确的,还有一种可能原因是端口8008已经被其他程序占用,这样的话WebScarab就无 法正常使用该端口了。如果是这样的话,您应当停用那个程序。后面我们会介绍如何让WebScarab使用不同的端口。
注意:如果您正在使用 WebScarab测试的站点与浏览器位于同一个主机之上(即localhost或者127.0.0.1),并且浏览器为IE7的话,则需要在主机名的后 面添加一个点号“.”,从而强迫IE7使用您配置的代理。这可不是WebScarab的一个bug,而是IE 开发人员所做的一个令人遗憾的设计决策。 如果IE觉得您试图访问的服务器位于本地计算机上,它就会忽略所有的代理设置,欺骗它的一个方法是在主机名后面加一个点,例如 http://localhost./WebGoat/attack。这将强迫IE使用我们配置的代理。
图9 |
这 里您可以看到一个URL树,用来表示站点布局,以及经过WebScarab的各个会话。要想查看一个特定会话的详细信息,您可以双击表中的一行,这时会弹 出一个显示请求和响应的详细信息的窗口。您可以通过多种形式来查看请求和响应,这里显示的是一个Parsed视图,在这里,报头被分解成一个表,并且请求 或者响应的内容按照Content-Type报头进行显示。您还可以选择Raw格式,这样的话,请求或者响应就会严格按照它们的原始形态进行展示。
图10 |
在会话窗口中,您可以通过“previous”按钮和“next”按钮从一个会话切换到另一个会话,也可通过下拉式组合框直接跳到特定的会话。
现在,您已经熟悉了WebScarab的基本界面,并且正确地配置了浏览器,接下来要做的就是拦截一些请求,并且在它们被发送给服务器之前对其进行修改。
我 们可以启用代理插件的拦截功能,方法是通过工具栏上的“proxy”按钮。然后,选择“Manual Edit”选项卡。一旦选中“Intercept Requests”复选框,我们就可以选择希望拦截的请求方法(大部分情况下是GET或者POST),甚至可以使用Ctrl+单击的方式选择多个方法。 目前,我们只选择“GET”。
图11 |
现在,返回到你的浏览器,并单击一个链接。这时,将会看到如下所示的一个窗口。最初,它只是在任务拦闪烁,只要点选它,就能正确显示了。
图12 |
现在,我们就可以编辑选择的请求的任何部分了。需要注意的是,报头是以URL译码形式显示的,而输入的一切都会自动地URL编码。如果您不想这样的话,则可以使用Raw模式。在某些情况下,使用Raw模式可能是最简单的形式,尤其是您希望粘贴某些东西的时候。
作 出修改后,单击“Accept changes”按钮就会将修改后的请求发送到服务器。如果您希望取消所在的修改,可以单击“Cancel changes”按钮,这样就会发送原始的请求。 您还可以单击“Abort request”按钮,如果您根本不想给服务器发送一个请求的话,这会向浏览器返一个错误。最后,如果打开了多个拦截窗口(也就是说浏览器同时使用了若干 线程),您可以使用“Cancel ALL intercepts”按钮来释放所有的请求。
WebScarab将一直拦截所有的匹配我们指 定的方法的请求,直到您在拦截会话窗口或者Proxy插件的“Manual Edit”选项卡取消选中“intercept requests”复选框为止。但是,您可能会奇怪:为什么WebScarab不会拦截对图像、样式表、javascript等内容的请求。如果您返回到 “Manual Edit”选项卡,将会看到一个标识为“Exclude paths matching :”的字段。 这个字段包含一个正则表达式,用于匹配请求的URL,如果匹配,则该请求就不会被拦截。
如果您想改变页面某些行为的话,您还可以通过配置WebScarab使其拦截有关响应,举例来说,您可以禁用javascript验证,修改SELECT字段可选项,等等。
九、小结
WebGoat 是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并非程序中的bug,而是故意设计用来讲授Web应用程序安全课程的。这个应用程序提供了一个逼真的教学环境,为用户完成课程提 供了有关的线索。本文对该工具的安装和使用做了详细的介绍,希望本文能够对读者有所帮助。