DIVA了解APP安全问题(一)
DIVA
在APP项目交付的时候经常会测试客户端今天通过靶场来学习一下客户端不规范项。
DIVA (Damn insecure and vulnerable App),是一个故意设计为全身漏洞的APP软件,它能让开发人员、QA、安全人员了解到APP软件一般存在的问题。
https://github.com/payatu/diva-android
不安全日志输出
开发人员有意或无意地记录敏感信息(如凭据,会话ID,财务详细信息等)
Insecure Logging
我们输入的数字”123456789”,使用adb logcat 命令可以看到
E/diva-log( 3575): Error while processing transaction with credit card: 123456789
使用jd-gui看下logActivity.class 可以发现
{Log.e("diva-log", "Error while processing transaction with credit card: " + paramView.getText().toString());
Toast.makeText(this, "An error occured. Please try again later", 0).show();}、
代码中使用了log.e,如果开发人员在debug时不小心忘记去掉log输出,将会造成很大的安全隐患。
不安全的数据存储
不安全的数据存储也是App常见的安全问题之一,主要有三种方式:
•将敏感数据保存到配置文件中。•将敏感数据保存在本地的sqlite3数据库中。•将敏感数据保存在临时文件或者sd卡中。
Insecure Data Storage -Part1
使用了SharedPreferences类,该类是Android平台上一个轻量级的存储类,主要是用来保存一些常用的配置,本例中是用该类存储了用户名和密码,因此是具有风险的。SharedPreferences类存储的数据会以.xml的形式存储在/data/data/apppackagename/shared_prefs目录下
输入用户名和密码都为admin
使用adb连接手机查看文件
InsecureDataStorage1Activity.class
paramView = PreferenceManager.getDefaultSharedPreferences(this).edit();
EditText localEditText1 = (EditText)findViewById(2131493000);
EditText localEditText2 = (EditText)findViewById(2131493001);
paramView.putString("user", localEditText1.getText().toString());
paramView.putString("password", localEditText2.getText().toString());
paramView.commit();
Toast.makeText(this, "3rd party credentials saved successfully!", 0).show();
Insecure Data Storage -Part2
一般app对应的数据库目录: /data/data/apppackagename/databases
输入用户名,密码都为ceshi
使用adb查看数据库
InsecureDataStorage2Activity.class
SQLiteDatabase localSQLiteDatabase = this.mDB;
paramView = new java/lang/StringBuilder;
paramView.<init>();
localSQLiteDatabase.execSQL("INSERT INTO myuser VALUES ('" + localEditText1.getText().toString() + "', '" + localEditText2.getText().toString() + "');");
this.mDB.close();
Toast.makeText(this, "3rd party credentials saved successfully!", 0).show();
Insecure Data Storage -Part3
输入用户名和密码为demo
使用adb查看临时文件,目录在/data/data/apppackagename/
InsecureDataStorage3Activity.class
Object localObject2 = File.createTempFile("uinfo", "tmp", (File)localObject1);
((File)localObject2).setReadable(true);
((File)localObject2).setWritable(true);
localObject1 = new java/io/FileWriter;
((FileWriter)localObject1).<init>((File)localObject2);
localObject2 = new java/lang/StringBuilder;
((StringBuilder)localObject2).<init>();
((FileWriter)localObject1).write(localEditText.getText().toString() + ":" + paramView.getText().toString() + "n");
((FileWriter)localObject1).close();
Toast.makeText(this, "3rd party credentials saved successfully!", 0).show();
Insecure Data Storage -Part4
存储sd卡的目录一般在:/mnt/sdcard
InsecureDataStorage4Activity.class
paramView = (EditText)findViewById(2131493010);
EditText localEditText = (EditText)findViewById(2131493011);
File localFile = Environment.getExternalStorageDirectory();
try
{
Object localObject1 = new java/io/File;
Object localObject2 = new java/lang/StringBuilder;
((StringBuilder)localObject2).<init>();
((File)localObject1).<init>(localFile.getAbsolutePath() + "/.uinfo.txt");
((File)localObject1).setReadable(true);
((File)localObject1).setWritable(true);
localObject2 = new java/io/FileWriter;
((FileWriter)localObject2).<init>((File)localObject1);
localObject1 = new java/lang/StringBuilder;
((StringBuilder)localObject1).<init>();
((FileWriter)localObject2).write(paramView.getText().toString() + ":" + localEditText.getText().toString() + "n");
((FileWriter)localObject2).close();
Toast.makeText(this, "3rd party credentials saved successfully!", 0).show();
return;
}
可以看到使用Environment.getExternalStorageDirectory()来获取sd卡的目录,文件名为.unifo.txt
参考链接
https://libai.blog.csdn.net/article/details/123764180
免责声明 由于传播、利用本公众号李白你好所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号李白你好及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
end
网络¥安全联盟站—李白你好
欢迎关注[李白你好]-文章内容涉及网络¥安全,web渗透测试、内网安全、二进制安全、工业控制安全、APP逆向、CTF、SRC等。
微信:libaisec
微信交流群:加我微信拉你进群和工程师们学技术聊人生
原文始发于微信公众号(李白你好):DIVA靶场APP客户端不规范项测试(一)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论