android渗透培训--apk渗透测试方法-基础
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安卓App渗透测试方法--基础
1.基本设置
1.1 ADB连接:
模拟器自带开启ADB服务,电脑使用 adb devcies 即可查看存在的模拟器
1.1.1.手机WIFI
(1)准备条件:手机必须已经root,下载一个终端模拟器用于输入命令。
(2)手机接入wifi。
(3)运行终端模拟器开始绑定adb端口,依次输入以下命令:
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd
(4)获取手机内网IP,可以直接在终端模拟器输入 netcfg /ip a来查看,或者通过你的wifi管理后台查看。
1.1.2电脑
adb connect 172.17.233.2:5555
adb devices
adb shell
安装软件
将apk放到platform文件夹中(可将adb加入系统环境变量,就不必每次切换到platform目录)
adb install aa.apk
1.2设置代理
1.2.1模拟器-设置emulator代理:
emulator.exe -http-proxy 127.0.0.1:8888 @Android422
错误提示:FATAL:.//android/base/sockets/SocketWaiter.cpp:88:Check failed: isValidFd(fd). fd 1032 max1024
解决方法:
添加-no-audio
emulator.exe -http-proxy 127.0.0.1:8888 -no-audio @Android422
或
虚拟机内设置代理
setting--APN
10.0.2.2:8888
1.2.2 手机wifi设置代理
setting-wifi-修改-代理-手动
主机名:电脑ip 端口:8888
2.渗透测试工具配置
2.1 drozer 配置
adb forward tcp:31415 tcp:31415 //drozer的端口是31415,所以要做端口转发
然后在模拟器上运行droxer Agent,打开drozer 服务(需要安装drozer-agent apk)
drozer console connect 手机ip //drozer 连接
注:除了drozer,渗透测试框架还有:mercury,appie等,使用方法类似。
3.渗透测试方法
3.1查看本地存储
3.1.1 Shared Preferences
Shared Preferences是用key-value 来存储私有的原始数据的 xml文件 /data/data/<package name>/shared_prefs/<filename.xml> 。
3.1.2 SQLite 数据库
/data/data/<package name>/databases/<databasename.db> 操作:
进入命令行 adb shell
复制文件(用adb命令手机-->电脑)adb pull
data/data/com.zufangbao.wap.android/databases/webview.db f:/ sqlite3 xx.db 查看某个数据库
.tables 查看数据库中的表
select * from talbes; 查询表的内容
.exit 退出
3.1.3 查看SD卡
是否储存app的图片或缓存文件
ls /sdcard/
3.2 查看日志中是否存在敏感信息
查看日志中是否存在敏感信息
命令:adb logcat
-v verbose 打印详细
-d debug 打印调试级日志
-I information 打印提示级日志
-e error 打印错误级日志
-w warning 打印警告级日志
将日志导出:adb logcat > output.txt
3.3 检查是否可以重新编译打包
使用ApkTool进行反编译:java –jar apktool.apk d aaaa.apk
重新编译:java -jar apktool.apk b abc
签名:java -jar signapk.jar testkey.x509.pem testkey.pk8 app-debug.apk app-debug-signed.apk
3.4检查WebView 漏洞
查看webview组件接口是否有防护措施
1. apk用压缩软件打开,提取里面的classes.dex
2. 反编译得到源码:d2j-dex2jar.bat classes.dex
3. 后在利用jdgui打开 classes-dex2jar.jar
4.搜索危险接口 addJavascriptInterface 和searchBoxJavaBridge
如果未作防护,可尝试测试是否存在远程代码执行漏洞,可参考:
/android-webview-remote-code-execution-vulnerability-analysis
3.5检查allowbackup和Debuggable权限
查看反编译得到 AndroidManifest.xml文件中allowbackup和Debuggable 属性是否为true,如果为true则开放了allowbackup和Debuggable 权限
3.6. 组件测试(Activity,Content,Service,Broadcast)--Drozer
查看apk包信息
1.关键字查找包名
命令 run app.pakcage.list -f <keyword>
示例 run app.package.list -f sieve
2.获取应用基本信息
命令 run -a <package name>
示例 run -a com.mwr.example.sieve
3.确定攻击面,查看个组件的权限信息
命令 run app.package.attacksurface <package name>
示例 run app.package.attacksurface com.mwr.example.sieve
3.5.1 Activity配置错误导致登录验证被绕过
检查组件Activity配置是否错误,导致登录验证(如:密码验证,手势验证,短信验证等)被绕过
获取Activity信息
命令 run -a <package name>
示例 run app.activity.inof -a com.mwr.example.sieve
启动Activity,查看app的登陆验证是否被绕过
命令 run app.activity.start --component <package name> <component name>
示例 run app.activity.start --component com.mwr.example.sieve
com.mwr.example.sieve.MainLoginActivity
3.5.2 Service配置错误导致越权
获取service信息
命令run -a com.gdctl0000
通过services 调用系统的intent 是否成功调用,是否存在越权漏洞命令run app.service.start --component 包名服务名--action 系统的intent 例如:
示例run app.service.start --component com.cmsz.linboy
com.baidu.android.pushservice.PushService --action
android.intent.action.BUG_REPORT
示例 run app.service.start --component com.cmsz.linboy
mandService --action
android.intent.action.BUG_REPORT
3.5.3 Broadcast receiver配置错误导致拒绝服务攻击
获取app的broadcast信息
命令run -a com.gx.chezthb -i
通过广播发送空的或不完整的 intent,查看app是否停止运行,造成拒绝服务攻击空的intent
命令urn app.broadcast.send --component com.gx.chezthb
com.umeng.message.BootBroadcastReceiver
不完整的 intent
示例run app.broadcast.send --component com.gx.chezthb
com.umeng.message.BootBroadcastReceiver --action android.intent.XXXX
3.5.4 Content Provider数据泄露漏洞
检查组件Content Provider配置是否错误,导致数据泄漏
获取Content Provider信息
命令 run -a <package name>
示例 run -a com.mwr.example.sieve
获取所有可访问的Uri
命令 run scanner.provider.finduris -a <package name>
示例 run scanner.provider.finduris -a com.mwr.example.sieve
1. SQL注入
命令 run app.provider.query <uri> [--projection] [--selection]
示例 run app.provider.query
content://com.mwr.example.sieve.DBContentProvider/Passwords/
列出所有表 run app.provider.query
content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"
获取单表(如Key)的数据 run app.provider.query
content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"
检测是否存在SQL注入
命令 run scanner.provider.injection -a <package name>
示例 run scanner.provider.injection -a com.mwr.example.sieve
2 .检测目录遍历
命令 run scanner.provider.traversal -a <package name>
示例 run scanner.provider.traversal -a com.mwr.example.sieve
3. 读取文件系统下的文件
示例 run app.provider.read
content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
4. 下载数据库文件到本地
示例 run app.provider.download
content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.siev e/databases/database.db d:/database.db
4. 检查开发者证书是否规范
解压apk文件,找到META-INF文件夹中的RSA证书,查看证书中的开发者信息是否为app 的所有者或开发者。
工具:Keytool(Jre目录下的bin中该工具)
命令keytool -printcert -file *.RSA
示例 keytool -printcert -file D:ApkIDEWorkcom.gdctl0000originalMETA-
INFGDID1000.RSA
5. Android开放网络端口是否安全
有很多的SDK再生成apk时会自动开放一些端口,如百度SDK的“虫洞”后门漏洞,就开放了6259或40310端口
如何查看端口所对应的应用:
/%E6%B5%85%E8%B0%88android%E5%BC%80%E6%94%BE%E7%BD%91%E7%BB %9C%E7%AB%AF%E5%8F%A3%E7%9A%84%E5%AE%89%E5%85%A8%E9%A3%8E%E9%99%A9/
第一步,利用netstat寻找感兴趣的开放socket端口,如15555。
adb shell netstat -a | grep -E "LISTIEN|udp*"
第二步,将端口转换为十六进制值,查看位于/proc/net/目录下对应的socket套接字状态文件,在其中找到使用该socket的应用的uid。
如15555的十六进制表示为1cc3,协议类型为tcp6,那么查看/proc/net/tcp6文件。
adb shell grep -i 3cc3 /proc/net/tcp6
结果中的10115,就是使用该socket的应用的uid。
通过这个uid可以得知应用的用户名为u0_a115。
第三步,根据用户名就可以找到应用了
adb shell ps | grep u0_a115
6.后台web测试
与普通的web渗透测试相同,用burpsuite抓包分析是否有sql注入,xss,越权,信息泄露等漏洞。