web应用程序安全性测试_Web应用程序安全性:测试漏洞

web应用程序安全性测试

相反,随着Web在本质上日益社会化,它变得越来越不安全。 实际上,Web应用程序安全联盟(WASC)在2009年初估计,所有网站中有87%容易受到攻击(请参阅参考资料 ,以获得更多信息的链接)。 尽管有些公司可以聘请外部安全分析师来测试漏洞,但并不是每个人都有资源花费20,000至40,000美元进行外部安全审核。 相反,组织将依靠自己的开发人员来理解这些威胁,并确保其代码中没有任何此类漏洞。

要编写安全代码,您必须首先了解您的工作面临的威胁。 本文介绍了一些较流行的漏洞,例如跨站点脚本和SQL注入,并介绍了可用于帮助不仅保护站点,而且保护驱动它们的数据和网络的工具。 本文并不旨在替代安全分析师或教授核心安全技能。 相反,它着重于教会您如何在代码中查找潜在的漏洞并修复漏洞。

常见漏洞

首先,您需要了解要寻找的一些漏洞。 第一个是迄今为止最受欢迎的:跨站点脚本(XSS)。 XSS是由恶意脚本注入网站所导致的。 例如,Mallory编写了一个脚本,该脚本将用户发送到Alice创建的受信任的网站。 Mallory将此脚本插入到流行的论坛中。 当Bob在论坛上看到此链接时,他单击该链接并在Alice的网站上创建了一个帐户。 该脚本利用了Alice网站上的XSS漏洞,然后将Bob的cookie发送给Mallory。 Mallory现在可以模拟Bob并从他那里窃取信息。

SQL注入是第二受欢迎的漏洞,主要是因为Web站点对数据库的依赖性越来越高。 SQL注入实际上非常简单:通过找到一个连接数据库的网站,恶意黑客在开发人员从未打算用于绕过身份验证或处理数据的地方执行SQL查询。 阿尔伯特·冈萨雷斯(Albert Gonzalez)曾使用这种攻击来窃取1.3亿张信用卡号。 在SQL注入攻击中,Mallory找到了Alice创建的一个销售电子产品的网站。 Mallory不用输入通常的用户名和密码组合,而是输入') OR 1=1-作为用户名。 因为她包括连字符( - ),所以不需要其他任何内容。 因为1=1始终为真,所以她将能够成功登录。 现在,她可以操纵数据库来窃取Bob的客户信息。 尽管此示例以最简单的形式演示了SQL注入,但是您可以看到攻击者使用起来很容易。

没有专业的安全分析人员团队,普通的Web开发人员似乎不可能与这些漏洞作斗争。 幸运的是,事实并非如此。 许多工具可用来帮助您在网站上发现可能的漏洞,以便您可以采取必要的步骤来防范这些漏洞。 诸如WebScarab和Paros之类的工具可捕获浏览器与服务器之间的对话以及抓取网站,以帮助您识别潜在风险。 掌握了这些信息之后,您便可以检查这些漏洞并加以防御。

Web疤痕

WebScarab由开放Web应用程序安全性项目(OWASP)开发,首先也是最主要的代理,用于分析浏览器请求和服务器回复。 除了用作数据包分析工具外,您还可以使用它来“模糊”站点,以寻找与上述相同的漏洞。 要使用WebScarab,首先要在Web浏览器中配置代理设置。 对于Mozilla Firefox,请执行以下步骤(有关其他可访问步骤,请参见Firefox键盘快捷键 ):

  1. 单击工具>选项>高级>网络
  2. 点击设置

    将打开“ 连接设置”窗口。

  3. 选择“ 手动代理配置”选项。
  4. 对于HTTP代理SSL代理 ,键入localhost ,并将端口设置为8008。
  5. 确保“ 否代理服务器”框为空,然后单击“ 确定”

图1显示了Firefox的连接设置。

图1. Firefox连接设置
屏幕快照:已选择手动代理配置; HTTP代理是localhost,端口是8008。SSL代理是localhost,端口是8008;选择了SOCKSv5。

对于Windows®InternetExplorer®,请执行以下步骤(有关其他可访问的步骤,请参阅IE帮助菜单中的Internet Explorer键盘快捷键):

  1. 单击工具> Internet选项>连接
  2. 单击“ 局域网设置”以打开“ 代理设置”窗口。
  3. 在“ 代理服务器”下 ,选中“ 为LAN使用代理服务器”复选框,然后单击“ 高级”
  4. 对于HTTPSecure ,键入localhost作为要使用的代理地址,然后键入8008作为端口。
  5. 确保“ 例外”框为空,然后单击“ 确定”

图2显示了Internet Explorer的代理设置。

图2.设置代理
代理设置:HTTP设置为localhost,端口8008。Secure设置为localhost,端口8008。

现在,您可以扫描网站了。

使用WebScarab扫描您的网站

下面的示例使用Hacme赌场网站,这是由Foundstone公司建有一定的漏洞,以便它可以被用于训练目的(参见相关主题 )。 该站点也与Apache Tomcat打包在一起,因此您可以根据需要在本地运行它。

接下来,打开WebScarab。 启动后,您只会看到两个标签: 摘要拦截 。 因为要使用WebScarab进行模糊处理,所以可以通过单击工具>使用全功能界面>确定来更改视图。 然后将要求您重新启动WebScarab。 完成后,您可以从图3所示的界面开始。 (WebScarab提供了键盘快捷键的列表,不幸的是只有两个。)

图3. WebScarab界面
WebScarab界面的屏幕快照,显示了多个选项卡:Spider,扩展,XSS / CRLF,SessionID分析,脚本,片段,Fuzzer,比较,搜索,摘要,消息,代理,手动请求和Web服务。摘要选项卡突出显示。

要开始新的会话,请单击文件>新建 。 出现一个询问您要保存会话的位置的框。 选择或创建存储目录,然后单击确定 。 当您将WebScarab与Hacme Casino一起使用时,请在打开浏览器之前启动服务器。 然后,在浏览器的地址栏中,输入http://localhost:3000

打开浏览器后,您应该开始在WebScarab中看到一些活动,因为WebScarab正在捕获浏览器与服务器之间的所有请求和答复。 因为您要使用模糊测试功能来测试漏洞,所以首先请查看不同漏洞的存在位置。 首先将登录视为潜在的漏洞。 要测试登录,您应该记录浏览器和服务器之间发生的交互。 此处无需成功登录,因此您可以输入所需的用户名和密码:在此示例中,输入casino作为用户名和密码,然后单击登录

当然,登录将不会成功,但这不是您感兴趣的。相反,请返回WebScarab。 在Path列中,右键单击account \ login ,然后单击Use as fuzz template如图4所示。

图4.模糊测试模板
Fuzzing模板的屏幕快照,显示各种Web链接数据的类似电子表格的视图。

执行以下步骤:

  1. 单击WebScarab界面顶部的Fuzzer选项卡。
  2. 单击
  3. 浏览到词典的位置。 (我all_attack.txt使用;请参阅相关信息中的链接。)
  4. 提供源的描述,然后单击添加
  5. 单击关闭以返回到Fuzzer窗口。

现在,转到user_login参数,然后在Fuzz Source列下的区域中单击。 由于您仅加载了一个源(所有攻击),因此请从下拉菜单中选择它。 对user_password参数执行相同的操作, 如图5所示。

图5.选择攻击文件
攻击文件的屏幕截图,显示了可以编辑的各种参数的网格。

现在您已经定义了源,单击“ 开始”以开始该过程。 模糊器将文件中的参数插入用户名和密码输入中。 当该工具完成每次尝试时,您应该在屏幕上看到一些活动。 通常,您需要检查结果中的每个ID,以分析每次尝试发生的情况。 但是,由于您知道添加的字符串将产生结果,因此您可以看到在模糊测试成功后会发生什么。

双击示例中的第一个字符串, 如图6所示。

图6.查找漏洞
显示页面的已解析信息的屏幕快照。数据在user_login和user_password的URL编码变量下圈出。数据还会在“已解析的位置和站点Cookie”下圈出。

请注意,在最上面的圆圈中, user_loginuser_password值为') OR 1=1-- 。 接下来,注意位置已经从http://localhost:3000 ,这是主页, http://localhost:3000/lobby/games ,这是谁成功登录的用户会看到。 这是什么意思? 这意味着您的网站容易受到攻击。 由于') OR 1=1--是SQL字符串,因此该站点容易受到SQL注入的攻击。 使用“ 下一步”按钮滚动浏览结果,然后寻找该值。 请注意,这里的位置仍然是http://localhost:3000 。 从此结果可以知道,插入这种类型的字符串不会导致成功的登录尝试,因此该站点不容易受到这种类型的攻击。

Paros代理

另一个用于安全测试的有用工具是Paros Proxy。 像WebScarab一样,Paros捕获浏览器和服务器之间的对话以进行分析。 您也可以使用它来测试网站上的漏洞。 要运行Paros,必须更改浏览器的代理设置中使用的端口号。 对于WebScarab,您使用了8008; 在运行Paros之前将此端口更改为8080,否则该工具将无法工作。 在这个练习中,该示例使用WebGoat从OWASP的另一个工具(参见相关主题 )。 像Hacme Casino一样,WebGoat使用Tomcat服务器作为本地主机运行。 出于本文的目的,与Hacme Casino相比,WebGoat在Paros扫描中显示的漏洞更多。

更改端口后,打开Paros。 然后,执行以下步骤:

  1. 在WebGoat文件夹中,双击WebGoat.ba以启动Tomcat。
  2. 打开浏览器,然后输入http://localhost/WebGoat/attack
  3. 键入guest作为用户名和密码。
  4. 单击“ 启动WebGoat”

现在,返回Paros并开始扫描WebGoat站点。 当然,您可以通过在地址栏中输入网址来使用自己的网站。

在Paros中,展开Sites文件夹以在树中看到http:// localhost。 展开此文件夹以启动WebGoat。 突出显示WebGoat,然后单击分析扫描 。 这将立即开始扫描站点。 大型站点可能需要一段时间,但是该站点仅需要几秒钟。 一旦开始扫描,底部窗格将自动变为Alerts选项卡(请参见图7 )。 扫描完成后,在弹出窗口中单击“ 确定 ”,告诉您在哪里可以找到报告。

图7.查看警报
警报屏幕显示一个典型的IDE样式的划分窗口,在左上方的窗格中包含一个站点树,在右上方的窗格中包含有关所选项目的详细信息,而在下方的窗格中包含一个警报树。

您可以展开警报以更详细地显示它们。 您还可以查看报告,该报告提供了更多信息。 但是,首先,通过单击文件>另存为 ,选择扫描的位置和文件名,然后单击保存 ,以保存扫描结果。

要查看报告,请单击报告>上次扫描报告 。 在弹出窗口中单击OK ,然后将打开一个新的浏览器选项卡,其中包含扫描结果的报告, 如图8所示。 该报告提供了有关检测到的每个漏洞的大量信息,包括对处理特定漏洞的OWASP页面的引用。

图8. Paros报告
Paros报告的屏幕快照,在警报顶部显示摘要表,然后是每个警报的详细信息。

测试误报

尽管扫描程序是查找网站中可能存在的漏洞的一种好方法,但是最好的安全公司始终会手动测试可能存在的漏洞,以防误报。 对这些可能的利用进行测试意味着实际上要转到报告为易受攻击的站点区域,在站点本身中插入SQL代码或脚本以查看响应是什么,然后进入站点本身并插入任何利用。 大型公司通常会聘请专门从事此类测试(称为漏洞验证 )的专业程序员,但是作为开发人员,您可以自己执行其中的一些测试。 这样做不仅可以帮助您保护网站的安全,还可以在构建将来的网站时为您提供帮助。

SQL注入的误报

再次使用Hacme Casino网站,让我们看看WebScarab发现的漏洞:登录时SQL注入漏洞。 在运行Hacme Casino的情况下,在站点的“登录”输入区域中输入WebScarab成功使用SQL代码- ') OR 1=1-- 。 当您单击Login时 ,将打开帐户Andy_Aces。 因为1=1是正确的,所以SQL注入的最基本形式在这里起作用。 至于Andy,他很不幸成为数据库中的第一个帐户。

这项工作如何进行? 在后端,数据库运行如下查询:

SELECT * FROM users WHERE (username=username AND password=password)

通过“ 登录”框注入的少量代码将有效查询转换为:

SELECT * FROM users WHERE (username=’’) OR 1=1—AND password=’’)

该查询为站点的第一个用户返回成功登录,不幸的是,该用户是Andy。

当然,此示例仅涉及SQL注入的内容。 当某人变得越来越熟练地攻击网站时,他或她实际上可以利用此漏洞来创建用户,更改密码并从该网站提取敏感数据。 保护您的站点免受这些攻击涉及一些步骤:

  • 使用参数化查询或存储过程来访问数据库,而不是使用字符串连接。 参数化查询要求您定义所有SQL代码,然后再将每个参数传递给查询。 这使数据库能够区分代码和数据,因此提供何种类型的用户输入都无关紧要。 存储过程与参数化查询相似,因为它们要求您首先定义SQL代码,然后再传递参数。 这些元素的不同之处在于,已定义存储过程SQL代码并将其存储在数据库本身中,然后从应用程序中调用。
  • 通过将允许输入的字符“白名单”清除用户输入。 如果您要输入名称,则只允许使用az和AZ。 对于电话号码,将字符限制为0-9。 使用数据库支持的适当验证技术来执行此操作。
  • 使用数据库设置的字符转义方案转义用户提供的输入。 转义特殊字符会告诉您的数据库,查询中提供的字符实际上是数据,而不是代码。 如果随后使用适当的方案对所有用户提供的输入进行转义,则数据库将不会将该输入与您编写SQL代码混淆。
  • 不要给攻击者任何帮助。 确保错误消息不会泄露可稍后在网站上使用的信息。

XSS的误报

为了演示XSS攻击的示例,请回到WebGoat。 单击“ 跨站点脚本”>“ LAB:跨站点脚本”>“第1阶段:存储的XSS”,启动该站点。 使用用户名Larry Stooge和密码larry登录到演示站点Goat Hills Financial。 现在,攻击者将需要找到某个地方来输入恶意脚本。 Search Staff函数可能有一个文本框,用户可以在其中输入名称:单击Search Staff以显示它, 如图9所示。

图9. XSS入口点
Goat Hills财务人力资源部的XSS入口点的屏幕快照,其中显示一个文本字段以使用标记为FindProfile的按钮搜索用户。

在“ 名称”框中,键入alert("You got me with XSS"); 。 该脚本可能只显示一个警报框, 如图10所示 ,但请考虑一下,如果脚本可以将用户重定向到假的人力资源站点,在该站点上他或她必须输入社会安全号码,家庭住址,银行信息等等。 更改与“ 确定”按钮关联的操作即可做到这一点。 对于真正有创造力的恶意黑客来说,如果用户信任他们,那就是无限的机会。

图10.成功的XSS攻击
带有消息的警告框:“您让我使用XSS”和底部的“确定”按钮。

为了防止XSS攻击,您需要清除所有输入。 如果稍后将输入用作操作系统命令,脚本和数据库查询的参数,则必须这样做。 您可以通过转义不受信任的数据来清理用户输入,然后再将其插入HTML元素内容和HTML通用属性。 OWASP建议在后者中转义所有小于256的ASCII值。 JavaScript™数据值,HTML样式的属性值和HTML值属性也可以转义。 当然,在转义输入数据之前,请确保已验证对网站的任何输入。 如果要查找特定的输入值,数字,字母,电子邮件地址等,则仅允许此类数据,并拒绝其他任何内容。

结论

在查看网站遭受的一些更常见的攻击时,重要的是要了解这些攻击的工作方式。 通过了解攻击者正在寻找什么并解决这些漏洞,您可以使经验不足的攻击者无法破坏站点,并给组织有序的攻击者带来太多麻烦。 尽管本文列出的对策和执行的扫描仅代表了这些攻击的工作方式以及如何加以预防,但它们为您提供了可以建立基础的基础。


翻译自: https://www.ibm.com/developerworks/opensource/library/wa-appsecurity/index.html

web应用程序安全性测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值