已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Web 应用程序安全性:测试漏洞Web 的应用日益广泛,而安全性却越来越低。事实上,Web Application Security Consortium (WASC) 在 2009 年初就估计,所有 Web 站点中有 87% 是有漏洞,会被攻击的(有关更多信息,请参见 参考资源 中的链接)。尽管一些公司请得起外部安全分析师来测试 exploit,但不是每家公司都有财力花 24 万美元做外部安全审计。相反,组织变得依赖于自己的开发人员了解这些威胁和确保代码没有任何此类漏洞。常用缩写词 HTML(Hypertext Markup Language):超文本标记语言 SQL(Structured Query Language):结构化查询语言 URL(Uniform Resource Locator):统一资源定位符 要编写安全的代码,必须首先了解您的应用面临的威胁。本文讨论一些比较流行的漏洞,比如跨站脚本编程和 SQL 注入,并介绍一些工具,可以用来帮助您不仅保护站点还保护那些支持站点的数据和网络。本文不旨在成为安全分析师的替代,也不讲授核心安全技能。而是着重于教您如何找到代码中的潜在 exploit 并修复漏洞。常见漏洞首先,需要了解一些您要寻找的漏洞。第一个漏洞是最流行的:跨站脚本编程(cross-site scripting,XSS)。XSS 由注入 Web 站点的恶意脚本而导致。例如,Mallory 编写了一个脚本,会将用户发送到 Alice 创建的一个受信任的 Web 站点。Mallory 将该脚本插入一个流行的论坛。当 Bob 在论坛上看到这个链接时,他点击并在 Alice 的 Web 站点上创建一个帐户。该脚本就利用了 Alice 的 Web 站点中的一个 XSS 缺陷,然后将 Bob 的 cookie 发送给 Mallory。Mallory 现在可以模仿 Bob 并盗取他的信息。SQL 注入是第二个最流行的漏洞,这主要是因为 Web 站点对数据库的依赖性日益增加。SQL 注入实际上相当简单:通过找到一个连接到数据库的 Web 站点,恶意黑客在开发人员不打算忽略身份验证或进行数据操纵的地方执行一个 SQL 查询。这就是 Albert Gonzalez 用来盗取 1.3 亿信用卡号的那类攻击。在 SQL 注入攻击中,Mallory 找到 Alice 创建来售电的一个 Web 站点。不是输入通常的用户名-密码组合,Mallory 输入 ) OR 1=1- 作为用户名。由于她包含了连字号(-),所以任何其他东西都不需要;由于 1=1 总是为真,所以她将能够成功登录。现在,她可以操纵数据库,盗取 Bob 的客户信息。尽管本例以最简单的形式演示了一个 SQL 注入,但是您可以看出攻击者利用 SQL 注入有多么容易。没有专门的安全分析师团队,一般的 Web 开发人员似乎对这些漏洞束手无策。幸运的是,事实本非如此。有很多工具可用,可以帮助您找到站点上可能的漏洞,以便采取必要的措施修复漏洞。诸如 WebScarab 和 Paros 之类的工具捕获浏览器和服务器之间的会话,爬行 Web 站点以帮助您识别潜在的风险。有了这些信息,就可以检查这些漏洞并进行防御。回页首WebScarabWebScarab 由开放 Web 应用程序安全项目(Open Web Application Security Project,OWASP)开发,是首款用于分析浏览器请求和服务器应答的代理软件。除了用作数据包分析工具之外,还可以用来“fuzz”站点,寻找前面提到的那些 exploit。要使用 WebScarab,首先在 Web 浏览器中配置代理设置。对于 Mozilla Firefox,执行以下步骤(参见 Firefox 键盘快捷键 了解备选的可访问步骤):1. 单击 Tools Options Advanced Network。 2. 单击 Settings。 Connection Settings 窗口打开。3. 选择 Manual proxy configuration 选项。 4. 对于 HTTP Proxy 和 SSL Proxy,都输入 localhost,并将端口设置为 8008。 5. 确保 No proxy for 框为空,然后单击 OK。 图 1 显示了 Firefox 的连接设置。图 1. Firefox 连接设置对于 Windows Internet Explorer,执行以下步骤(参见 IE 帮助菜单中的 Internet Explorer 键盘快捷键,了解备选的可访问步骤):1. 单击 Tools Internet Options Connections。 2. 单击 LAN Settings 打开 Proxy Settings 窗口。 3. 在 Proxy Servers 下,选中 Use a proxy server for your LAN 复选框,然后单击 Advanced。 4. 对于 HTTP 和 Secure,在 proxy address to use 下输入 localhost,然后在 port 下输入 8008。 5. 确保 Exceptions 框为空,然后单击 OK。 图 2 显示了 Internet Explorer 的代理设置。图 2. 设置代理现在可以扫描 Web 站点了。利用 WebScarab 扫描站点下面例子中使用了 Hacme Casino 站点,该站点由 Foundstone 构建,具有几个漏洞,可以用于练习(参见 参考资源)。该站点随同 Apache Tomcat 打包在一起,如果您愿意,也可以在本地运行它。接下来,打开 WebScarab。一旦启动它,将只会看到两个选项卡:Summary 和 Intercept。因为您想要使用 WebScarab 进行 fuzz,所以通过单击 Tools Use full-featured interface OK 改变视图。然后会要求您重启 WebScarab。这样做之后,首先看到的界面如 图 3 所示。(WebScarab 提供一个 键盘快捷键 的列表 不幸的是只有两个。)图 3. WebScarab 界面要启动新的会话,单击 File New。会出现一个框,询问您要将会话保存到哪里。选择或创建存储目录,然后单击 OK。对 Hacme Casino 使用 WebScarab 时,在打开浏览器之前启动服务器。然后,在浏览器的地址栏中输入 http:/localhost:3000。 一旦打开浏览器,就应该开始在 WebScarab 中看到一些活动,因为 WebScarab 正在捕获浏览器和服务器之间的所有请求和应答。由于您想要使用 fuzzing 特性来测试漏洞,所以首先来看哪些地方可以存在各种不同的漏洞。首先来看登录,这是一个潜在的 exploit。要测试登录,您应该记录浏览器和服务器之间发生的交互。这里不需要成功登录,所以对于用户名和密码,您可以输入任何符号:对于本例来说,用户名和密码都输入 casino,然后单击 Login。当然,登录不成功,但是这不是我们感兴趣的。相反,回到 WebScarab。在 Path 列中,右键单击 accountlogin,然后单击 Use as fuzz template,如 图 4 所示。图 4. fuzzing 模板修改 all_attack.txt 文件向文件添加 or x=x 和 ) or 1=1- 行,因为它们是基本的 SQL 注入字符串,将在本例中发挥作用。执行以下步骤:1. 单击 WebScarab 界面顶部的 Fuzzer 选项卡。 2. 单击 Source。 3. 浏览到您的词典的位置。(我使用的是 all_attack.txt;参见 参考资源 中的链接。) 4. 提供 Source 的描述,然后单击 Add。 5. 单击 Close 回到 Fuzzer 窗口。 现在,转到 user_login 参数并在 Fuzz Source 列下的区域中单击。由于您只加载了一个源 All attack,所以从下拉菜单中选择它。对 user_password 参数做相同的事情,如 图 5 所示。图 5. 选择攻击文件既然已经定义了源,就单击 Start 开始 fuzz 过程。Fuzzer 将来自文件的参数插入到用户名和密码输入中。您应该在工具完成每次尝试时在屏幕上看到一些活动。通常,您需要检查结果中的每个 ID,以分析每次尝试发生了什么事情。但是,您由于知道添加的字符串将产生一个结果,所以能够明白 fuzzer 成功时会发生什么。双击例子中的第一个字符串,如 图 6 所示。图 6. 找到漏洞注意,在上面的圈中,user_login 和 user_password 的值是 ) OR 1=1-。接下来,注意位置已从 http:/localhost:3000(这是主页)更改为 http:/localhost:3000/lobby/games(这是用户成功登录后会看到的页面)。这意味着什么呢?意味着您的站点是容易受攻击的。由于 ) OR 1=1- 是一个 SQL 字符串,所以说站点容易受到 SQL 注入攻击。使用 Next 按钮滚动结果,并寻找那个值。注意,这里位置保持为 http:/localhost:3000。从这个结果可以知道,插入该类型的字符串不会导致成功的登录尝试,所以站点不容易受到这种类型的攻击。回页首Paros Proxy另一个有用的安全测试工具是 Paros Proxy。跟 WebScarab 一样,Paros 捕获浏览器和服务器之间的会话,以进行分析。也可以使用它来测试站点上的漏洞。要运行 Paros,必须更改浏览器代理设置中使用的端口号。对于 WebScarab,使用的是 8008;在运行 Paros 之前将该端口更改为 8080,否则该工具不能工作。对于本练习,例子中使用了 WebGoat,这是出自 OWASP 的另一个工具(参见 参考资源)。跟 Hacme Casino 一样,WebGoat 运行使用 Tomcat 服务器作为本地主机。对于本文的目的,WebGoat 在 Paros 扫描中显示的漏洞比 Hacme Casino 中的多。使用多个扫面程序每个测试自己站点的人都应该由此知道,不同的扫描程序扫描相同的站点可能显示的结果不同。正因为如此,专业 pen-tester 在工作时使用多个工具。更改端口之后,打开 Paros。然后执行以下步骤:1. 在 WebGoat 文件夹中,双击 WebGoat.ba 启动 Tomcat。 2. 打开浏览器,然后输入 http:/localhost/WebGoat/attack。 3. 用户名和密码都输入 guest。 4. 单击 Start WebGoat。 现在,回到 Paros 并启动 WebGoat 站点的扫描。当然,您也可以使用自己的站点,在地址栏输入站点的 URL。在 Paros 中,展开 Sites 文件夹,在目录树中看到 http:/localhost。展开该文件夹,出现 WebGoat。突出显示 WebGoat,然后单击 Analyse Scan。这将马上开始站点扫描。大站点可能要花点时间,但是本例站点应该只要几秒钟。一旦开始扫描,底部窗格自动更改为 Alerts 选项卡(参见 图 7)。扫描完成时,单击弹出窗口中的 OK,该窗口告诉您去哪里找到报告。图 7. 查看警告可以展开警告,以显示更详细的信息。也可以查看报告,报告中提供了更多信息。但是,首先保存扫描结果,方法是单击 File Save As,为扫描选择一个位置和文件名,然后单击 Save。要查看报告,单击 Report Last Scan Report。单击弹出窗口中的 OK,将打开一个新的浏览器选项卡,其中是扫描结果的报告,如 图 8 所示。该报告提供有关检测到的每个漏洞的大量信息,包括对处理特定 exploit 的 OWASP 页面的引用。图 8. Paros 报告回页首测试误报尽管扫描程序是找到 Web 站点中可能存在的漏洞的很好方式,但是由于存在误报,最好的安全公司还总是要手动测试可能的漏洞。测试这些可能的 exploit 意味着,实际进入站点中被报告为容易受攻击的区域,在站点中插入 SQL 代码或脚本,看有何响应,然后进入站点并堵塞任何 exploit。大公司通常雇用擅长于这类测试(称之为漏洞验证(vulnerability validation)的专业程序员,但是您作为开发人员,可以自己执行这些测试。这样做不仅可以帮助您确保自己的站点更为安全,还会帮助您构建未来的站点。SQL 注入误报再次使用 Hacme Casino 站点,我们来看一下 WebScarab 发现的漏洞:在登录时出现一个 SQL 注入 exploit。保持 Hacme Casino 正在运行,在站点的 Login 输入区域输入 WebScarab 成功使用过的 SQL 代码 ) OR 1=1-。单击 Login 时,帐户 Andy_Aces 打开。由于 1=1 将会为真,所以 SQL 注入最基本的形式在这里出现。至于 Andy,他运气不佳,成为数据库中的第一个帐户。这是如何工作的呢?在后端,数据库运行一个类似这样的查询:SELECT * FROM users WHERE (username=username AND password=password)通过 Login 框注入的代码将有效的查询变成:SELECT * FROM users WHERE (username=) OR 1=1AND password=)该查询为站点的第一个用户(即不幸的 Andy)返回一个成功的登录。当然,本例只涉及到了 SQL 注入的皮毛。随着一些人在攻击 Web 站点方面变得越来越精通,他们会实际利用该漏洞来创建用户、更改密码以及从站点抽取敏感数据。保护站点免受这些攻击涉及到采取以下几个步骤: 使用参数化查询或存储过程来访问数据库,而不是使用字符串连接。参数化查询要求您定义所有的 SQL 代码,然后向查询传入每个参数。这允许数据库区分代码和数据,所以不管提供的是什么类型的用户输入都无所谓。存储过程类似于参数化查询,也要求您首先定义 SQL 代码,然后再传入参数。不同之处在于,用于存储过程的 SQL 代码定义并存储在数据库本身中,然后从应用程序中进行调用。 通过列出允许的字符串清洁用户输入。如果您被要求输入一个名称,那么只允许 a-z 和 A-Z。对于电话号码,字符限制为 0-9。使用您的数据库支持的适当验证技术来做到这一点。 使用数据库设置的字符转义方案转义用户提供的输入。转义特殊的字符会告诉数据库,查询中提供的字符实际上是数据,而不是代码。如果所有用户提供的输入都使用适当的方案进行了转义,那么数据库就不会将输入与您编写的代码混淆。 不要给攻击者以任何帮助。确保错误消息不要泄露以后可被用来攻击站点的信息。 XSS 误报要演示一个 XSS 攻击的例子,回到 WebGoat。单击 Cross Site Scripting LAB: Cross Site Scripting Stage 1: Stored XSS 启动该站点。用一个用户名 Larry Stooge 和密码 larry 登录到演示站点 Goat Hills Financial。现在,攻击者需要找到某个地方来输入恶意脚本。Search Staff 功能可能具有一个文本框(有人可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年阿勒泰辅警协警招聘考试真题附答案详解(培优b卷)
- 2025年淄博辅警招聘考试题库含答案详解(轻巧夺冠)
- 2025年贺州辅警招聘考试真题含答案详解(典型题)
- 2025年运城辅警协警招聘考试真题含答案详解(轻巧夺冠)
- 2025民宿经营管理合同示范文本
- 2025年阿克苏辅警协警招聘考试备考题库附答案详解(满分必刷)
- 2025年绵阳辅警协警招聘考试备考题库附答案详解(突破训练)
- 2025年阿坝州辅警招聘考试题库及答案详解(典优)
- 2025年鸡西辅警招聘考试真题含答案详解(研优卷)
- 2025年潍坊辅警招聘考试题库及一套参考答案详解
- 国家能源集团笔试企业文化知识
- 后勤服务人员职业道德规范
- Axure基础培训课件
- HAF101核动力厂厂址评价安全规定
- 口腔器械消毒灭菌技术操作规范
- 纺织品常规整理课件 第十章 防缩整理
- 分子病理学课件:细胞永生化
- GB/T 37136-2018电力用户供配电设施运行维护规范
- E84-握手流程(中文版)
- 现代汉语 句型 句式 句类课件
- 学校消防安全年度工作计划
评论
0/150
提交评论