Android渗透-WebView攻击
文章目录
- 前言
- 一 webview intent 注入
- 二、Android-InsecureBankv2
- 1、Decompiling Android Applications
- 2、Patching Android Application
- 3、Android Debugging using JDWP
- Bypass Android Root Detection
- Developer Backdoors
- Exploiting Android Keyboard Cache
- Exploiting Android Activities
- Exploiting Android Backup Functionality
- Exploiting Android Broadcast Receivers
- Exploiting Android Content Provider
- Exploiting Android Pasteboard
- Exploiting Weak Cryptography
- Insecure Logging
- Intent Sniffing
- Proxying Android Traffic on Device
- Reading Android Memory
- Using Apktool – APK to Smali
- 本地文件污染
- 后记
前言
参考文章:https://cn-sec.com/archives/277326.html
一 webview intent 注入
靶机地址:https://github.com/harshitrajpal/VulnerableWebView
这里的apk会利用一个activity组件去访问内置web页面。apk内容如下:
把apk扔进jadx里找包名“com.example.webviewexample”(我一般是直接这样找到AndroidManifest.xml)。
再全局搜索访问的ur“hackingarticles.in”。
这里理解的是:MainActivity里定义了url,然后MainActivity会在调用组件webViewActiviry时传url1
intent中提供一系列的putExtra()方法的重载,可以把想要传递的数据暂存在intent中,当另一个活动启动后,再把这些数据从intent缓存中取出即可。
putExtra(“A”, B)方法中,AB为键值对,第一个参数为键名,第二个参数为键对应的值,这个值才是真正要传递的数据
再看webViewActivity:接收了url1,允许setJavaScriptEnabled(允许js),最后加载url1
使用drozer查看暴露的组件:
(这一步应该在分析Activity之前就做了。从暴露的组件开始找更符合思路。)
发现被调用的webViewAcitivity刚好暴露着
尝试调用它
run app.activity.start --component com.example.webviewexample com.example.webviewexample.WebViewActivity --extra string url1 https://www.csdn.net
如果别的软件利用了靶机暴露的组件执行intent就可以实现攻击了。
比如浏览器访问含intent的页面。。。。。但是死活没调成功
二、Android-InsecureBankv2
靶机地址:https://github.com/dineshshetty/Android-InsecureBankv2
服务端我在ubuntu下运行的,Windows下报错起不来。
客户端右上角配置服务器地址
1、Decompiling Android Applications
没得说,apktools反编译就行。要注意的是apk一定要签名才能安装(可以自定义签名主体)。
反编译出的源码可用于后续测试。
2、Patching Android Application
源码里泄露个创建账号的功能,判定is_admin
反编译的包内搜索is_admin。找到了string.xml,修改默认值再打包就行了
3、Android Debugging using JDWP
adb连接后,cmd输入adb jdwp能看到当前可调试的jdwp进程。如果进程多,就可以运行前后都列出一次对比下
连接时需注意Windows下这样:
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=12345
可用classes列出已知类
后续命令(做断点)
methods com.android.insecurebankv2.PostLogin
stop in com.android.insecurebankv2.PostLogin.showRootStatus()
设置好断点了,手机点击登录。这时候cmd就能看到调试信息了
输入下step,再locals就能查看当前变量了
可以一直step,直到看到:
“thread=main”, com.android.insecurebankv2.PostLogin.showRootStatus(), line=88 bci=16’
(调试次数太多了没找到。也可以step up替换step跳的更快)
step 执行当前行
step up 一直执行, 直到当前方法返回到其调用方
Bypass Android Root Detection
和上述is_admin修改一样,改源码冲打包
发现点是登录的时候有句话:
按着这句话去反编译的包里找:
像作者这样改个恒真就行
Developer Backdoors
查看登录处源码,找到预留账号,指定账号任意密码登录
Exploiting Android Keyboard Cache
用户名输入框复制的时候,有键盘缓存
su u0_a50 service call clipboard 2 s16 com.android.insecurebankv2
能看到一些数据缓存。没想到有啥可用的
Exploiting Android Activities
就是drozer导出一些组件,然后运行暴露的activity组件。
这个问题在于组件本身是只给apk自身调用的。如果写暴露出来就是任意程序都能调用它。
例如这个组件登录成果后才能看,如果直接调用就能直接看了
dz> run app.activity.start --componen com.android.insecurebankv2 com.android.insecurebankv2.ViewStatement
但是调用后还是看不到的,也算是有问题
Exploiting Android Backup Functionality
AndroidManifest.xml内allow_backup=true时apk可以备份出去
导出命令:
adb backup –apk –shared com.android.insecurebankv2
然后就生成一个xxx.db文件
adb连接另一设备,开始还原:
adb restore xxx.db
Exploiting Android Broadcast Receivers
和暴露activity组件一样,这是利用的broadcast组件
需要根据暴露的broadcast,找对应的源码,就能找到intent语法了
这里示例是:
dz> run app.broadcast.send --action theBroadcast --component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver --extra string phonenumber 1234 --extra string newpass Dinesh@123!
Exploiting Android Content Provider
暴露content probider组件
要注意的是drozer导出uri,adb列出uri
Exploiting Android Pasteboard
这跟数据缓存 keyboard cache差不多吧
Exploiting Weak Cryptography
数据弱加密,也是审源码的时候发现的。算是加密方式泄露
有个小tips是抓包找到登录的接口api,根据这个值再去搜源码会快点
然后找到加密的布置
再搜下找到算法
Insecure Logging
adb shell 下执行logcat就行
就是日志会异常的多,这里建议是可以先ps看下对应pid,然后grep会少些。
为了方便一般是在事件前(比如这个登录)多来点空格标识下好找
Intent Sniffing
我觉得是用intent sniffing这个apk去嗅探intent语句,只是现在没找到或者没编译好,没做出
Proxying Android Traffic on Device
能burp、charles抓到包就行。似乎叫弱证书认证
Reading Android Memory
本地文件搜索存留的东西
搜本地文件就行,adb里find或者手机里搜。这次的是用户名密码本地存储。有些手势密码本地也是这么找
Using Apktool – APK to Smali
没得说 反编译。或者改成zip解压看classes.dex
本地文件污染
记得还有个漏洞(在旧版的银行靶机上看的),是运行时会加载本地一个html文件
可以从logcat里看到,或者审源码的时候会有个html。
思路是如果这个html会被污染了,本地查看的时候能加载到就是有问题了。要是还运行js脚本就更多问题
后记
漏洞比较多,也不难,有些出问题的记了下。
建议看下靶机项目里面的write-up,读读。
靶机思路不错。菜鸟继续学习。