XSLeaker 是一个帮助在网站上发现 XS-Leaks 的工具。该工具会比较不同状态下已知泄露技术对应的资源值(例如 iframe 的数量),以发现差异。
XSLeaker 由两个组件组成:一个用于在不同状态下收集资源值的 Chrome 扩展,以及一个用于比较和显示结果的 node.js 服务器。
该工具会检查以下资源值是否存在差异:
假设用户想要测试 n 个不同的状态,则必须完成以下设置:
为每个状态创建一个 Chrome 配置文件。由于配置文件可以重复使用,只有在需要测试超过 n 个状态时,用户才需要创建新的 Chrome 配置文件。
为每个配置文件安装 XSLeaker Chrome 扩展。
此设置只需完成一次,除非用户想要测试超过 n 个状态。
使用不同的配置文件打开 n 个浏览器窗口。
在每个窗口中激活浏览器扩展。这可以通过弹出窗口中的"Activate"(激活)按钮完成。
(可选)选择一个状态名称(例如 admin 账户)。建议这样做,因为这样可以更容易地在结果中识别各个状态。
为要测试的网站设置不同的状态,每个窗口对应一个状态(例如,以不同用户身份登录)。
选择一个窗口,并通过弹出窗口中的开关激活 Master Mode(主控模式)。其他窗口现在会跟随主控窗口的 URL 变化。
在主控窗口中,导航到要测试的网站。所有其他窗口都会导航到同一页面。
点击主控窗口弹出窗口中的"Send Results"(发送结果)按钮开始测试。
导航到由 Node.js 提供的 Web 界面(例如 http://localhost:3000)以检查差异。
对于同一网站的下一次测试,用户只需使用主控窗口导航到目标 URL,然后再次按下"Send Results"(发送结果)按钮即可。
点击图片查看 XSLeaker 的实际运行效果:
由 node.js 托管的 Web 界面包含以下页面:
Results(结果):显示最新的测试结果
History(历史记录):显示过去进行的所有测试。点击表格中的一行即可查看该测试的结果。
Automation(自动化):自动化页面允许用户上传要测试的 URL 列表。"Start Test"(开始测试)按钮会依次将每个已连接的浏览器窗口导航到一个 URL 并运行测试。结果可以在历史记录中查看。
注意: 你首先需要在不同的窗口中设置好要测试的状态。
目前存在一个 Bug,保存在数据库中的差异并不总是正确的。自动化测试后,请查看测试结果以仔细核对差异。
Test(测试):一个可用于测试 XSLeaker 是否正常工作的测试台。在 http://localhost:3000/tests 上可以选择一个状态,然后可以设置与该状态相关的属性。当打开多个具有不同状态的浏览器窗口后,请使用主控窗口导航到测试站点(http://localhost:3000/tests/testsite)并运行测试。

上图展示了 XSLeaker 的架构。具有不同状态的各个浏览器窗口通过 WebSockets 连接到 node.js 应用程序。服务器提供了一个 Web 界面,用户可以在其中查看测试结果(参见 XSLeaker Web 界面)。服务器将测试结果保存在 SQLite 数据库中。