百度手机助手可通过某导出组件来启动某私有组件,进而调用该组件webview中的接口。
EmptyActivity
通过设置extraction为goto_page和jump_config的type为4可启动CommonWebViewActivity并加载intent指定的url。
CommonWebViewActivity的AppSearchWebView通过addJavascriptInterface添加了appclient接口。
该接口提供的方法如下
该接口的大多数方法根据isOutUser方法的返回值是否为false来决定是否继续调用,如startServiceIntent
查看代码发现设置url的ju参数值为1可让isOutUser方法的返回值为false
@JavascriptInterface public boolean startActivityIntent(String arg4)
@JavascriptInterface public boolean startBroadcastIntent(String arg4)
@JavascriptInterface public boolean startServiceIntent(String arg4)
上面3个方法可以启动activity,service和发送广播。
通过SilentInstallService和SilentUninstallService可以静默安装和卸载app。
当没有root权限时百度手机助手会请求root权限,如果已经获取root权限则直接静默执行。
启动SilentInstallService时,从intent提取数据封装成InstallTask。
之后调用InstallTask的a方法获取apk文件路径(v0_1),调用pm install安装apk。
通过上面的代码发现,只要闭合两边的单引号就可以注入执行任意代码,如下可执行busybox nc -ll -p 6666 -e /system/bin/sh
通过Intent URI scheme可远程利用,POC如下。
baidudemo.html
除了上面的方法,还有很多方法可以利用。
getAccountInfo可以获取用户信息,比如uid和bduss。
sendSMS可以用来静默发送短信。
7.0之前的版本还可以用downloadFile来自动下载安装app。