modified | Thursday 1 May 2025 |
---|
Friday, April 16, 2021 at 17:38
反 制 Webdriver - 从 Bot 到 RCE 进 发
LORexxar
LoRexxar「s Blog
4 月 12 号 ,@cursered 在 starlabs 上 公 开 了 一 篇 文 章 《You Talking To
Me3》 , 里 面 分 享 了 关 于 Webdriver 的 一 些 机 制 以 及 安 全 问 题 , 通 过 一
训 成 功 实 现 了 对 Webdriver 的 RCE, 我 们 就 顺 着 文 章 的 思 路 来
感 谢 蓝 猫 师 傅 @cursered 在 复 现 过 程 中 的 很 多 帮 助 ~
什 么 是 Webdriver?
仪 TFS 河 由 Selenium 主 持 。 具 体 的 协 议 标 准 可 以
http://code.google.com/p/selen…
_Reference 查 看 。
通 俗 的 讲 ,WebDriver 就 是 一 个 阉割 版 的 浏 览 器 , 他 提 供 了 用 于 自 动 化
控 制 浏 览 器 的 协 议 和 接 口 。
你 可 以 通 过 https://chromedriver.chromium.… 来 下 载
chrome 版 本 的 Webdriver, 其 中 chrome 还 提 供 了 headless 模 式 以 供 没 有
桌 面 系 统 的 服 务 器 运 行 。
二 般 来 说 ,Webdriver 应 用 于 爬 虫 等 需 要 大 范 围 Web 请 求 扫 描 的 场 景 ,
在 安 全 领 域 , 扫 描 器 一 般 都 需 要 通 过 selenium 来 控 制 webdriver 完 成 前
置 扫 描 。 在 CTF 当 中 , 我 们 也 能 常 常 见 到 通 过 控 制 Webdriver 来 访 问
xSS 押 战 的 XSS Bot,
往 宅 全 砂 场 , 扫 振 砚 一 航 郡 需 有 8 胡 矾 S e
置 扫 描 。 在 CTF 当 中 , 我 们 也 能 常 常 见 到 通 过 控 制 Webdriver 来 访 问
XSS 挑 战 的 XSS Bot.
这 里 我 借 用 一 张 原 博 的 图 来 描 述 一 下 Webdriver 是 如 何 工 作 的 。
E Eouueulsaut chrome
Run chromedriver Started on random port
Start a new session P0ST /session “Run Chrome –remote-debugging-port-8 Started on random port
Navigate to example.com PosT /session/tsessionidi/arl _Navigate to example.com CDP: Page.navigate Navigate to example.com
Execute script P0ST /session/tsessionidi/execute “Execute script CDP: Runtine.evaluate Execute script
Quit session 0ELETE /session/ tsessionid} Quit Chrome
Quit chromedriver 6ET /shutdow _Quit chromedriver
在 整 个 流 程 当 中 ,Selenium 端 点 通 过 向 Webdriver 端 口 相 应 的 seesion 接
口 发 送 请 求 控 制 webdriver, webdrivef 通 过 预 定 的 谒 试 接 口 以 及 相 应 的
协 议 来 和 浏 览 器 交 互 ( 如 Chrome 通 过 Chrome DevTools Protocol 来 交
o
由 于 不 同 的 浏 览 器 厂 商 都 定 义 了 自 己 的 driver, 因 此 不 同 的 浏 览 器 和
driver 之 间 使 用 的 协 议 可 能 会 有 所 不 同 。 比 如 Chrome 就 是 用 Chrome
DevTools Protocol。
WebDriver Client WebDriver Server Browser
9515 chromedriver Chrome DevTools Protocol 9222 【euuts
型 蝠 geckodriver Marionette Protocol E Firefox
Selenium WehDriver WebDriver Protocol 9515 MS We o 9772 MS Edoe
t
DevTools Protocol。
WebDriver Client WebDriver Server Browser |
Chrome DevTools Protocol 9222 【euut
Marionette Protocol 2828 Firefox
e2Drverprotocpl Chrome DevTools Protocol “ 月 MS Edge
Chrome DevTools Protocol E Opera
7855 Safaridriver XPC Service
当 然 , 需 要 注 意 的 是 , 这 里 提 到 的 端 口 为 启 动 webdriver 时 的 默 认 端
园 我 们 通 过 selenium 操 作 的 Webdriver 将 会 启 动 在 随 机 端
口 上 。
总 之 , 在 正 常 通 过 Selenium 开 启 的 webdriver 的 主 机 上 , 将 会 开 放 两 个
端 口 , 一 个 是 提 供 selenium 操 作 webdriver 的 REST API 服 务 , 一 个 则 是
通 过 某 种 协 议 操 作 浏 览 器 的 服 务 端 口 。
这 里 我 们 用 一 个 普 通 的 python3 脚 本 来 启 动 一 个 webdriver 来 确 认 这 个 结
婆 。
1
2
3
4
5
水 !/usr/bin/eny python
水 -*A- _coding:utE-8 *
import selenium
水 !/usr/bin/eny python
水 -*A- _coding:utE-8 *
import selenium
from Selenium import webdriver
from Selenium.webdriver .common.keys import Keys
from Selenium.common.exceptions import NebDriverException
import os
ao a 0 一 山 N 巳
9 “chromedriver =“./chromedriver_win32.exe“
10
11 browser = webdriver.Chrome(executable_path=chromedriver)
12 ur1 =“https://Lorexxar .cn“「
13 browser.get(ur1)
14 水 browser.quit( )
在 脚 本 执 行 后 显 示 的 日 志 中 的 端 口 为 CDP 端 口
PS C:MUsers\Lorex\Desktop> python3 .\bottest .py
DevTooLs Listening on ws://127.8.8.1:13279/devtooLs/browser/82b7fTcc-4f39-49b2-~ae29-38fcaf4b7d86
通 过 查 看 进 程 其 中 命 令 可 以 确 认 webdriver 的 端 口
番 chromedriver win32.exe:25352 Properties 5 口 关
Threads TCP/IP Security Environment Job Strings
Image Performance Performance Graph GPU Graph
Image File
Version: “ n/a
Build Time: Wed J]an 27 10:42:15 2021
在 了 解 了 Webdriver 基 础 之 后 , 我 们 一 起 来 探 讨 一 些 整 个 流 程 中 到 底 有
什 么 样 得 安 全 隐 患 。
任 意 文 件 读 ?
如 果 对 Chrome DevTools Protocol 有 一 些 简 单 的 了 解 的 话 , 不 难 发 现 他
本 身 提 供 了 一 些 接 口 来 允 许 你 自 动 化 的 操 作 webdriver。 通 过 访
问 /jsonylist 可 以 获 取 到 所 有 的 浏 览 器 实 例 接 口 。
@ 127.0.0.1:13279/jsonylist X 十
上 C “@ 127.0.0.1:13279/jsonylist
Chrome 正 受 到 自 动 测 试 软 件 的 控 制 . 一 、
[
“description : “
“devtoolsFzontendUrl“:“/devtools/inspector, html?ws=127. 0. 0. 1:13279/devtools/page/6FB0C4CBA43ECB834B44DB87317DC4B07,
“id : “6FB0C4CBA43ECB83AB44DB87317DC4B07,
“title“:“Inspectable pages“,
“type : “page ,
“url“: “http://127.0.0.1:13279/ jsony list“
“webSocketDebuggerUz1“: “ws://127.0. 0. 1:13279/devtools/page/6FB0C4CBA43ECB834B44DB87317DC4B0“
八
通 过 这 里 的 webSocketDebuggerUrl 得 到 相 应 的 接 口 路 径 , 然 后 我 们 可
以 通 过 websocket 来 和 这 个 接 口 进 行 交 互 实 现 CDP 的 所 有 功 能 。 例 如 我
们 可 以 通 过 Page.navigate 访 问 相 应 的 url, 包 括 file 协 议
@ C\ 的 索引 X 十
上 C “@ 文 件 | Cy
Chrome 正 受 到 自 动 测 试 软 件 的 控 制 。