前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >App渗透 - Android应用的错误中获取漏洞

App渗透 - Android应用的错误中获取漏洞

作者头像
Khan安全团队
发布2021-02-08 11:35:31
1.2K0
发布2021-02-08 11:35:31
举报
文章被收录于专栏:Khan安全团队Khan安全团队

从该死的不安全和易受攻击的应用程序中获取漏洞

Damn Insecure 漏洞App DIVA是一款漏洞App,旨在教授Android App中发现的漏洞、本文将引导你发现其中的一些漏洞。

步驟一:从这里解压缩DIVA APK档案

步驟二:使用Android Studio软体来设定Android实验室

步驟三:一旦你在模拟器上运行了DIVA应用,如果你想查看这个应用的java格式的源代码,那么在Mac或linux终端上运行jadx-gui

  1. 不安全的日志记录

在Android Studio终端,访问adb命令Absolute Path。

代码语言:javascript
复制
cd ~/Library/Android/sdk/platform-tools

现在启动设备仿真器shell:./adb shell

运行ps命令,我可以看到jakhar.aseem.diva的pid是18976

现在要查看diva进程的日志,请运行以下命令。

logcat | grep 18976 或者你可以简单地运行 ./adb logcat

正如我们所看到的那样,这个应用程序正在记录敏感信息,如果其他应用程序有这个设备日志的读取权限,他们可以访问这些信息。

2. 硬编码问题

使用jadx-gui,我可以查看Java格式的apk源代码。请注意其中的硬编码访问密钥。

3. 不安全的数据存储

需要root-设备

在这个应用中,我们可以看到输入的字段细节已经被保存。

如图所示,在Android Studio终端上启动一个root的虚拟设备shell,并访问保存该凭证的/data/data文件夹。

证书保存在shared_prefs目录下。我知道这一点的原因是在它的源代码中(在Jadx-gui中),我可以看到保存证书的地方在源代码中也提到了SharedPreferences。

4. 不安全的数据存储 (2)

对于第二部分,源码显示,这次的凭证存储在SQL数据库中。

在数据库中,有4个文件。在ids2文件内容中发现了密码。

5. 不安全的数据存储(3)

如图所示,保存好凭证后,我查看了java源代码。

如图所示,我们可以看到,创建了一个临时文件来保存凭证。

这个临时文件是在/data/data/jakhar.aseem.diva目录下创建的。

6. 不安全的数据存储(4)

在这个任务中,当我试图保存我的凭证时,它说,'发生文件错误'。

查看源码,注意到应用程序正试图将凭证存储在设备外部存储中。所以检查存储权限,并在设置>应用权限>存储>Diva下授予访问权限。

在允许Diva的存储权限后,我又尝试保存凭证,成功!

现在,在终端中,你可以看到证书被保存在/sdcard/.uinfo.txt中

7. 输入验证问题

该应用程序要求输入一个有效的用户名。如果输入的用户名是正确的,那么应用程序就会显示该用户名密码和信用卡号码。

由于存在输入验证问题,我尝试了一个简单的SQL查询来显示用户凭证。

8. 输入验证问题

在这里,我首先访问了一个网络网址,看看它是否有效。接下来,我再使用file:/协议来访问这个设备中的文件,我就能从不同的位置检索到所有的敏感信息。

9. 访问控制问题

可以通过点击 "查看API凭证 "来查看API凭证。我们面临的挑战是如何从应用程序外部访问API凭证。

运行logcat看看点击'查看API凭证'按钮后会发生什么。我们可以看到这里显示的活动管理器名称和操作。

现在在adb shell中运行以下命令。这将打开应用程序并显示出API证书。

代码语言:javascript
复制
am start jakhar.asseem.diva/.APICredsActivity

10. 访问控制问题(2)

在这里,我们需要在不知道PIN码的情况下,从应用程序外部访问API凭证(向应用程序注册)。

点击 "已经注册 "为我们提供了API凭证、用户名和密码。

点击 "立即注册 "要求我们输入PIN。现在检查logcat的输出,以便进一步调查。

注意chk_pin的实际值是check_pin

接下来,我们需要禁用PIN来绕过这个要求,并查看API凭证。

从logcat中我们知道活动管理器是jakhar.aseem.diva/.APICreds2Activity

代码语言:javascript
复制
./adb shell am start -n jakhar.asseem.diva/.APICreds2Activity --ez check_pin false

--n 输入要开展的活动名称

--ez是<数据><boolean>

现在检查你的安卓模拟器,你会发现该应用已经弹开了API凭证,不需要PIN。

11. 访问控制问题(3)

该应用程序要求你创建一个PIN码,然后可以用来访问私人笔记。

使用PIN码,我能够访问私人笔记。

查看.xml和.java源码文件,查找代码缺陷

  • AndroidManifest.xml
  • AccessControl3Activity
  • AccessControl3NotesActivity
  • NotesProvider

从logcat中我们可以看到活动管理器是

jakhar.aseem.diva/.AccessControl3Activity

AndroidManifest.xml显示了内容提供者jakhar.asseem.diva.provider;android:enabled="true "和android:exported="true",这意味着其他应用程序的组件可以访问它。

NotesProvider.java源码揭示了笔记的保存位置

CONTENT_URI

=Uri.parse("content://jakhar.asseem.diva.provider.Notesprovider/notes")

运行下面的命令,让我在android studio终端访问笔记。

代码语言:javascript
复制
./adb shell content query --uri content://jakhar.aseem.diva.provider.notes/notes

12. 硬编码问题(2)

在这个活动中,我想使用逆向工程工具来代替jadx-gui,因为它只能将APK dex文件反编译成java源代码。分析这些源码需要查看库(.so)文件,而jadx-gui不支持。

一旦我们了解了源代码,就很容易驾驭我们寻找厂商密钥的方法。下面是我的两种不同的方法。

使用apktool

运行以下命令从linux终端中提取diva-beta.apk内容。

代码语言:javascript
复制
apktool d diva-beta.apk

接下来,查看libdivajni.so文件的内容,并注意到任何可疑的文本,并在用户输入栏中输入它,看看是否能正常工作。

代码语言:javascript
复制
strings arm64-v8a/libdivajni.so
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Khan安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档