一 個 SQL Injection 實 例 的 啟 示 頁 2 / 6 因 此, 在 知 名 網 站 上 看 到 SQL Injection, 讓 人 驚 心, 卻 不 意 外 網 站 專 案 外 包 是 目 前 業 界 的 常 態, 而 在 價 格 取 勝 的 制 度 下, 低 價 得 標 的 S

Similar documents
untitled

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

1. 概 述 1.1 扫 描 对 象 序 号 1 IP 地 址 域 名 1.2 漏 洞 等 级 分 布 风 险 类 型 数 量 高 风 险 1 中 风 险 5 低 风 险 4 信 息 类 4 7% 29% 高 风 险 36% 中 风 险 低 风

Microsoft Word - A doc

幻灯片 1

<4D F736F F D20C9CFBAA3CAD0BCC6CBE3BBFAB5C8BCB6BFBCCAD4C8FDBCB6BFBCCAD4B4F3B8D95FBDA8D2E9B8E55F5F E646F63>

目 錄 頁 次 政 風 法 令 宣 導 一 行 政 中 立 實 務 探 討 二 收 到 支 付 命 令 不 可 置 之 不 理 3 9 公 務 機 密 維 護 宣 導 一 淺 談 駭 客 攻 擊 14 二 何 不 自 行 設 計 入 侵 防 禦 系 統? 17 安 全 維 護 宣 導 認 識 爆 竹

目錄... I... III... V Chapter 1 ADO.NET ADO.NET ADO.NET DataSet NET Framework Data Provide

untitled

2 ADO.NET Internet 1.2

,,,, (,, - ;, ;, ;, ;, ;,, - ;, - ) (,, ~ ),,,, (, ),,,, ( ), () () ( ),,,,,,,.,, :.,. (,, ) : ( ), ;( ), ;( ) ;( ), :.,. %(,, ),,,,, (,, - ) :( ) ( )

Microsoft Word - 面向应用能力,构建师范院校计算机公共课程 “三层次教育”课程体系new.doc

11 天 山 区 区 环 卫 清 运 队 机 械 工 程 师 4011 C 1 不 限 不 限 机 电 具 有 两 以 工 作 经 12 天 山 区 乌 鲁 木 齐 市 第 15 小 会 计 4012 C 1 不 限 不 限 会 计 财 会 财 电 算 化 临 床 医 预 防 医 公 共 卫 生 与

epub 61-2

XXXXXXXX

Microsoft Word - 书目文件.doc

untitled

untitled

目錄

基于UML建模的管理管理信息系统项目案例导航——VB篇

RUN_PC連載_12_.doc

臺銀人壽「98年九至十一職等人員甄試」

上海市教育考试院关于印发新修订的

untitled

一步一步教你搞网站同步镜像!|动易Cms

季刊9web.indd

本 课 程 作 为 非 计 算 机 专 业 本 科 通 识 课 程, 是 一 门 理 论 和 实 践 紧 密 结 合 的 实 用 课 程, 内 容 包 括 计 算 机 基 础 部 分 和 程 序 设 计 部 分 计 算 机 基 础 部 分 涵 盖 计 算 机 软 硬 件 组 成 数 制 表 示 操

职 位 类 别 : 测 试 工 程 师 工 作 经 验 或 实 习 经 历 : 不 限 岗 位 要 求 : 1. 本 科 及 其 以 上 学 历, 计 算 机 相 关 专 业 2014 届 毕 业 生 ; 2. 实 习 时 间 要 求, 尽 量 一 周 五 个 工 作 日 ; 3. 熟 悉 Wind

程 序 设 计 语 言 A 计 算 机 网 络 汇 编 语 言 计 算 与 优 化 课 程 设 计 数 据 库 原 理 及 应 用 现 代 操 作 系

Microsoft Word - 13院21号.doc

IIS Web FTP

序 言 本 专 业 人 才 培 养 方 案 以 适 应 市 场 需 求 为 目 标, 根 据 学 校 校 企 双 主 体 人 才 培 养 的 要 求 和 移 动 应 用 开 发 专 业 的 特 点 设 置 课 程 体 系, 体 现 了 课 程 为 市 场 服 务 的 特 点 本 专 业 要 求 学

ebook43-11

SiteView技术白皮书

TopTest_Adminstrator.doc

WQ.s92

3 Driver do Microsoft Access (*.mdb) hisdata IFIX 1.4

0SQL SQL SQL SQL SQL 3 SQL DBMS Oracle DBMS DBMS DBMS DBMS RDBMS R DBMS 2 DBMS RDBMS R SQL SQL SQL SQL SELECT au_fname,au_ lname FROM authors ORDER BY

页眉

計畫書封面範例


Microsoft Word - SPEC

全 国 高 等 职 业 教 育 规 划 教 材 21 世 纪 高 职 高 专 规 划 教 材 系 列 高 等 职 业 教 育 计 算 机 专 业 规 划 教 材 选 题 征 集 通 知 一 选 题 范 围 ( 不 仅 限 于 此 ) 选 题 方 向 选 题 名 计 算 机 基 础 计 算 机 应 用

C6_ppt.PDF

<4D F736F F D20B2C4A447A6B8BFD4B8DFA965ADFBB77CB77CC4B3ACF6BFFD2E646F63>

untitled

Microsoft Word htm

2 Requirements Documentation Doc Name Doc No. 1.0 Version No. Total Page Generated By V6.0.0 Generated Date 2011/10/21 Checked By Checked Date 2011/10

VB控件教程大全

营 销 策 划 岗 部 门 招 聘 职 位 招 聘 人 数 岗 位 职 责 基 本 要 求 岗 位 任 职 要 求 6 参 与 项 目 产 品 研 究 客 户 需 求 研 究 竞 争 环 境 研 究 价 格 研 究 等 项 目 市 场 研 究 ; 7 公 司 经 纪 业 务 的 品 牌 管 理, 对

天津天狮学院关于修订2014级本科培养方案的指导意见

ASP.NET MVC Visual Studio MVC MVC 範例 1-1 建立第一個 MVC 專案 Visual Studio MVC step 01 Visual Studio Web ASP.NET Web (.NET Framework) step 02 C:\M

四川省普通高等学校

致理技術學院資訊管理學系專題企劃書格式建議書

untitled

高 职 计 算 机 类 优 秀 教 材 书 目 * 序 号 书 号 (ISBN) 书 名 作 者 定 价 出 版 / 印 刷 日 期 ** 配 套 资 源 页 码 计 算 机 基 础 课 计 算 机 应 用 基 础 刘 升 贵 年 8 月

计算机在汉语研究中的应用――以字频统计为例

ASP 電子商務網頁設計


幻灯片 1

untitled

01 SQL Server SQL Server 2008 SQL Server 6-1 SSIS SQL Server ( master ) ( msdb ) SQL Server ( master ) master 6-1 DTS sysadmin 6-1 sysa

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

13 根 据 各 种 网 络 商 务 信 息 对 不 同 用 户 所 产 生 的 使 用 效 用, 网 络 商 务 信 息 大 致 可 分 为 四 级, 其 中 占 比 重 最 大 的 是 ( A ) A 第 一 级 免 费 信 息 B 第 二 级 低 收 费 信 息 C 第 三 级 标 准 收 费

<4D F736F F D20C9EEDBDACAD0BAA3D4C2CDA8D0C5B6AFCCACC3DCC2EBBDE2BEF6B7BDB0B82E646F63>

SQL Server SQL Server SQL Mail Windows NT

R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w

信息产业(二).doc

投影片 1

新 闻 学 46 7 新 闻 传 播 学 院 广 告 学 28 4 广 播 电 视 学 23 3 新 闻 学 广 告 学 ). 级 学 生 申 请 准 入 需 修 完 或 正 在 修 2 门 专 业 准 入 课 程 并 取 得 相 应 学 分 ;2). 级 学 生 申 请 准 入 需

Microsoft Word - A doc

untitled

信息

untitled

The Applicibility of Google Maps/Earth and Urmap API to Real Estate Database* Jin-Tsong Hwang** Abstract Whether the real estate market is prosperous

穨ac3-4.PDF

申龙电梯参加了“热议标前公示

软件概述

浪潮集团信息化文案

助 理 建 筑 师 / 建 筑 师 ( 方 案 ) 1 重 点 院 校 建 筑 学 本 科 及 以 上 毕 业,1-3 年 甲 级 设 计 院 工 作 经 验, 有 优 秀 的 方 案 设 计 能 力 及 成 果 表 现 能 力 ; 2 热 爱 设 计 敬 业 负 责 积 极 主 动 有 良 好 的

ebook46-23

目 录 全 国 计 算 机 等 级 考 试 考 务 管 理 规 则 (2014 年 版 ) 第 一 章 总 则... 1 第 二 章 组 织 机 构... 1 第 三 章 工 作 人 员... 4 第 四 章 考 试 实 施... 5 第 五 章 评 卷 成 绩 与 证 书... 7 第 六 章 考

1. ( B ) IT (A) (B) (C) (D) 2. ( A ) (A) (B) (C) (D) 3. ( B ) (A) GPS (B) GIS (C) ETC (D) CAI 4. ( D ) (A) (B) (C) (D) 5. ( B ) (Stored Program) (A) H

第6章  数据库技术基础

Chapter 2

經濟統計資料庫管理資訊系統

·½Âù¤ë¥Z

<4D F736F F F696E74202D BB7BC3D2A4CEBFECB27AA4E8A6A1BBA1A9FA205BACDBAE65BCD2A6A15D>

untitled

FileMaker 16 ODBC 和 JDBC 指南

FileMaker 15 ODBC 和 JDBC 指南

Microsoft Word - 10 练坤梅.doc

Oracle 4

摘 要 本 研 究 主 要 目 的 在 於 提 出 E 化 網 路 評 量 系 統 的 設 計, 並 從 事 上 述 系 統 的 建 置 工 作 為 驗 證 系 統 之 可 行 性, 以 國 小 五 年 級 自 然 與 生 活 科 技 科 為 範 例 給 學 生 和 老 師 進 行 試 用 除 進

电信行业网上营业厅

untitled

( 十 一 ) 医 学 院 1. 医 学 院 开 设 的 全 校 选 修 课 程 一 览 表 医 学 院 开 设 的 全 校 选 修 课 程 简 介 146 ( 十 二 ) 生 命 科 学 学 院 1. 生 命 科 学 学 院 开 设 的 全 校 选 修 课 程 一 览 表 155 2

untitled

第一章 章标题-F2 上空24,下空24

上海师范大学本科课程教学大纲格式

Transcription:

一 個 SQL Injection 實 例 的 啟 示 頁 1 / 6 你 的 網 站 在 裸 奔 嗎? 一 個 SQL Injection 實 例 的 啟 示 作 者 : 李 明 儒 SQL Injection( 資 料 隱 碼 攻 擊 ) 問 題 早 就 不 是 什 麼 新 聞, 但 前 陣 子 在 一 個 頗 具 知 名 度 的 活 動 網 站 上, 赫 然 發 現 它 大 刺 刺 地 現 身! 原 來, 只 要 程 式 人 員 的 一 個 疏 忽 ( 一 個 就 夠 了, 真 的!), 就 足 以 讓 任 何 網 站 的 安 全 防 線 瞬 間 瓦 解 門 戶 大 開 本 文 便 將 以 此 實 例 探 討 SQL Injection 所 可 能 衍 生 的 風 險 及 因 應 對 策 若 要 給 SQL Injection 下 個 定 義, 它 意 指 因 為 程 式 人 員 對 使 用 者 輸 入 資 料 的 驗 證 處 理 不 當, 致 使 有 心 人 可 透 過 輸 入 資 料 的 機 會, 在 輸 入 資 料 中 夾 帶 SQL 指 令, 以 達 到 竊 取 資 訊 篡 改 資 料 或 入 侵 系 統 等 惡 意 企 圖 關 於 SQL Injection 的 細 節 過 去 已 有 相 當 多 的 討 論, 在 此 不 多 著 墨 推 薦 幾 篇 不 錯 的 文 章, 作 為 實 例 探 討 前 的 背 景 知 識 基 礎 ( 請 見 參 考 資 料 1 2) 既 然 略 去 了 SQL Injection 的 基 本 介 紹, 本 文 將 以 案 例 所 曝 露 的 缺 失 及 如 何 改 善 作 為 探 討 重 點, 希 望 這 番 老 調 重 彈 能 再 次 突 顯 SQL Injection 問 題 的 嚴 重 性, 也 算 為 整 體 資 訊 安 全 環 境 的 提 升 進 分 心 力 ( 自 從 見 證 了 這 個 案 例 後, 我 已 開 始 每 天 祈 禱, 希 望 往 來 銀 行 的 所 有 資 訊 人 員 及 委 外 廠 商, 都 已 完 全 了 解 SQL Injection 的 風 險 並 隨 時 銘 記 在 心 ) 陰 魂 不 散 的 SQL Injection 很 少 有 資 安 問 題 會 像 SQL Injection 一 樣, 在 發 現 多 年 之 後, 依 然 能 三 不 五 時 來 個 奇 襲, 搞 得 一 群 人 雞 飛 狗 跳 若 諸 位 有 留 意 一 些 駭 客 入 侵, 竊 取 資 料 的 新 聞, 就 會 發 現 原 來 它 一 直 是 駭 客 們 的 最 佳 拍 檔, 不 曾 絕 跡 ( 例 如 : 大 考 中 心 的 資 安 事 件 http://mag.udn.com/mag/campus/storypage.jsp?f_art_id=11599 ) 近 年 來 會 鑽 系 統 漏 洞 的 病 毒 蠕 蟲 誕 生 速 度 愈 來 愈 快, 以 往 安 全 性 漏 洞 揭 露 後 幾 個 月 後 才 會 冒 出 依 附 該 漏 洞 的 惡 意 程 式, 到 現 在 幾 天 內 就 得 面 臨 大 軍 壓 境 的 危 機 但 是, 只 要 確 保 軟 體 修 補 及 防 毒 軟 體 更 新 的 即 時 性, 這 些 問 題 都 可 以 被 防 範 然 而 SQL Injection 問 題 最 神 妙 之 處 在 於 帶 原 者 是 人 而 非 程 式, 不 限 資 料 庫 廠 牌 程 式 語 言 開 發 工 具 作 業 平 台, 到 處 都 有 機 會 中 獎 而 我 們 無 法 以 防 火 牆 防 毒 軟 體 的 方 式 從 外 圍 防 堵, 也 不 能 比 照 軟 體 修 補 的 方 式, 讓 有 SQL Injection 問 題 的 程 式 師 在 一 夕 之 間 開 竅 尤 其 可 怕 的 是, 只 要 程 式 師 還 沒 有 建 立 正 確 的 觀 念, 隨 著 換 工 作 接 新 專 案, 問 題 會 呈 現 隨 機 式 傳 播 如 果 SQL Injection 的 帶 原 者 是 人, 那 麼 人 與 人 之 間 會 不 會 互 相 傳 染? 答 案 是 : 會 的! 過 去 看 過 不 少 有 SQL Injection 問 題 的 程 式 碼, 找 來 程 式 作 者 詢 問, 答 覆 常 常 是 : 程 式 碼 是 由 參 考 某 某 人 的 寫 法 如 果 沒 有 人 提 醒 他 其 中 隱 藏 的 風 險, 我 相 信 這 個 好 用 範 例 很 快 會 用 在 其 他 類 似 需 求 的 專 案 上, 然 後 很 不 幸 地 被 另 一 位 程 式 菜 鳥 學 去 用 天 哪! 又 一 個 天 真 無 邪 的 程 式 師 變 成 了 帶 原 者 帶 原 者 多 半 只 因 不 了 解 SQL Injection 的 嚴 重 性, 在 知 道 真 相 的 當 下, 震 撼 之 餘, 就 能 在 瞬 間 產 生 免 疫 力 說 到 這 裡, 不 禁 回 想 起 我 接 種 疫 苗 的 那 一 天 當 時, 我 還 是 個 天 真 無 邪 的 菜 鳥 程 式 師 在 一 個 研 討 會 中, 講 師 介 紹 了 SQL Injection, 並 打 趣 地 說, 在 竹 科 的 場 次, 講 完 這 一 段, 通 常 就 有 一 批 聽 眾 神 色 緊 張 地 衝 出 會 場, 趕 回 公 司 改 程 式 去 了 當 時, 台 下 的 我, 雖 然 克 制 住 打 道 回 公 司 的 衝 動, 但 接 連 而 來 的 是 三 天 少 吃 少 喝 少 睡 的 日 子, 將 過 去 做 過 專 案 裡 所 有 的 ASP VB COM 都 掃 過 一 次, 之 後 再 找 個 理 由 通 知 客 戶 要 更 新 程 式, 才 算 結 束 了 這 場 驚 魂 在 往 後 的 工 作 經 歷 中, 遇 過 許 多 程 式 人 員, 其 中 還 還 是 有 相 當 的 比 例 尚 未 對 SQL Injection 建 立 正 確 的 認 識

一 個 SQL Injection 實 例 的 啟 示 頁 2 / 6 因 此, 在 知 名 網 站 上 看 到 SQL Injection, 讓 人 驚 心, 卻 不 意 外 網 站 專 案 外 包 是 目 前 業 界 的 常 態, 而 在 價 格 取 勝 的 制 度 下, 低 價 得 標 的 SOHO 族 學 生 兼 職 族 是 否 對 功 能 可 以 正 常 執 行 以 外 的 知 識 有 所 涉 獵? 專 案 經 理 是 否 有 相 關 的 資 安 意 識? 更 不 要 提 逐 行 對 程 式 做 Code Review 是 唯 一 可 以 確 保 系 統 不 存 在 SQL Injection 問 題 的 方 法 ( 這 跟 Y2K 問 題 還 真 有 幾 分 神 似, 只 是 當 年 有 人 發 展 出 了 半 自 動 的 Y2K 問 題 掃 瞄 工 具 也 有 人 提 供 以 行 計 費 的 Code Review 服 務,SQL Injection 問 題 則 沒 有 這 方 面 的 選 擇 ) 稍 有 不 慎, 就 會 給 予 SQL Injection 可 趁 之 機 而 資 安 危 機 的 共 同 特 色 是, 一 處 漏 洞 與 一 百 處 漏 洞 的 結 局 相 同, 系 統 機 密 終 將 被 入 侵 者 一 覽 無 疑 接 著 我 們 就 將 重 點 回 歸 到 這 個 網 站 SQL Injection 漏 洞 的 實 例 探 討 上, 看 看 問 題 是 怎 麼 被 發 現 的 背 後 的 成 因 可 能 導 致 的 危 險 以 及 因 應 之 道 而 探 討 的 方 式, 會 將 問 題 成 因 對 策 三 者 放 在 一 起 討 論 由 於 我 們 的 重 點 在 於 SQL Injection 問 題 本 身, 無 意 對 該 網 站 的 資 訊 安 全 品 質 做 任 何 批 判, 因 此 雖 然 所 附 圖 例 都 擷 取 自 真 實 的 網 站 畫 面, 但 我 已 隱 藏 ( 馬 賽 克 囉!) 與 網 站 相 關 的 文 字 資 料, 程 式 參 數 名 稱 也 多 用 化 名, 以 免 徒 生 不 必 要 的 困 擾 問 題 怎 麼 被 發 現 的? 雖 然 我 常 以 骨 子 裡 流 著 駭 客 (Hacker, 不 是 Cracker) 的 血 液 自 傲, 但 也 沒 有 閒 到 三 不 五 時 流 連 各 大 網 站 找 碴, 四 處 找 漏 洞 鑽, 會 發 現 這 個 問 題, 純 屬 意 外 話 說 這 個 活 動 社 群 網 站 上 有 個 功 能, 點 選 文 章 發 表 者 上 的 連 結, 可 以 檢 視 其 個 人 基 本 資 料 它 採 取 的 是 類 似 UserInfo.asp?UserId=123 的 做 法, 例 如 : 123 是 會 員 的 流 水 號 但 是 因 程 式 沒 寫 好,UserId 未 正 確 帶 出, 因 此 變 成 了 UserInfo.asp?UserId= 可 以 想 見,ASP 抓 到 的 UserId 參 數 將 是 空 值, 而 網 頁 則 顯 示 了 以 下 的 錯 誤 訊 息 : ( 如 圖 1) 圖 1 因 UserId 參 數 不 當 而 顯 示 的 錯 誤 訊 息 網 頁 有 SQL Injection 經 驗 的 老 鳥 看 到 這 行 訊 息, 就 像 鯊 魚 聞 到 血 睲 味 一 樣 ; 單 憑 這 則 訊 息 就 可 以 斷 定 網 站 存 在 SQL Injection 問 題, 接 下 來 便 是 大 顯 身 手 的 時 刻 了 至 此, 我 們 發 現 了 幾 個 問 題 : 問 題 1 在 產 生 查 詢 發 表 者 個 人 資 料 的 連 結 上, 未 確 實 代 入 使 用 者 代 號, 造 成 傳 入 參 數 不 正 確, 進 而 導 致 程 式 錯 誤 程 式 人 員 疏 忽, 程 式 碼 不 正 確, 而 測 試 人 員 也 未 抓 出 此 一 明 顯 錯 誤 應 落 實 專 案 管 理 要 求, 在 驗 收 上 線 前 對 系 統 各 功 能 進 行 完 整 的 測 試

一 個 SQL Injection 實 例 的 啟 示 頁 3 / 6 問 題 2 UserInfo.asp 程 式 未 對 參 數 做 檢 查, 進 而 導 致 了 資 料 庫 存 取 的 執 行 錯 誤 UserInfo.asp 應 先 對 輸 入 的 UserId 參 數 做 檢 查, 當 它 不 是 數 字 或 為 空 值 時, 根 本 不 需 查 詢 資 料 庫 理 論 上, 既 然 是 要 查 詢 某 個 人 員 的 基 本 資 料, 就 不 該 接 受 沒 有 指 定 UserId 未 指 定 的 情 境, 應 顯 示 參 數 不 正 確 的 例 外 可 在 UserInfo.asp 加 入 以 下 的 參 數 檢 查 程 式 碼 : Dim struserid struserid=request( UserId ) If (struserid= Or Not IsNumeric(strUserId)) Then Response.Write UserId 參 數 不 正 確! Response.End End If 問 題 3 由 錯 誤 訊 息 中, 惡 意 使 用 者 可 以 獲 取 許 多 珍 貴 的 情 報 圖 1 至 少 就 揭 露 了 以 下 幾 條 線 索 : 1. 程 式 使 用 ODBC 方 式 連 上 SQL Server 2. 程 式 透 過 共 用 的 ASP 程 式 (Connect.asp) 連 結 資 料 庫 3. 程 式 直 接 將 UserId 接 在 SQL 指 令 中, 且 沒 有 外 括 單 引 號 當 UserId 為 空 字 串 時, 會 組 出 SELECT FROM UserInfoTableName WHERE UserId= 的 不 完 整 指 令, 形 成 = 附 近 的 語 法 不 正 確 錯 誤 由 於 參 雜 系 統 情 報 的 錯 誤 訊 息 會 顯 示 在 使 用 者 的 瀏 覽 器 上, 後 續 當 駭 客 要 進 一 步 探 索 更 多 的 資 料 庫 資 訊 時, 也 可 透 過 顯 示 在 網 頁 上 的 錯 誤 訊 息 傳 回 程 式 未 自 訂 錯 誤 訊 息 頁 面, 而 將 原 始 的 錯 誤 訊 息 細 節 傳 回 給 一 般 使 用 者 由 於 錯 誤 訊 息 中 常 會 透 露 許 多 系 統 及 程 式 的 細 節, 在 開 發 測 試 階 段, 這 些 資 訊 有 助 於 Debug; 在 系 統 上 線 後, 卻 變 成 駭 客 蒐 集 系 統 情 報 的 重 要 管 道 因 此, 在 正 式 上 線 後, 最 好 善 用 IIS 設 定 客 製 化 錯 誤 訊 息 或 ASP.NET web.config 中 CustomError 設 定, 對 一 般 使 用 者 隱 藏 錯 誤 的 細 節 資 訊 看 網 站 裸 奔 由 這 個 SQL Injection 的 發 生 位 置 來 看,URL 中 所 輸 入 的 UserId 參 數 被 用 在 使 用 者 個 人 資 訊 的 資 料 表 查 詢 SQL 中, 而 這 個 資 料 表 最 令 人 感 興 趣 的 欄 位 莫 過 於 密 碼 了 於 是 我 們 在 URL 上 調 整 一 下, 就 可 以 把 UserInfo.asp 當 成 一 個 功 能 受 限 的 SQL Query Analyzer 使 用 ; 故 意 製 造 錯 誤, 再 由 錯 誤 訊 息 中 獲 得 情 報 參 考 資 料 1 的 文 章 介 紹 了 透 過 加 註 HAVING 1=1 的 做 法 逐 一 查 出 欄 位 名 稱, 再 使 用 UNION 技 巧 將 我 們 需 要 的 資 料 偽 裝 成 為 原 本 要 查 詢 的 欄 位 傳 回 但 我 意 外 發 現, 由 於 SQL 錯 誤 訊 息 的 貼 心 設 計, 讓 我 們 能 更 簡 單 地 將 密 碼 取 回 方 法 是 這 樣 的, 首 先 我 們 要 先 猜 想 密 碼 欄 位 名 稱, 一 般 不 外 乎 pass passwd 或 是 password 於 是 我 們 用 UserInfo.asp?UserId=1+AND+Password=1 讓 組 成 的 SQL 變 成 SELECT FROM UserInfoTableName

一 個 SQL Injection 實 例 的 啟 示 頁 4 / 6 WHERE UserId=1 AND Password=1, 其 中 故 意 夾 帶 一 個 錯 誤 由 於 Password 欄 位 多 半 會 以 varchar 類 別 保 存, 當 我 們 要 求 與 數 字 1 比 對 時,SQL Server 很 聰 明 地 提 供 了 自 動 將 varchar 轉 換 成 int 的 功 能, 若 轉 換 失 敗 時 還 會 貼 心 地 會 顯 示 字 串 內 容 解 釋 轉 換 失 敗 的 理 由 ( 如 圖 2 所 示 ) 哦 哦! 使 用 者 密 碼 也 被 貼 心 地 夾 帶 在 錯 誤 訊 息 中, 交 給 了 有 心 人 圖 2 因 為 轉 型 失 敗, 密 碼 欄 位 內 容 被 顯 示 錯 誤 訊 息 中 循 著 這 個 資 訊 漏 洞, 配 合 會 員 清 單 網 頁, 有 心 人 可 以 寫 個 程 式 試 遍 所 有 會 員 編 號, 為 會 員 清 單 補 上 密 碼 欄 位 當 網 站 系 統 最 重 要 的 機 密 被 一 覽 無 疑, 跟 脫 光 衣 服 在 街 上 裸 奔 沒 啥 兩 樣 ; 更 要 命 的 是 網 站 管 理 員 程 式 開 發 人 員 企 業 主 在 此 刻 往 往 還 渾 然 不 覺 問 題 4 UserInfo.asp 將 使 用 者 輸 入 的 資 料 未 經 檢 核 處 理 就 附 加 成 為 SQL 指 令 的 一 部 分, 這 就 是 大 名 鼎 鼎 的 SQL Injection( 資 料 隱 碼 ) 漏 洞 由 錯 誤 訊 息 來 看,UserInfo.asp 應 是 以 strsql= SELECT FROM UserInfoTableNameWHERE UserId= & Request( UserId ) 的 方 式 直 接 組 成 SQL 指 令, 讓 入 侵 者 連 處 理 單 引 號 的 功 夫 都 省 了 在 程 式 設 計 指 南 中, 動 態 決 定 SQL 指 令 的 方 法 有 兩 種 : 一 種 是 以 Ad-Hoc 方 式 組 合 出 SQL 指 令 字 串, 另 一 種 則 是 將 動 態 變 化 部 分 以 參 數 (Parameter) 方 式 傳 入, 例 如 : ADO 及 ADO.NET 裡 的 Command 物 件 均 有 Parameters 集 合 屬 性 一 般 會 建 議 使 用 後 者, 理 由 是 物 件 內 建 了 字 串 的 處 理 轉 換 功 能, 二 則 是 資 料 庫 不 必 每 次 重 新 解 析 編 譯 SQL 指 令, 對 效 能 也 有 所 助 益 寫 法 如 下 : ( 以 ADO.NET 為 例 ) SqlCommand cmd=new SqlCommand( SELECT FROM UserInfoTableNameWHERE UserId=@UserId,cn); cmd.parameters.add( @UserId,SqlDbType.VarChar).Value=Request[ UserId ]; 而 Ad-Hoc 式 的 動 態 SQL 指 令 字 串 並 非 完 全 不 能 用, 在 某 些 場 合 中, 它 的 確 是 較 便 捷 有 效 率 的 做 法, 只 是 在 使 用 時, 務 必 要 加 強 對 使 用 者 輸 入 的 資 料 的 檢 核 以 這 個 案 例 來 看, 由 於 UserId 被 設 定 是 純 數 字, 因 此 在 SQL 語 法 中 不 必 使 用 單 引 號, 但 是 由 於 Query String 傳 入 的 都 是 字 串 型 態, 它 有 可 能 是 空 字 串, 也 可 能 是 非 數 字, 因 此 較 嚴 謹 的 做 法 是 使 用 VB 的 IsNumeric 或 Regular Expression 檢 查 該 字 串 是 否 為 合 法 的 數 字 若 參 數 欄 位 的 類 別 是 (n)char (n)varchar 或 (n)text, 則 在 組 合 SQL 時, 要 記 得 用 單 引 號 將 參 數 內 容 字 串 夾 起 來, 並 要 留 意 參 數 內 容 中 包 含 單 引 號 時 的 特 別 處 理, 以 免 組 出 的 語 法 不 合 規 定 或 被 稙 入 惡 意 SQL 指 令 一 般 來 說, 用 以 下 的 寫 法 將 字 串 中 的 單 引 號 置 換 成 兩 個 單 引 號 即 可 : ( 以 ASP 為 例 ) strsql= SELECT FROM YourTableName WHERE TheField= & Replace(Request( UserInput ),, ) &

一 個 SQL Injection 實 例 的 啟 示 頁 5 / 6 問 題 5 使 用 者 可 透 過 查 詢 資 料 庫 取 得 密 碼 內 容 Password 欄 位 未 使 用 加 密 或 用 雜 湊 值 (Hash) 保 護, 導 致 有 心 人 可 由 資 料 庫 中 所 儲 存 的 欄 位 內 容 取 得 密 碼 其 中 使 用 雜 湊 值 又 比 加 密 法 更 安 全 一 些, 即 便 駭 客 已 掌 握 雜 湊 演 算 法, 也 無 法 由 欄 位 內 容 反 推 密 碼 針 對 密 碼 欄 位, 可 使 用 DES 甚 至 RSA 等 加 密 演 算 法 或 是 SHA1 MD5 等 常 用 的 雜 湊 值 取 代 密 碼 明 碼 儲 存 於 資 料 庫 中, 如 此 可 減 少 因 資 料 庫 內 容 外 洩 衍 生 的 風 險 還 會 發 生 什 麼 事? 雖 然 見 識 到 包 含 SQL Injection 漏 洞 的 知 名 網 站 讓 人 興 奮, 但 我 無 意 扮 演 駭 客 或 藉 著 入 侵 系 統 獲 利, 在 發 了 封 Mail 通 知 網 站 管 理 人 員 後, 對 該 網 站 的 邪 惡 測 試 就 此 打 住 ( 當 然, 多 少 得 壓 抑 滿 腔 的 熱 血 與 蠢 蠢 欲 動 的 雙 手 ) 然 而, 如 果 今 天 發 現 漏 洞 的 是 個 有 心 人, 後 面 還 會 有 多 少 故 事 呢? 1. 如 果 ASP 連 線 用 的 SQL 帳 號 有 dbo 權 限 入 侵 者 可 以 蒐 集 到 完 整 的 資 料 庫 情 報 (Table Schema), 列 出 所 有 的 資 料 表, 從 中 擷 取 更 有 價 值 的 資 料 ; 或 是 DELETE FROM TABLE DROP TABLE, 惡 搞 一 番 也 很 過 癮 2. 如 果 ASP 連 線 用 的 SQL 帳 號 是 sa 一 旦 取 得 sa 的 權 限, 可 玩 的 花 樣 就 更 多 了 : 可 以 呼 叫 SQL Server 的 特 殊 Stored Procedure, 執 行 DOS 指 令 讀 寫 Registry 將 Web Server 上 的 檔 案 打 包 傳 出 來, 或 是 刪 改 網 頁 內 容 再 不 然 稙 入 木 馬 程 式, 綁 架 伺 服 器 作 為 其 他 邪 惡 計 劃 的 根 據 地 亦 相 當 刺 激 以 上 這 些 狀 況, 絕 對 是 網 管 人 員 程 式 人 員 與 企 業 主 的 夢 魘, 而 問 題 的 源 頭, 只 因 為 區 區 一 行 程 式 沒 寫 好, 再 加 上 資 料 庫 帳 號 的 不 當 授 權, 當 場 萬 刧 不 復! ( 在 我 的 經 驗 中, 用 sa 當 成 程 式 資 料 庫 連 線 帳 號 的 朋 友 還 真 不 少!!) 2008 更 新 補 充 最 近 見 識 過 一 些 新 的 SQL Injection 攻 擊 概 念 傳 統 印 象 中,SQL Injection 要 設 法 取 得 欄 位 名 稱 訊, 以 偷 出 資 料 或 從 事 破 壞 為 樂 但 是 要 進 行 這 些 操 作, 通 常 得 仰 賴 網 站 傳 回 錯 誤 訊 息 的 細 節 才 能 提 供 繼 續 深 入 的 情 報 近 年 來, 很 多 網 站 預 設 都 已 開 啟 Custom Error Page, 讓 手 工 操 作 入 侵 的 難 度 變 高, 但 並 不 代 表 開 啟 隱 藏 錯 誤 訊 息 就 可 以 高 枕 無 憂 不 過, 也 開 發 現 一 些 新 的 攻 擊 趨 勢 : 1. 駭 客 圈 已 流 傳 一 些 現 成 的 SQL 注 入 工 具, 裡 面 已 針 對 ORACLE SQL MySQL Access 等 各 家 資 料 庫 寫 好 預 設 的 多 組 測 試 Script, 不 需 要 耐 性 過 人 也 不 必 做 苦 工, 交 給 工 具 快 速 試 過 一 輪 即 可 輕 鬆 得 手 再 配 合 Google 找 尋 獵 物, 亂 槍 打 鳥 之 下, 就 算 你 的 網 站 沒 什 麼 名 氣 都 可 能 中 鏢 2. 除 了 有 心 駭 客 設 法 要 破 解 網 站 盜 取 資 訊, 還 有 一 種 打 遊 擊 式 的 SQL Injection 攻 擊, 把 全 部 的 攻 擊 指 令 縮 成 一 行 QueryString, 四 處 亂 試 主 機, 成 功 就 爽 到, 失 敗 了 不 過 浪 費 幾 百 個 Bytes 的 頻 寬, 是 穩 賺 不 賠 的 生 意 而 攻 擊 指 令 是 假 設 資 料 庫 的 內 容 會 被 當 成 HTML 顯 示 在 網 站 上, 所 以 只 要 找 出 SQL 資 料 庫 中 所 有 的 varchar, nvarchar, ntext, text 欄 位, 在 後 方 加 上 一 段 <script src= 用 來 載 入 木 馬 的 js 檔 案 >, 就 可 以 將 網 站 當 成 感 染 源, 達 到 廣 種 木 馬 的 目 標 ( 這 類 木 馬 的 原 理 可 以 參 考

一 個 SQL Injection 實 例 的 啟 示 頁 6 / 6 http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/06/01/816.aspx, 通 常 只 要 勤 做 Windows Update 並 避 免 執 行 來 路 不 明 的 程 式 就 可 避 免 ) 結 論 在 SQL Injection 問 題 開 始 被 重 視 的 數 年 後, 依 然 能 在 實 務 網 站 上 與 它 不 期 而 遇, 興 奮 之 餘 也 有 幾 份 擔 憂, 不 禁 想 問,Internet 上 還 有 多 少 網 站 是 不 安 全 的? 會 不 會 有 我 的 身 家 資 料 就 存 放 其 中? 但 願 這 篇 文 章 多 少 能 突 顯 出 它 的 威 脅 性 及 潛 在 風 險, 有 助 於 減 少 類 似 的 情 境 再 度 上 演 最 後, 針 對 SQL Injection 的 防 範, 整 理 幾 則 設 計 網 站 時 的 注 意 事 項 : 1. 在 正 式 環 境 中, 善 用 客 製 化 錯 誤 訊 息 的 功 能, 避 免 將 錯 誤 訊 息 的 細 節 直 接 傳 送 給 使 用 者, 以 免 系 統 架 構 情 報 外 洩 2. 千 萬 不 要 信 任 使 用 者 所 輸 入 的 任 何 資 料, 每 一 個 輸 入 機 會 都 可 能 為 駭 客 所 用, 成 為 傳 入 惡 意 指 令 的 管 道 如 果 要 將 其 融 合 為 指 令 的 一 部 分, 必 須 在 格 式 驗 證 上 加 倍 小 心 3. 減 少 組 裝 SQL 指 令 字 串 (Ad-Hoc SQL) 的 程 式 設 計 方 式, 以 減 少 發 生 SQL Injection 的 風 險 改 用 Parameter 方 式 傳 入 動 態 參 數, 還 兼 有 提 升 效 能 的 好 處 4. 在 資 料 庫 帳 號 的 應 用 管 理 上, 避 免 過 度 授 權, 尤 其 sa 帳 號 實 在 沒 理 由 當 成 網 站 的 連 線 身 分, 授 與 連 線 帳 號 的 權 限 要 愈 少 愈 好, 以 勉 強 能 維 持 正 常 作 業 為 最 佳 參 考 資 料 參 考 資 料 1 - SQL Injection ( 資 料 隱 碼 ) 駭 客 的 SQL 填 空 遊 戲 http://www.microsoft.com/taiwan/sql/sql_injection_g1.htm 參 考 資 料 2 - 資 料 隱 碼 SQL Injection 的 因 應 與 防 範 之 道 http://www.microsoft.com/taiwan/sql/sql_injection.htm