安卓测试整理版
<pre><code> #### 安卓测试</code></pre>
<h5>1.反编译检测(中危)</h5>
<p><strong>软件在安卓测试里面:</strong>
把apk当成zip并解压、得到classes.dex文件,
cd +app解压路径 ,运行dex2jar.bat classes.dex得到classes.dex.jar 然后再用jd-gui打开 jar文件即可得到java代码则为源代码泄露。</p>
<h4>2.安装包签名检测(低危)</h4>
<p><strong>软件在安卓测试里面</strong>
这个要在java bin文件里面执行要不然会报错C:\Program Files\Java\jdk1.8.0_181\bin\jarsigner.exe -verify APK 文 件 路 径 -verbose –certs
说明:要说明的是,只有在使用直接客户的证书签名时,才认为安全。 Debug 证书、第三方(如开发方)证书等等均认为风险。
也可:keytool.exe -printcert -file C:\Users\Nxin\Desktop\ylzcf\META-INF\YLZCF.RSA
keytool.exe文件在java bin文件中。</p>
<h4>3.应用完整性校验(中危)</h4>
<p>解包:<strong>java -jar apktool.jar d -f apk 文件路径 -o 解包目标文件夹</strong>
再次打包:<strong>java -jar apktool.jar b -f 待打包的文件夹 -o 输出 apk 路径</strong>
apk签名::<strong>java -jar signapk.jar testkey.x509.pem testkey.pk8 待签名 apk 文件路径 签名后输出apk 路径</strong>
使用自定义调试签名进行签名,重新签名成功后的APK安装成功,如果能正常运行,则app本身没有进行安装包完整性校验的安全机制。
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/2a49533ed65231de0fd97ddf3739e9eb?showdoc=.jpg" alt="" /></p>
<h4>4.程序数据任意备份(中危)</h4>
<p>在 AndroidManfest.xml 文件中设置android:allowBackup 属性值,android:allowBackup=”true”,即为allowBackup 开启
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/88e5744e78b7ec4f578b4b1493374214?showdoc=.jpg" alt="" /></p>
<h4>5.程序可被任意调试</h4>
<p>AndroidManfest.xml 文件中设置android:debuggable=true时应用程序可以以调试模式启动,被任意调试器附加调试。
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/e953ce51dd5c215360fba75a37269369?showdoc=.jpg" alt="" /></p>
<h3>二、组件安全</h3>
<h4>6.activity越权检测(中危)</h4>
<p>开发者为了方便外部调用,会把Activity组件设置为导出状态,如果由于开发者的疏忽,把一些包含敏感信息或可进行敏感操作。
adb connect 127.0.0.1:21503
adb shell am start -S -n +activity主件名/apk包名
如果app直接打开跳转到对应的页面组件则存在漏洞。
另外也可:<strong>run app.activity.info -a packagename
run app.activity.start --component +包名 +组件名:如果能未授权情况启动页面即可记下漏洞</strong></p>
<h4>7.ACtivity劫持保护检测(中危)</h4>
<p>检查是否存在 activity 劫持风险,确认客户端是否能够发现并提示用户存在劫持
安装 HijackActivity.apk,使用 activity 界面劫持工具,在工具中指定要劫持的应用进程
名称(进程查看和监视 ps/top)。如图所示,从列表中选择被测试的应用,点击 OK。打
开应用,测试工具会尝试用自己的窗口覆盖被测的应用。测试工具试图显示自己的窗口时,
安全的客户端应该弹出警告提示。如果劫持成功,会出现如下界面:</p>
<h4>8.service 越权检测(中危)</h4>
<p>检测有没有处理不当的方法检索所有类中 startService/bindService 方法及其传递的数据
-- 检测是否有数据泄露的可能
相关 drozer 命令:</p>
<blockquote>
<p>run app.service.info -a com.mwr.example.sieve
run app.service.start --component 包名 组件名</p>
</blockquote>
<h4>9.service拒绝服务检测(中危)</h4>
<blockquote>
<p>run app.service.info -a com.mwr.example.sieve
adb shell am start service +组件名/包名</p>
</blockquote>
<h4>10.Reciever拒绝服务(中危)</h4>
<p>run app.broadcast.info -a com.package.name
dz> run app.broadcast.send --component com.package.name --action
android.intent.action.XXX</p>
<h4>11.Content Provider目录遍历 (高危)</h4>
<p>列出uri:run scanner.provider.traversal -a APP 包名测试
列出url:run scanner.provider.traversal -a APP 包名测试 +uri名称 </p>
<h4>12.Content Provider sql注入(高危)</h4>
<p>run scanner.provider.injection -a APP 包名测试
使用 drozer 命令 run scanner.provider.injection -a APP 包名测试 Content Provider </p>
<h4>13.组件通信分析(高危)</h4>
<p>1.使用 mercury 查看那 APP 的组件信息
2.使用 mercury 查找 APP Content Provider 组件漏洞,包括组件暴露,SQL 注入,文件
目录遍历
命令方法 :
1.确定包名
run app.package.list
2.查看指定包的基本信息,例如数据存储路径 uid,gid,permissions
run app.package.info -a com.android.browser
3.列出 APP 中的 activity 组件
run app.activity.info -a com.android.browser
4.列出 APP 中的 service 组件
run app.service.info -a com.android.browser
5.列出 APP 中的 Content Provider 组件
run app.provider.info -a com.android.browser
6.查找可以读取的 Content Provider 的 URI
run scanner.provider.finduris -a com.sina.weibo
7.读取 Content Provider 指定 URI 中的内容
run app.provider.query content://settings/secure --selection
name='adb_enabled'
8.扫描是否存在 content provider 目录遍历的漏洞
run scanner.provider.traversal -a com.android.browser
9.读取 content provider 指定的目录
run app.provider.read content://com.mwri.fileEncryptor.localfile/system/etc/hosts/
10.扫描是否存在 SQL 注入
run scanner.provider.injection -a com.android.browser
11.利用 SQL 注入
run scanner.provider.query content://com.example.bsideschallenge.evilPlannerdb
--projection * from cards --
12.查看指定包的 AndroidManifest.xml 文件
run app.package.manifest com.example.bsidechallenge
13.查看指定包的 AndroidManifest.xml 文件
run app.package.manifest com.example.bsidechallenge</p>
<h4>14.logcat日志(中危)</h4>
<p>输出内存日志信息:
adb shell logcat -d > E:\1.txt
查看1.txt关键词是否发现有敏感信息</p>
<h4>15.检查客户端程序存储在手机中的SQLite数据库文件(中危)</h4>
<p>最后在检测 SQLite 数据库文件,在私有目录及其子目录下查找以.db 结尾的数据库文
件。对于使用了 webView 缓存的应用,会在 databases 子目录中保存 webview.db 和
webviewCache.db,如图所示。其中有可能会记录 cookies 和提交表单等信息
用数据库查看工具即可查看这些文件中是否有敏感信息。
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/a472dbb9f9a749ef65e4f7f47a0a2a76?showdoc=.jpg" alt="" /></p>
<h4>16.账号登录限制(低危)</h4>
<p>测试一个帐号是否可以同时在多个设备上成功登录客户端,进行操作。 </p>
<h4>17.账号锁定策略(低危)</h4>
<p>测试客户端是否限制登录尝试次数。防止木马使用穷举法暴力破解用户密码。 </p>
<h4>18.会话安全设置</h4>
<p>测试客户端在超过 20 分钟无操作后,是否会使会话超时并要求重新登录。超时时间设
置是否合理。
一段时间无操作 -- 检测应用是否要求用户重新登陆退出应用再打开 -- 检测应用是
否要求用户登陆。</p>
<h4>19.so 动态注入</h4>
<p>进入so进程文件目录运行CMD命令
连接root过的Android设备或者打开模拟器。将inject和libhello.so拷入设备,设执行权限,执行:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/0d79ee4dddb605c97bbc937d8b16ed60?showdoc=.jpg" alt="" />
先看看被注入进程(surfaceflinger)的mmap,可以看到我们的so已经被加载了,紧接着的那一块就是我们mmap出来的:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/89783a901158635dae09a02830ee554e?showdoc=.jpg" alt="" /></p>
<h4>20.设备 root检测(模拟器检测)</h4>
<p>app安装在root后手机上可正常运行
通常已经root的设备会提供给恶意应用查看或修改自身配置文件、缓存文件等的相关权限,已经对应用进行非法操作;而恶意攻击者也常使用已经root的设备对应用发起攻击。
在Native层增加root检测的相关功能。</p>
<h4>21.通信数据风险</h4>
<p>抓包数据未加密通信</p>