跳转至

Index

已启用 Webview 远程调试

描述

Webview使用setWebContentsDebuggingEnabled API公开远程调试。该 API 是在 API 19 中引入的。

Webview 调试使用 Chrome Debug Protocol,并通过一个命名的抽象 unix 套接字公开。套接字名称为 webview_devtools_remotewebview_devtools_remote_<pid>

要确认套接字是否在您的设备上公开,您可以使用 netstat -untapexW 命令,并搜索目标应用程序或 @ 符号(用于表示抽象套接字)。

抽象套接字不使用文件系统权限来强制执行访问,因此可供设备上的所有应用程序访问。

为了演示对套接字的访问,您可以使用 socat 二进制文件来暴露抽象套接字:

./socat TCP-LISTEN:9999,fork ABSTRACT:webview_devtools_remote_3483

可以本地访问9999端口,或者出于测试目的使用adb进行转发:

adb forward tcp:9999 tcp:9999

要访问远程协议,请使用 Chrome Debug Protocol 客户端,如 pychrome

import pychrome

# 连接到暴露端口上的 webview。
browser = pychrome.Browser(url="http://127.0.0.1:9999")
t = browser.list_tab()[0]
t.start()
t.DOM.enable()

# 访问文档。
t.DOM.getDocument()

建议

setWebContentsDebuggingEnabled 设置为 false,或者仅在应用程序处于调试模式时将其设置为 true

示例:

    if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)) {
    WebView.setWebContentsDebuggingEnabled(true);
  }

链接

标准

  • OWASP_MASVS_L1:
    • MSTG_CODE_2
    • MSTG_CODE_4
  • OWASP_MASVS_L2:
    • MSTG_CODE_2
    • MSTG_CODE_4
  • PCI_STANDARDS:
    • REQ_1_2
    • REQ_2_2
    • REQ_6_2
    • REQ_6_3
    • REQ_11_3
  • OWASP_MASVS_v2_1:
    • MASVS_PLATFORM_2
    • MASVS_RESILIENCE_3
  • HIPAA_CONTROLS:
    • SECURITY212
    • SECURITY213
    • SECURITY255