目 录 序 言 :WebGoat 中 文 概 述... 3 目 标... 3 概 要... 3 未 来 发 展... 3 下 载... 4 发 行 版... 4 WebGoat 5.2 标 准 版... 4 WebGoat 5.2 开 发 版 ( 位 于 Sourceforge)... 4 演 示 解 决 方 案... 4 演 示 视 频 链 接... 5 项 目 贡 献 者... 5 1. Webgoat 用 户 指 南 卷 首 语... 6 1.1 版 权 与 许 可... 6 1.2 商 标... 6 1.3 贡 献 者... 6 1.4 文 档 版 本 历 史... 6 2. 概 述... 6 3. 目 的... 9 4. 必 备 工 具... 9 4.1 应 用 程 序 审 计 代 理... 9 4.2 应 用 程 序 爬 虫... 9 5. 安 装... 10 5.1 安 装 Java 和 Tomcat... 10
5.1.1 安 装 Java... 10 5.1.2 安 装 Tomcat... 10 5.2 安 装 到 Windows 系 统... 10 5.3 安 装 到 Linux 系 统... 10 5.4 安 装 至 OS X(Tiger 10.4+) 系 统... 10 5.5 安 装 至 FreeBSD 系 统... 11 5.6 运 行... 11 5.7 编 译... 11 5.8 安 装 WAR 文 件 到 已 安 装 的 Tomcat 服 务... 12 6. WebGoat 入 门... 12 7. 课 程 计 划... 14 8. 基 本 操 作... 17 9. 利 用 代 理... 19 10. 起 航... 20 11. 怎 样 写 一 个 新 的 WebGoat lesson... 21
序 言 :WebGoat 中 文 概 述 WebGoat 是 由 著 名 的 OWASP 负 责 维 护 的 一 个 漏 洞 百 出 的 J2EE Web 应 用 程 序, 这 些 漏 洞 并 非 程 序 中 的 bug, 而 是 故 意 设 计 用 来 讲 授 Web 应 用 程 序 安 全 课 程 的 对 于 每 堂 课, 用 户 须 通 过 搞 定 WebGoat 应 用 程 序 中 的 一 个 实 际 的 安 全 漏 洞 来 验 证 各 自 对 于 该 安 全 问 题 的 理 解 举 个 例 子, 在 其 中 一 个 课 程 中, 用 户 必 须 使 用 SQL 注 入 来 窃 取 ( 杜 撰 的 ) 信 用 卡 号 这 个 应 用 程 序 提 供 了 一 个 逼 真 的 教 学 环 境, 为 用 户 完 成 课 程 提 供 了 有 关 的 线 索 及 代 码, 从 而 使 用 户 能 更 深 入 地 理 解 该 课 程 为 什 么 叫 WebGoat 呢? 即 使 是 最 好 的 程 序 员 也 会 写 出 产 生 安 全 漏 洞 的 代 码, 因 而 开 发 人 员 不 必 因 为 不 懂 安 全 而 自 卑 他 们 需 要 的 仅 仅 是 一 个 替 罪 羊, 不 是 吗? 就 让 这 只 山 羊 背 黑 锅 吧! 请 参 考 WebGoat 用 户 及 安 装 指 南 开 始 目 标 在 学 习 和 实 践 Web 应 用 程 序 安 全 知 识 时, 我 们 所 面 临 的 一 大 难 点 是 : 到 哪 里 去 找 可 以 练 手 的 web 应 用 程 序 呢? 显 然, 明 目 张 胆 地 扫 描 在 线 书 店 或 者 网 络 银 行 可 不 是 个 好 主 意, 小 心 警 察 叔 叔 会 找 上 门 来 此 外, 安 全 专 业 人 员 经 常 需 要 测 试 某 些 安 全 工 具, 以 检 查 它 们 的 功 能 是 否 如 厂 商 所 鼓 吹 的 那 般, 这 时 他 们 就 需 要 一 个 具 有 确 定 漏 洞 的 平 台 作 为 活 靶 子 但 是, 无 论 学 习 web 测 试, 还 是 检 查 工 具 的 性 能, 都 要 求 在 一 个 安 全 合 法 的 环 境 下 进 行 即 使 你 的 意 图 是 好 的, 但 是 在 未 经 许 可 的 情 况 下 企 图 查 找 安 全 漏 洞 也 是 绝 不 允 许 的 WebGoat 项 目 的 主 要 目 标 很 简 单, 就 是 为 Web 应 用 程 序 安 全 学 习 创 建 一 个 生 动 的 交 互 式 教 学 环 境 将 来, 项 目 研 究 小 组 希 望 将 WebGoat 发 展 成 为 一 个 安 全 性 基 准 测 试 程 序 平 台 和 一 个 基 于 Java 的 蜜 罐 网 站 概 要 WebGoat 是 用 Java 语 言 写 成 的, 因 此 可 以 安 装 到 所 有 带 有 Java 虚 拟 机 的 平 台 之 上 此 外, 它 还 分 别 为 Linux OS X Tiger 和 Windows 系 统 提 供 了 安 装 程 序 部 署 该 程 序 后, 用 户 就 可 以 进 入 课 程 了, 该 程 序 会 自 动 通 过 记 分 卡 来 跟 踪 用 户 的 进 展 当 前 提 供 的 训 练 课 程 有 30 多 个, 其 中 包 括 : 跨 站 点 脚 本 攻 击 (XSS) 访 问 控 制 (Access Cnotrl) 线 程 安 全 (Thread Safety) 操 作 隐 藏 字 段 (Hidden Form Field Manipulation) 操 纵 参 数 (Parameter Manipulation) 弱 会 话 cookie(weak Session Cookies) SQL 盲 注 (Blind SQL Injection) 数 字 型 SQL 注 入 (Numeric SQL Injection) 字 符 串 型 SQL 注 入 (String SQL Injection) web 服 务 (Web Services) Open Authentication 失 效 (Fail Open Authentication) 危 险 的 HTML 注 释 (Dangers of HTML Comments) 等 等 更 多 请 参 考 WebGoat 用 户 及 安 装 指 南 未 来 发 展
近 年 来 WebGoat 已 经 比 较 稳 定 了 WebGoat 的 问 题 页 面 仍 然 存 在 问 题 需 要 修 复, 如 果 您 能 帮 助 修 复 将 不 胜 感 激 展 望 未 来,WebGoat 应 利 用 OWASP 提 供 的 培 训 材 料 的 优 势, 并 将 其 纳 入 教 学 计 划 的 材 料 现 阶 段 的 WebGoat 已 经 证 明 对 于 安 全 人 员 了 解 攻 击 类 型 及 如 何 利 用 之 是 有 用 的,WebGoat 应 开 始 专 注 于 教 导 安 全 和 开 发 人 员 相 关 的 缓 解 策 略 方 法 我 期 望 计 分 卡 功 能 和 系 统 架 构 能 有 所 完 善, 用 于 更 好 地 跟 踪 课 程 的 完 成 状 况 WebGoat 也 可 用 于 企 业 引 进 安 全 编 码 实 践 马 上 看 看 项 目 路 线 图, 找 点 任 务 来 帮 助 我 们 吧 下 载 WebGoat 可 从 Google code 下 载 区 http://code.google.com/p/webgoat/downloads/list 下 载, 您 也 可 相 应 的 同 步 取 得 当 前 的 WebGoat 代 码 树 http://code.google.com/p/webgoat/ 发 行 版 您 可 从 Sourceforge 的 OWASP 源 代 码 中 心 http://sourceforge.net/project/showfiles.php?group_id=64424&package_id=61824 取 得 WebGoat 老 版 本, 其 中 有 包 含 Java 的 版 本, 也 有 不 包 含 的 版 本 安 装 仅 需 解 压 下 载 到 的 安 装 包, 并 运 行 其 中 的 开 始 脚 本 即 可 为 便 于 学 习, 其 中 也 包 含 一 个 可 直 接 部 署 在 您 J2EE 应 用 服 务 器 上 的 war 包 WebGoat 5.2 标 准 版 该 标 准 发 行 版 下 载 解 压 缩 后, 即 可 单 击 运 行 它 包 含 Java 运 行 时 环 境 及 一 个 配 置 好 的 Tomcat5.5 服 务 器 双 击 执 行 webgoat.bat Tomcat 命 令 窗 口 即 会 启 动, 浏 览 器 浏 览 http://localhost/webgoat/attack WebGoat 5.2 开 发 版 ( 位 于 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. 源 代 码 发 生 的 任 何 变 化, 都 会 自 动 地 引 起 编 译 操 作, 保 存 后 会 自 动 重 新 部 署 如 对 该 版 本 有 任 何 建 议, 请 发 送 给 Bruce Mayhew(webgoat@owasp.org) 演 示 解 决 方 案 Aung Khant (YGN Ethical Hacker Group) 创 建 了 一 系 列 的 视 频 来 演 示 WebGoat 课 程 中 可 能 的 解 决 方 案, 它 们 可 从 http://yehg.net/lab/pr0js/training/webgoat.php 处 观 看 如 需 关 于 WebGoat 的 帮 助, 可 随 时 找 他
演 示 视 频 链 接 1. 综 合 http://yehg.net/lab/pr0js/training/webgoat.php#general 2. 代 码 品 质 http://yehg.net/lab/pr0js/training/webgoat.php#code_quality 3. 协 助 http://yehg.net/lab/pr0js/training/webgoat.php#concurrency 4. 未 认 证 参 数 http://yehg.net/lab/pr0js/training/webgoat.php#unvalidated_parameters 5. 接 入 限 制 缺 陷 http://yehg.net/lab/pr0js/training/webgoat.php#access_control_flaws 6. 认 证 缺 陷 http://yehg.net/lab/pr0js/training/webgoat.php#authentication_flaws 7. 会 话 管 理 缺 陷 http://yehg.net/lab/pr0js/training/webgoat.php#session_management_flaws 8. 跨 站 脚 本 攻 击 http://yehg.net/lab/pr0js/training/webgoat.php#cross-site_scripting_(xss) 9. 缓 冲 区 溢 出 http://yehg.net/lab/pr0js/training/webgoat.php#buffer_overflows 10. 注 入 缺 陷 http://yehg.net/lab/pr0js/training/webgoat.php#injection_flaws 11. 不 安 全 的 存 储 http://yehg.net/lab/pr0js/training/webgoat.php#insecure_storage 12. 拒 绝 服 务 http://yehg.net/lab/pr0js/training/webgoat.php#denial_of_service_(dos) 13. 错 误 配 置 http://yehg.net/lab/pr0js/training/webgoat.php#insecure_configuration_insecure 14. web 服 务 http://yehg.net/lab/pr0js/training/webgoat.php#web_services 15. AJAX 安 全 http://yehg.net/lab/pr0js/training/webgoat.php#ajax_security 16. 挑 战 http://yehg.net/lab/pr0js/training/webgoat.php#challenge 项 目 贡 献 者 WebGoat 项 目 由 Bruce Mayhew. 主 持, 可 通 过 webgoat@owasp.org 与 之 联 系 WebGoat 通 过 Sourceforge 及 Google 进 行 分 发 WebGoat 框 架 使 得 添 加 其 它 课 程 变 得 非 常 容 易 随 着 新 的 web 技 术 不 断 涌 现, 我 们 正 在 积 极 寻 找 开 发 人 员 添 加 新 的 课 程 如 果 你 有 兴 趣 为 项 目 志 愿 服 务, 或 有 意 见 问 题 及 建 议, 请 加 入 WebGoat 邮 件 列 表 (http://lists.owasp.org/mailman/listinfo/owasp-webgoat) 感 谢 Ounce 实 验 室 (http://www.ouncelabs.com/) 允 许 我 能 在 工 作 时 间 运 行 WebGoat 项 目
1. Webgoat 用 户 指 南 卷 首 语 1.1 版 权 与 许 可 Copyright OWASP Foundation 本 文 档 发 行 遵 循 GNU 文 档 许 可, 最 终 版 权 归 OWASP 所 有 请 阅 读 了 解 许 可 与 版 权 授 与 条 件 许 可 证 副 本 及 其 期 限 说 明, 请 参 考 http://www.gnu.org/licenses/gpl.html 本 文 档 副 本 必 须 满 足 GNU 免 费 文 档 许 可 要 求 的 框 架 本 文 档 的 原 始 格 式 和 翻 译 不 公 开 1.2 商 标 Java,Java Web Server, 以 及 JSP 为 SUN Microsystems 公 司 注 册 商 标 Microsoft Internet Explorer 为 微 软 公 司 注 册 商 标 Firefox 为 Mozilla 公 司 注 册 商 标 所 有 其 它 产 品 和 公 司 为 它 们 各 自 拥 有 者 注 册 商 标 本 文 档 中 所 有 产 品 的 用 户 使 用 期 限 不 应 该 被 看 作 为 影 响 了 任 何 服 务 项 目 所 注 册 商 标 的 合 法 性 1.3 贡 献 者 第 2 版 本 : 匿 名 贡 献 者 第 4 版 本 原 始 草 案 :Robert Sullivan(msp.sullivan@gmail.com) 贡 献 作 者 : 1.4 文 档 版 本 历 史 2004 年 1 月 Release v2 2006 年 3 月 Release v4 原 始 草 案 2007 年 1 月 Release v5 2. 概 述 WebGoatV5 应 用 程 序 是 一 个 用 来 演 示 Web 应 用 程 序 中 的 典 型 安 全 漏 洞 的 应 用 程 序, 旨 在 在 应 用 程 序 安 全 审 计 的 上 下 文 中 系 统 地 有 条 理 地 讲 解 如 何 测 试 和 利 用 这 些 安 全 漏 洞 一 个 完 整 的 应 用 程 序 安 全 性 评 估 测 试 方 法 在 文 档 http://www.owasp.org/index.php/owasp_testing_project 中 有 说 明, 它 同 时 提 供 了 一 份 WebGoat 演 示 的 扩 展 的 说 明 包 括 标 准 的 设 计 和 代 码 审 计 等 等 WebGoat 课 程 旨 在 给 大 家 一 个 能 完 成 不 同 级 别 的 owasp web 应 用 程 序 安 全 测 试 方 法 真 实 的 训 练 环 境 和 实 例 WebGoatV5 应 用 程 序 提 供 了 一 个 典 型 的 应 用 程 序 安 全 评 估 的 测 试 平 台 测 试 人 员 在 这 个 在 线 的 应 用 程 序 中 拥 有 和 普 通 的 客 户 或 者 客 户 端 一 样 的 权 限 和 信 息 : 此 应 用 程 序 是 基 于 web 的 ; 这 些 都 是 远 程 的 攻 击 摸 拟, 所 有 有 记 录 的 攻 击 手 法 都 可 以 从 任 何 可 以 连 接 的 地 方 进 行 连 接 演 示 ; 这 些 测 试 都 是 基 于 黑 盒 的, 源 代 码 不 提 供, 但 是 你 可 下 载 和 浏 览 它 ; 凭 证 和 操 作 信 息 是 提 供 的, 当 然,WebGoat 也 常 常 告 诉 我 们 可 以 显 示 出 来 的 确 定 信 息 往 往 是 你 探 测 不 到 的 这 也 同 时 是 在 指 导 测 试 人 员 从 头 到 尾 完 整 的 进 行 某 项 评 估 过 程 目 前 WebGoat 课 程 计 划 中 提 供 的 内 容 如 下 : HTTP Basics HTTP Splitting and Cache Poisining How to Exploit Thread Safety Problems
How to Discover Clues in the HTML How to Exploit Hidden Fields How to Exploit Unchecked Email How to Bypass Client Side JavaScript Validation How to Force Browser Web Resources How to Bypass a Role Based Access Control Scheme How to Bypass a Path Based Access Control Scheme LAB: Role based Access Control Using an Access Control Matrix How to Exploit the Forgot Password Page How to Spoof an Authentication Cookie How to Hijack a Session Basic Authentication LAB: Cross Site Scripting How to Perform Stored Cross Site Scripting (XSS) How to Perform Reflected Cross Site Scripting (XSS) How to Perform Cross Site Trace Attacks (XSS) Buffer Overflow (TBD) HTTPOnly Test How to Perform Command Injection How to Perform Parameter Injection
How to Perform Blind SQL Injection How to Perform Numeric SQL Injection How to Perform String SQL Injection How to Perform Log Spoofing How to Perform XPATH Injection Attacks LAB: SQL Injection How to Bypass a Fail Open Authentication Scheme How to Peform Basic Encoding Denial of Service from Multiple Logins How to Create a SOAP Request How to Perform WSDL Scanning How to Perform Web Service SAX Injection How to Perform Web Service SQL Injection How to Perform DOM Injection Attack How to Perform XML Injection Attacks How to Perform JSON Injection Attack How to Perform Silent Transactions Attacks How to Add a New Lesson The Challenge 未 来 的 WebGoat 新 版 本 将 会 包 含 更 多 的 课 程 和 功 能 如 果 你 有 任 何 的 建 议 可 以 帮 助 改 进 或 者 有 任 何 新 课 程 想 发 布, 请 联 系 bill@owasp.org 并 说 出 你 的 想 法
3. 目 的 在 通 过 WegGoat 课 程 体 系 的 测 试 技 术 训 练, 测 试 人 员 应 该 掌 握 以 下 技 能 : 理 解 web 应 用 程 序 中 的 各 种 高 层 次 交 互 过 程 确 定 客 户 信 息 的 可 见 数 据 可 用 于 攻 击 过 程 中 识 别 和 理 解 能 将 应 用 程 序 暴 露 在 攻 击 之 下 的 数 据 和 用 户 交 互 对 这 些 交 互 进 行 测 试, 以 揭 露 它 们 的 缺 陷 利 用 漏 洞 对 应 用 程 序 进 行 攻 击, 并 能 演 示 4. 必 备 工 具 对 于 有 经 验 的 应 用 程 序 安 全 审 计 人 员 来 说, 可 用 的 辅 助 工 具 有 很 多 就 我 们 这 种 类 型 的 安 全 审 计 来 说, 最 常 用 的 工 具 就 是 本 地 代 理 和 Web 应 用 程 序 爬 虫 为 了 完 成 全 套 WebGoat 课 程,Web 代 理 程 序 是 必 不 可 少 的 4.1 应 用 程 序 审 计 代 理 一 般 的 web 代 理 通 常 都 能 接 收 处 理 和 转 发 客 户 和 服 务 器 之 间 的 HTTP 和 HTTPS 数 据, 这 样 就 能 让 所 有 的 web 通 信 流 量 都 流 经 某 个 点, 以 便 通 过 高 速 缓 存 或 者 应 用 安 全 策 略 来 监 视 利 用 率 提 高 性 能, 等 等 应 用 程 序 代 理 工 具 可 用 来 拦 截 本 地 客 户 端 的 浏 览 器 和 服 务 器 端 之 间 所 有 的 HTTP 和 HTTPS 通 信, 它 实 际 上 充 当 了 一 个 可 以 监 视 检 查 和 ( 最 重 要 地 ) 修 改 所 有 的 交 互 的 中 间 人 角 色 通 过 这 种 工 具, 审 计 人 员 可 以 准 确 确 定 出 在 客 户 和 服 务 器 之 间 传 递 的 到 底 是 什 么 样 的 数 据 此 外, 它 们 还 可 以 对 这 些 数 据 进 行 分 析 和 修 改, 从 而 测 试 对 应 用 程 序 的 影 响 另 外 一 个 重 要 原 因 是 使 用 HTTP 代 理 是 因 为 WebGoat 要 求 基 本 的 身 份 认 证, 当 自 动 化 工 具 被 用 于 访 问 WebGoat 时, 他 们 可 能 没 有 足 够 的 功 能 来 验 证 WebGoat 通 过 使 用 像 WebScarab 代 理, 测 试 人 员 可 以 设 置 基 本 身 份 验 证, 而 且 可 以 将 认 证 的 凭 证 透 明 地 传 输 给 WebGoat 请 求 在 WebGoat 的 许 多 课 程 中, 应 用 程 序 审 计 代 理 或 者 具 备 同 等 功 能 的 软 件 都 是 必 不 可 少 的 下 列 是 我 们 推 荐 的 工 具 : WebScarab-https://www.owasp.org/index.php/Category:OWASP_WebScarab_Project BurpProxy- http://portswigger.net/ ParosProxy - http://parosproxy.org 4.2 应 用 程 序 爬 虫 所 谓 爬 行 一 个 站 点, 实 际 上 就 是 识 别 和 访 问 网 站 应 用 程 序 内 所 有 预 定 的 页 面 和 链 接, 并 建 立 本 地 副 本 ; 当 然 建 立 副 本 这 一 点 通 常 是 可 选 的 然 后, 我 们 就 可 以 分 析 爬 行 结 果, 得 到 应 用 程 序 内 目 标 脚 本 表 单 页 面 和 字 段 等 组 成 的 明 细 表 供 后 面 的 测 试 之 用 镜 像 下 来 的 内 容 也 可 以 用 来 分 析 有 关 信 息, 这 样 做 要 比 人 工 或 者 在 线 分 析 要 快 得 多 了 下 列 是 我 们 推 荐 的 工 具 : WebScarab-https://www.owasp.org/index.php/Category:OWASP_WebScarab_Project BurpSpider - http://portswigger.net ParosProxy - http://parosproxy.org
5. 安 装 WebGoat 是 一 个 平 台 无 关 的 Web 安 全 漏 洞 实 验 环 境, 该 环 境 需 要 Apache Tomcat 和 JAVA 开 发 环 境 的 支 持 它 分 别 为 Microsoft Windows 和 UN*X 环 境 提 供 了 相 应 的 安 装 程 序, 下 面 我 们 将 根 据 操 作 系 统 分 别 加 以 介 绍 需 要 注 意, 从 版 本 5 开 始, 这 一 步 可 以 省 略, 因 为 它 们 自 身 带 有 Java Development Kit 和 Tomcat 5.5 5.1 安 装 Java 和 Tomcat 5.1.1 安 装 Java 首 先 安 装 Java, 您 可 以 从 http://java.sun.com/downloads/ 安 装 和 部 署 合 适 的 版 本, 最 低 版 本 要 求 为 1.4.1 5.1.2 安 装 Tomcat 然 后 安 装 Tomcat, 您 可 以 从 http://tomcat.apache.org/download-55.cgi 安 装 和 部 署 Tomcat 5.2 安 装 到 Windows 系 统 1. 将 WebGoat-OWASP_Standard-5.2.zip 解 压 至 合 适 的 目 录 中 2. 若 要 启 动 Tomcat, 切 换 至 前 面 存 放 解 压 后 的 WebGoat 的 目 录, 然 后 双 击 webgoat.bat 即 可 3. 启 动 浏 览 器, 在 地 址 栏 输 入 http://localhost/webgoat/attack 注 意, 这 个 链 接 地 址 是 区 分 大 小 写 的, 务 必 确 保 其 中 使 用 的 是 大 写 字 母 W 和 G 5.3 安 装 到 Linux 系 统 1. 将 WebGoat-OWASP_Standard-x.x.zip 解 压 至 您 的 工 作 目 录 2. 将 webgoat.sh 文 件 中 的 第 17 19 和 23 行 中 的 1.5 改 为 1.6 3. 因 为 最 新 版 本 运 行 在 一 个 特 权 端 口 上, 所 以 您 需 要 使 用 下 列 命 令 来 启 / 停 WebGoat Tomcat: (1). 当 作 为 root 用 户 运 行 在 80 端 口 时, 使 用 : sudo sh webgoat.sh start80 sudo sh webgoat.sh stop (2). 当 运 行 在 8080 端 口 时, 使 用 : sh webgoat.sh start8080 sh webgoat.sh stop 5.4 安 装 至 OS X(Tiger 10.4+) 系 统 1. 将 WebGoat-OWASP_Standard-x.x.zip 解 压 至 您 的 工 作 目 录 2. 将 webgoat.sh 文 件 中 的 第 10 行 中 的 1.5 改 为 1.6 3. 因 为 最 新 版 本 运 行 在 一 个 特 权 端 口 上, 所 以 您 需 要 使 用 下 列 命 令 来 启 / 停 WebGoat Tomcat: (1). 当 作 为 root 用 户 运 行 在 80 端 口 时, 使 用 :
sudo sh webgoat.sh start80 sudo sh webgoat.sh stop (2). 当 运 行 在 8080 端 口 时, 使 用 : sh webgoat.sh start8080 sh webgoat.sh stop 5.5 安 装 至 FreeBSD 系 统 1. 从 Ports Collection 安 装 来 安 装 Tomcat 和 Java : cd /usr/ports/www/tomcat55 sudo make install 2. 安 装 Java JDK 的 时 候, 可 能 需 要 手 工 方 式 进 行 下 载, 届 时 系 统 会 给 出 详 细 的 提 示 3. 将 WebGoat-OWASP_Standard-x.x.zip 解 压 至 您 的 工 作 目 录 4. 将 webgoat.sh 文 件 中 的 第 17 19 和 23 行 中 的 1.5 改 为 1.6 5. 因 为 最 新 版 本 运 行 在 一 个 特 权 端 口 上, 所 以 您 需 要 使 用 下 列 命 令 来 启 / 停 WebGoat Tomcat: (1). 当 作 为 root 用 户 运 行 在 80 端 口 时, 使 用 : sudo sh webgoat.sh start80 sudo sh webgoat.sh stop (2). 当 运 行 在 8080 端 口 时, 使 用 : sh webgoat.sh start8080 sh webgoat.sh stop 5.6 运 行 1. 启 动 浏 览 器, 并 在 地 址 栏 输 入 http://localhost/webgoat/attack, 注 意 这 里 使 用 的 大 写 的 字 母 W 和 G 2. 登 录 时, 用 户 帐 号 使 用 guest, 密 码 为 guest 5.7 编 译 如 果 你 仅 仅 只 是 为 了 运 行 WebGoat 的 话, 请 跳 过 这 一 节
WebGoat 可 以 用 eclipse WTP 1.5.x 来 编 译 请 到 http://webgoat.googlecode.com/svn/trunk/webgoat/readme.txt 去 阅 读 相 关 的 步 骤 来 编 译 它, 或 者 你 也 可 以 阅 读 下 面 的 开 发 版 安 装 方 法 : WebGoat 开 发 版 安 装 方 法 : 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. 源 代 码 发 生 的 任 何 变 化, 都 会 自 动 地 引 起 编 译 操 作, 保 存 后 会 自 动 重 新 部 署 5.8 安 装 WAR 文 件 到 已 安 装 的 Tomcat 服 务 这 个 版 本 将 假 定 已 经 预 先 安 装 了 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 6. WebGoat 入 门 开 始 使 用 WebGoat 之 前, 必 须 先 启 动 Tomcat, 这 可 以 通 过 Tomcat 的 /bin 目 录 中 的 script/bat 程 序 startup 来 完 成 此 外, 要 想 正 常 使 用 WebGoat, 它 必 须 具 备 作 为 服 务 器 运 行 所 需 的 权 限, 并 允 许 一 些 不 常 见 的 web 行 为 注 意 WebGoat 运 行 时, 安 全 漏 洞 会 使 主 机 很 容 易 遭 到 攻 击 如 果 机 器 连 接 到 了 互 联 网, 那 么 就 应 该 将 其 断 开
运 行 的 个 人 防 火 墙 可 能 会 阻 止 WebGoat 的 正 常 使 用 所 以, 运 行 WebGoat 时 最 好 禁 用 所 有 的 个 人 防 火 墙 我 们 可 以 使 用 浏 览 器 浏 览 localhost 的 80 端 口 来 访 问 Tomcat 服 务 器, 如 http://127.0.0.1 WebGoat 位 于 WebGoat 目 录, 你 还 可 以 在 这 里 找 到 课 程 http://127.0.0.1/webgoat/attack WebGoat 的 应 用 程 序 强 制 采 用 基 于 角 色 的 安 全 机 制 登 录 对 话 请 求 会 要 求 输 入 身 份 凭 证 可 以 使 用 userid=guest,password=guest 登 录 图 1 登 录 界 面 成 功 登 录 之 后,Tomcat 服 务 器 将 显 示 WebGoat 的 欢 迎 页 面
图 2 欢 迎 页 面 7. 课 程 计 划 课 程 计 划 包 含 WebGoat5.0(1/31/07): HTTP Basics General HTTP Splitting and Cache Poisining How to Exploit Thread Safety Problems How to add a new WebGoat lesson Code Quality How to Discover Clues in the HTML Unvalidated Parameters How to Exploit Hidden Fields
How to Exploit Unchecked Email How to Bypass Client Side JavaScript Validation Using an Access Control Matrix How to Bypass a Path Based Access Control Scheme Broken Access Control How to Perform Cross Site Request Forgery (CSRF) LAB: Role based Access Control Remote Admin Access Forgot Password Broken Authentication How to Spoof an Authentication Cookie How to Hijack a Session Basic Authentication LAB: Cross Site Scripting How to Perform Stored Cross Site Scripting (XSS) Cross Site Scripting (Xss) How to Perform Reflected Cross Site Scripting (XSS) HTTPOnly Test How to Perform Cross Site Tracing (XST) Attacks Buffer Overflows Buffer Overflow How to Perform Command Injection Injection Flaws How to Perform Blind SQL Injection How to Perform Numeric SQL Injection How to Perform Log Spoofing
How to Perform XPATH Injection How to Perform String SQL Injection LAB: SQL Injection How to Use Database Backdoors Improper Error Handling How to Bypass a Fail Open Authentication Scheme Insecure Storage Encoding Basics Denial of Service Denial of Service From Multiple Logins Insecure Configuration Management Forced Browsing How to Create a SOAP Request Web Services WSDL Scanning Web Service SAX Injection Web Service SQL Injection DOM Injection AJAX Security XML Injection JSON Injection Silent Transactions Attacks Challenge The Challenge 每 个 WebGoat 里 的 课 程 都 提 供 了 课 程 概 述 和 目 标 你 可 以 点 击 显 示 课 程 计 划 按 钮
这 些 课 程 计 划 涵 盖 了 目 标 应 用 程 序 的 所 有 操 作, 以 及 感 兴 趣 尝 试 的 领 域, 包 括 有 关 的 安 全 评 估 和 攻 击 类 型 8. 基 本 操 作 我 们 知 道, 在 应 用 程 序 安 全 评 估 的 每 一 个 阶 段, 都 需 要 对 目 标 的 运 作 机 制 有 深 入 的 了 解 这 通 常 包 括 : 考 察 客 户 端 内 容, 如 HTML 和 script 分 析 客 户 端 和 服 务 器 之 间 的 通 讯 检 查 cookie 及 其 他 本 地 数 据 浏 览 器 已 经 使 得 查 看 HTML 源 代 码 变 得 非 常 轻 松, 而 WebGoat 又 增 加 了 多 种 操 作, 包 括 显 示 参 数 显 示 HTML 显 示 Cookies 和 显 示 Java 等
图 3 WebGoat 显 示 HTML 源 代 码 通 常 情 况 下, 浏 览 器 提 供 了 查 看 HTML 源 代 码 的 功 能 对 于 微 软 公 司 的 Internet Explorer 浏 览 器, 可 以 通 过 查 看 菜 单 下 的 源 文 件 选 项 来 查 看 HTML 源 代 码 对 于 Firefox 浏 览 器 来 说, 查 看 页 面 源 码 的 功 能 同 样 位 于 查 看 菜 单 下 的 页 面 源 代 码 下 WebGoat 显 示 HTML 的 功 能 仅 仅 展 示 当 前 的 HTML 代 码, 而 不 包 括 侧 边 栏 和 上 边 栏 对 应 的 HTML 代 码 图 4 显 示 HTML 源 代 码 这 里, 参 数 和 cookie 显 示 为 红 色
图 5 显 示 参 数 Cookies 这 里 显 示 Java 操 作 会 弹 出 一 个 包 含 源 代 码 的 新 窗 口 9. 利 用 代 理 要 想 充 分 挖 掘 WebGoat 的 各 种 功 能, 我 们 还 需 要 借 助 审 计 人 员 常 用 的 应 用 程 序 审 计 代 理 工 具 代 理 工 具 可 以 帮 助 我 们 进 行 更 深 入 的 分 析, 并 能 修 改 客 户 端 - 服 务 器 的 交 互 和 传 输 过 程 中 的 数 据 虽 然 不 同 的 工 具, 它 的 使 用 和 配 置 方 法 也 不 相 同, 但 基 本 概 念 是 一 致 的 : 应 用 程 序 审 计 代 理 必 须 位 于 客 户 端 的 浏 览 器 和 远 程 服 务 器 之 间 它 应 该 允 许 显 示 和 修 改 传 输 中 的 所 有 HTTP 数 据 该 工 具 通 常 会 直 接 插 入 浏 览 器, 或 者 在 另 外 一 个 本 机 端 口 进 行 侦 听 当 代 理 程 序 直 接 插 入 浏 览 器 的 时 候, 需 要 在 浏 览 器 中 键 入 一 个 特 殊 的 URL 当 该 工 具 侦 听 端 口 时, 则 需 要 对 浏 览 器 进 行 相 应 的 配 置, 方 可 正 常 使 用 该 工 具 在 微 软 公 司 的 Internet Explorer 中, 可 以 通 过 工 具 菜 单 完 成 配 置 工 作, 如 下 所 示 : 选 择 工 具 菜 单 中 的 Internet 选 项 菜 单 项 选 择 连 接 选 项 卡
单 击 选 项 卡 下 方 的 局 域 网 设 置 按 钮 在 局 域 网 设 置 对 话 框 中, 选 中 为 LAN 使 用 代 理 服 务 器 的 复 选 框 勾 掉 对 本 地 地 址 不 使 用 代 理 服 务 器 框 输 入 代 理 工 具 将 要 侦 听 的 地 址 和 端 口 对 于 WebScarab 而 言, 其 默 认 侦 听 端 口 是 8008 图 6 局 域 网 设 置 现 在, 每 当 从 客 户 端 的 浏 览 器 接 收 或 者 发 送 数 据 时, 我 们 都 能 够 通 过 拦 截 分 析 和 修 改 这 些 HTTP 请 求, 来 测 试 目 标 应 用 程 序 的 安 全 性 设 置 和 运 行 WebScarab 的 教 程 请 看 这 里 :WebScarab 教 程 借 助 这 类 代 理, 审 计 人 员 可 以 获 得 多 种 能 力, 包 括 : 所 有 的 GET/POST 参 数 都 可 以 修 改, 不 管 它 是 不 是 隐 藏 的 所 有 的 Cookie, 不 管 是 持 久 性 还 是 非 持 久 性 的 Cookie, 当 它 们 进 入 和 离 开 浏 览 器 时, 我 们 都 可 以 对 其 进 行 修 改 所 有 的 客 户 端 验 证 都 可 以 绕 过, 因 为 参 数 在 发 送 给 服 务 器 之 前 可 以 立 即 进 行 修 改 能 够 暴 露 高 速 缓 存 的 数 据, 以 便 于 分 析 能 够 暴 露 出 Server 及 其 他 报 头, 这 对 于 获 取 远 程 web 服 务 器 类 型 和 所 用 的 应 用 程 序 - 服 务 器 技 术 非 常 有 利 10. 起 航 剩 下 的 工 作 是 开 始 WebGoat lesson 最 后 一 点 :
如 果 你 没 有 完 整 的 手 册, 你 也 可 以 自 己 去 收 集 一 些 帮 助 信 息, 这 都 能 帮 助 你 完 成 课 程 不 要 太 急 于 求 成, 应 用 测 试 靠 的 是 10% 的 技 术 和 90% 的 横 向 思 维 如 果 你 通 过 自 己 的 努 力 去 战 胜 课 程 设 置 的 难 题, 你 会 学 习 并 且 掌 握 到 更 多 的 东 西 当 然, 这 一 切 要 经 过 大 量 的 尝 试, 一 次 次 的 失 败, 终 于 一 个 闪 念 把 你 引 向 成 功 这 个 过 程 中, 你 可 以 去 责 怪 Goat, 但 是 你 不 能 去 依 赖 他 人 11. 怎 样 写 一 个 新 的 WebGoat lesson 你 要 做 的 是 实 现 LessonAdapter 的 抽 象 方 法 WebGoat 使 用 了 Jakarta Element Construction Set, 你 可 以 去 研 读 一 下 ECS 的 API: http://jakarta.apache.org/site/downloads/downloads_ecs.cgi WebGoat 使 用 了 WTP, 更 多 Eclipse WTP 的 信 息 http://www.eclipse.org/webtools/ 步 骤 1: 搭 建 framework NewLesson.java 类 的 源 码 步 骤 2: 实 现 creatcontent 创 建 一 个 lesson 的 内 容 相 当 简 单, 包 含 两 个 主 要 部 分 : 1. 处 理 输 入, 即 来 自 于 用 户 的 最 新 请 求 2. 为 用 户 生 成 下 一 个 交 互 页 这 些 都 要 通 过 createcontent 方 法 实 现 每 个 lesson 最 好 在 一 个 单 页 上 完 成, 因 此 设 计 的 时 候, 把 lesson 的 功 能 设 计 在 一 个 页 面 上 是 很 重 要 的 实 例 createcontent 方 法 下 面 是 一 个 不 错 的 通 用 范 例 createcontent 方 法 : ECS 功 能 十 分 强 大 参 看 编 码 课 程 的 示 例, 关 于 如 何 使 用 它 创 建 一 个 行 列 输 出 的 表 格
步 骤 3: 实 现 其 他 方 法 要 想 让 一 个 lesson 有 更 丰 富 的 功 能,LessonAdapter 类 需 要 更 多 的 方 法 这 些 方 法 可 以 导 航 课 程 或 者 显 示 课 程 信 息 给 用 户 所 有 的 方 法 都 应 该 相 当 简 单, 只 需 要 花 几 分 钟 的 时 间 就 能 实 现 其 他 LessonAdapter 方 法 步 骤 4: 创 建 和 测 试 <v4 中 有 变 动 > 实 现 一 个 新 的 lesson 后,ant 被 用 来 创 建 部 署 一 个 新 的 web 应 用 首 先, 移 除 webapps 目 录 下 的 webgoat.war 文 件 以 及 webgoat 目 录 然 后, 进 入 webgoat 目 录 下 输 入 : 用 来 编 译 新 lesson 并 且 安 装 到 tomcat 路 径 Lesson 只 需 要 一 次 安 装, 如 果 web 应 用 和 其 他 的 测 试 有 变 动, 可 以 输 入 :
步 骤 5: 回 馈 员 如 果 你 完 成 了 一 个 lesson 并 且 认 为 在 web 应 用 安 全 方 面 有 所 帮 助, 请 提 供 给 WegGoat 应 用 的 维 护 人