【你不知道的JavaScript用法,Hacker是这样写JS的
Wednesday, November 1, 2017
6:21 PM
IT程序猿
11/01/2017
【你不知道的JavaScript用法,Hacker是这样写JS的】干货分享!详见http://t.cn/RWXhmRO(来自:OurJS)
![你 不 知 道 的 JavaScriptX 法 Hacker 是 氵 玄 扌 羊 写 」 S 的 2017 一 10 一 19 15 : 22 : 49 [ T 程 00t 〔 odemonkey 还 om 作 注 XSSıDCross Site Scripting , 通 在 页 钅 过 箬 地 址 L 吊 中 注 入 」 S 代 码 来 达 到 攻 击 手 段 , 很 多 大 厂 都 中 《 如 : Twitter, 新 浪 黴 恒 示 莎 } 代 码 : http://www.demo.cn/= 其 比 亻 弋 碼 并 刁 《 能 在 祈 有 浏 览 器 上 执 行 , 但 仅 需 要 一 部 分 氵 刘 览 器 ( 如 IE 的 可 用 , 即 可 达 到 攻 击 效 果 . 苎 前 很 多 站 都 芎 目 动 过 地 XSS 代 码 的 功 能 , 此 文 即 分 硭 了 一 些 如 何 屏 XSS 过 还 器 的 手 , 其 我 们 可 L 以 现 , 大 多 数 在 前 端 执 行 的 XSS 过 还 都 是 不 安 金 的 汶 灯 于 我 们 在 防 范 XSS 攻 击 时 有 一 定 的 借 意 义 . 引 我 喜 欢 以 一 种 0 想 不 到 的 方 式 使 雄 」 avaS “ ipt , 写 出 一 匙 看 起 来 奇 旦 其 实 很 管 的 代 码 , 这 代 码 帛 帛 能 够 执 行 一 此 出 丿 、 料 功 能 。 这 昕 起 来 似 平 有 匙 不 足 , 仁 是 基 于 发 现 足 以 出 一 些 菲 帛 有 厍 的 程 技 巧 。 下 面 写 到 的 每 一 个 小 技 巧 都 可 以 屏 两 掉 XSS 过 滤 器 , 这 也 是 我 巪 代 码 的 初 衷 。 然 而 , 字 习 样 的 」 avaScript 代 码 可 以 明 显 力 L 喔 你 对 浯 本 身 的 草 喔 帮 助 你 更 好 地 处 理 输 入 , 荇 且 提 高 eb 应 厍 程 序 的 安 全 性 。 下 面 就 满 看 这 些 令 丿 划 京 异 的 」 avaScript 代 码 吧 ! 正 则 表 达 式 替 换 可 执 行 代 码 当 到 带 有 r 印 《 e 的 正 则 表 达 式 时 , 第 二 . 个 数 支 恃 丞 釵 值 。 GOpera 中 可 以 利 这 个 畢 执 行 代 码 。 例 如 下 面 这 个 代 码 片 段 : •XSS 。 .repIace(/XSS/g , alert) 这 个 执 行 的 果 将 等 价 于 a 呶 ‘XSS’ ) ; 产 生 这 种 现 象 的 原 因 是 正 则 表 达 式 的 匹 配 顶 被 被 当 成 一 个 数 , 传 涕 到 了 alertZ 一 般 惜 况 下 , 在 匹 配 立 本 上 你 參 厍 一 个 丞 数 调 另 一 段 代 码 , 像 这 样 到 somestring••rep1ace(/some/,function(S1){ / 00 5 0佣@亡 , 二 ne 二 5 0 仁 是 , 正 如 在 第 一 . 个 例 子 中 所 看 到 的 , 我 们 执 行 了 一 个 本 地 , 而 不 是 户 过 义 丞 数 , 荇 且 数 三 正 则 表 达 式 传 涕 到 了 本 地 调 厍 。 这 是 . 个 很 酷 的 技 巧 , 可 以 屏 两 掉 一 些 XSSIÄIE%, 例 如 先 巪 一 个 享 符 , 冉 跟 一 个 卩 灬 接 昔 就 可 以 调 亻 壬 呵 你 想 调 的 丞 数 就 。 为 了 看 一 看 这 个 在 XSS 环 中 是 怎 么 使 雄 的 , 想 象 一 下 : 我 们 在 享 符 中 有 段 耒 过 滤 的 攻 击 代 码 , 可 EJavaSaipt$ 亻 牛 或 者 是 s 酾 pt 标 签 , 即 这 个 享 符 中 出 现 了 一 个 注 , “ 苜 先 , 我 们 注 , \ 一 . 个 有 效 的 丞 数 a 呶 1 ) 接 我 们 奕 破 这 个 引 号 的 眼 制 后 冉 写 我 们 的 正 则 表 达 式 replace(/ . / , eval 》 注 意 我 在 里 雄 了 eva 《 丞 数 执 行 我 想 执 行 的 任 呵 代 码 , 荇 且 为 了 使 攻 击 代 码 传 涕 名 eval, 正 则 表 达 0 必 须 匹 配 所 有 顶 。 如 果 我 吧 所 有 的 代 码 万 茌 一 起 , 展 示 这 个 页 的 输 出 这 样 的 话 就 參 更 容 易 理 这 个 过 程 页 输 出 上 面 的 代 码 在 分 析 脚 本 中 很 帛 见 , 你 上 索 的 所 有 享 符 都 被 一 些 广 告 公 0 储 存 茌 样 的 分 析 脚 本 中 。 你 可 能 沿 有 注 意 到 这 些 脚 本 , 仁 是 如 果 你 观 粼 一 个 Web 页 面 的 源 0 小 发 现 这 是 经 帛 出 现 的 。 另 外 , 论 坛 也 是 一 个 经 帛 到 这 些 脚 本 的 地 方 。 “YOURINPUT” 是 你 所 控 制 的 享 符 。 如 果 输 丿 、 殳 有 被 正 确 过 滤 时 , 这 也 将 被 称 为 基 于 DOM 的 XSS 注 入 。 ( 注 . DOM , 将 HTML 立 尴 表 达 为 构 , 湮 帛 指 HTMLÉät , 要 考 虑 i 函 虑 尽 能 多 的 编 码 方 法 。 就 像 在 这 个 例 子 中 看 到 的 , 这 不 是 个 容 易 的 工 JavaScript%tfi 器 引 擎 」 avaS “ ipt 是 一 个 彐 E 帛 动 态 的 浯 。 可 以 执 行 很 大 畢 的 代 码 。 这 些 代 码 第 一 眼 看 趟 来 似 乎 不 能 执 行 , 然 而 一 旦 理 了 解 析 器 工 作 的 原 理 , 你 就 能 够 逐 渐 三 里 它 背 后 的 逻 辑 。 」 avaSaipt 在 丞 数 执 彳 丁 之 前 是 不 知 丞 数 果 的 , 荇 且 很 明 显 它 必 须 湮 过 调 丞 数 返 回 变 畢 的 类 型 。 凤 点 很 有 趣 , 举 个 例 子 . 如 果 返 回 丞 数 不 能 返 回 代 码 块 的 一 , 有 效 值 , 就 參 在 丞 数 执 行 之 后 出 现 浯 法 满 误 。 说 的 到 底 是 什 么 0 想 呢 ? 好 吧 ! 代 码 比 空 谈 更 有 说 服 力 看 下 面 的 例 子 •alert(l)- ert 丞 数 执 行 后 , 返 回 一 一 个 耒 过 义 的 畢 然 而 已 经 有 些 太 晚 了 浯 法 满 误 亚 刻 就 參 出 现 , 这 是 因 为 ; 纍 作 符 的 噪 作 数 应 该 是 一 个 数 字 。 下 面 是 一 此 不 參 产 生 惜 误 的 例 子 _alert(l) Malert(l) alert(l)>>>/abc/ 你 可 能 认 为 上 面 的 例 子 沿 有 什 么 意 义 , 仁 是 实 际 上 它 们 深 刻 体 现 了 」 avaSaipt 的 工 作 过 程 。 一 旦 你 理 了 这 些 紕 节 」 avaS “ ip 到 玄 个 大 家 伙 就 变 得 氵 晰 , 了 解 代 码 的 执 行 方 式 可 以 帮 助 你 三 里 解 析 器 是 怎 么 工 作 的 。 我 觉 得 这 类 例 子 茌 迴 浯 法 满 误 , 检 测 基 于 DOM 的 XS & 攻 击 和 检 测 XSS 过 滤 器 的 时 亻 很 有 厍 。 Throw, De te 还 有 什 么 ? 你 可 以 雄 想 不 到 的 方 式 i 拄 行 删 除 躒 作 , 这 參 产 生 一 匙 很 古 怪 的 浯 法 。 让 我 们 看 看 将 throw , d 引 e 怡 , not 和 ty 西 of 噪 作 符 组 台 在 一 起 发 生 什 么 ? -—alert(l) 你 可 能 认 为 这 旬 代 码 不 能 运 行 是 可 以 的 , 仍 旧 能 够 执 行 alert(l) 这 几 有 一 些 更 多 的 例 子 —[a=alert]/v a(l) 仁 入 过 生 丞 数 调 d ete 却 [a—alert], 第 一 眼 满 过 去 , 你 參 认 为 这 样 的 代 码 有 浯 法 惜 误 , 仁 是 当 你 仔 紕 分 析 后 , 你 觉 得 有 几 分 i 里 。 解 析 器 卉 发 现 一 个 且 丙 部 的 变 蒜 值 , 执 行 值 噪 作 后 删 除 数 。 同 样 地 , 删 除 噪 作 是 茌 一 个 丞 数 ( 注 [a-alert] ) 调 厍 之 后 因 为 删 除 噪 作 要 在 知 丞 数 执 行 果 的 惜 况 下 , 才 能 删 除 返 回 的 对 象 , 即 使 返 回 的 是 NULL 。 同 时 , 这 些 代 码 可 以 厍 来 屏 两 XSS 过 滤 器 , 因 为 它 们 经 帛 尝 试 昔 匹 配 有 效 的 浯 法 , 不 希 望 代 码 太 涩 。 当 你 的 应 生 程 序 《 拄 行 数 廡 验 i 正 的 时 候 , 你 应 该 考 虑 ; 玄 样 的 例 子 。 声 明 全 局 对 象 茌 屏 两 XSS 过 滤 器 的 恃 定 实 例 中 , 攻 击 代 码 经 帛 0 藏 在 一 个 类 似 荬 浯 立 本 中 的 变 畢 中 。 跽 明 的 系 统 如 PHP ] DS , 可 以 使 生 浯 法 分 析 去 比 判 断 访 问 求 是 否 是 恶 0 攻 击 , 所 以 这 是 测 试 些 系 统 很 有 的 方 法 。 仅 使 雄 全 局 对 象 或 丞 数 时 , 能 够 产 生 类 似 荬 立 的 代 码 块 。 事 实 上 在 s ckers 安 全 沦 坛 上 , 我 们 可 以 玩 个 小 游 戏 , 厍 」 avaS 酾 pt 形 式 产 生 类 似 荬 浯 的 旬 子 。 为 了 了 解 这 是 怎 么 一 回 事 , 看 下 面 的 例 子 stop, open, print alert(l) 我 己 杜 了 个 名 字 , OU&Javascriptlish, 因 为 它 可 以 产 生 一 匙 看 起 来 很 不 可 思 议 的 代 码 : Javascrlpt language fun : [•never weird & wonderful 我 们 使 生 正 则 表 达 式 / is / 跟 上 一 个 孑 纍 作 符 ^ 接 昔 创 造 一 个 对 {a : ‘weird’ } 有 a 届 性 和 过 值 weird ) 。 在 我 们 刚 刚 创 造 的 对 象 中 寻 找 . & wonde 而 尸 届 性 , 这 个 届 性 接 被 一 享 符 分 开 。 接 下 来 我 们 一 个 命 名 为 the fun 的 标 识 和 一 个 带 有 never 的 数 组 , 用 一 个 命 名 为 stop 的 全 局 丞 数 s 一 的 届 性 , 所 有 这 匙 都 是 正 确 的 浯 法 。 Getters/Setters_R 当 火 狐 增 加 custom syntaxforsettersä , 屏 两 了 一 不 使 圆 括 弧 的 有 趣 XSS 注 , “ Opera 还 不 支 恃 过 义 浯 法 一 “ 从 安 全 角 度 来 说 , 这 是 , 优 点 但 对 」 avaS “ ipt 黑 客 来 说 却 不 是 个 好 虺 息 。 然而0西ra支丰手标准 的 defineSettenÉj, 这 使 我 们 能 眵 湮 辽 蒜 值 以 达 到 调 厍 丞 数 的 目 的 , 说 起 来 对 屏 两 XSS 过 滤 器 来 说 也 有 匙 作 厍 。 defineSetter(•x•,alert) ; X = 1 ; 假如 亻 笊 不 了 setters/getters , 那 么 上 面 的 例 子 就 是 为 全 局 变 畢 x 创 造 了 一 个 设 值 丞 数 。 当 一 个 变 量 被 设 定 时 就 设 值 丞 数 。 第 二 个 爹 数 a rt 是 丞 数 调 过 值 。 这 样 当 过 蒜 值 成 1 时 , 就 參 括 厍 a 丞 数 , 荇 吧 1 作 为 数 。 Location 允 许 urlß 〕 囝 tion 翼 寸 象 允 许 七 rl 」 avaScript 编 码 。 汊 允 讠 千 你 i i 莖 双 重 编 码 进 一 步 扌 奄 旆 XSS 注 , \ 。 locatlon=’javascrlpt : % 51 乇 [ 55 72 % 74 % 28 % 31 % 29 到 将 它 们 与 转 义 享 符 台 能 够 很 好 地 0 藏 享 符 。 10 [ atlon 到 ] avas 〔 rI : % 5 [ 75 % 39 % 33 % 35 % 31 5 ( % 75 % 33 % 33 % 36 53 % 5 ( 75 % 32 % 33 % 35 % 35 SC % 75 % 33 % 39 % 37 32 % 5 ( % 75 % 33 % 32 37 % 34 ( 1 ) · 第 一 . 个 例 子 是 可 行 的 , 因 为 Opera 的 t 也 址 样 可 以 识 别 码 的 t 也 址 。 湮 过 雄 URL 编 码 , 你 可 以 ZavaScript 代 码。 这 点 很 有 , 引 是 当 传 涕 XSS 攻 击 代 码 的 时 候 , 我 们 为 了 更 进 一 步 地 屏 蔽 0 滤 , 可 以 拄 行 双 重 URL 编 码 。 第 二 . 个 例 子 台 了 第 一 , 例 子 利 转 义 享 符 的 技 巧 。 所 以 , 当 你 对 享 符 解 码 时 , 就 參 导 数 a rt 丞 数 以 这 样 的 形 式 显 \ 《 虍 351 \ u326C \ u2955 \ u2372 \ u2974 注 * a EASCII$E%Ox61 来 目 : OurJS , 英 文 原 , 作 者 : garethheyes 酗 译 : Tianyi_Ting 校 核 : myownghost](https://cdn.nlark.com/yuque/0/2021/jpg/3018302/1639544601092-64824b74-437f-4b0e-a0da-98a05dc0e3f8.jpg)
查看源微博
已使用 Microsoft OneNote 2016 创建。
