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

2021-02-08 11:35:31 浏览数 (1)

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

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

0 人点赞