IMG_9635.txt.txt
Edited: 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 正 受 到 自 动 测 试 软 件 的 控 制 。

Backlinks