从该死的不安全和易受攻击的应用程序中获取漏洞
Damn Insecure 漏洞App DIVA是一款漏洞App,旨在教授Android App中发现的漏洞、本文将引导你发现其中的一些漏洞。
步驟一:从这里解压缩DIVA APK档案
步驟二:使用Android Studio软体来设定Android实验室
步驟三:一旦你在模拟器上运行了DIVA应用,如果你想查看这个应用的java格式的源代码,那么在Mac或linux终端上运行jadx-gui
- 不安全的日志记录
在Android Studio终端,访问adb命令Absolute Path。
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证书。
am start jakhar.asseem.diva/.APICredsActivity
10. 访问控制问题(2)
在这里,我们需要在不知道PIN码的情况下,从应用程序外部访问API凭证(向应用程序注册)。
点击 "已经注册 "为我们提供了API凭证、用户名和密码。
点击 "立即注册 "要求我们输入PIN。现在检查logcat的输出,以便进一步调查。
注意chk_pin的实际值是check_pin
接下来,我们需要禁用PIN来绕过这个要求,并查看API凭证。
从logcat中我们知道活动管理器是jakhar.aseem.diva/.APICreds2Activity
./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终端访问笔记。
./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内容。
apktool d diva-beta.apk
接下来,查看libdivajni.so文件的内容,并注意到任何可疑的文本,并在用户输入栏中输入它,看看是否能正常工作。
strings arm64-v8a/libdivajni.so