DIVA靶场测试APP客户端不规范项(一)

举报
新网工李白 发表于 2022/03/27 04:53:48 2022/03/27
【摘要】 DIVA了解APP安全问题 DIVA DIVA (Damn insecure and vulnerable App),是一个故意设计为全身漏洞的APP软件,它能让开发人员、QA、安全人员了解到APP软...

DIVA了解APP安全问题

DIVA

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();}

  
 
  • 1
  • 2

代码中使用了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();

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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();

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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();

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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;
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

可以看到使用Environment.getExternalStorageDirectory()来获取sd卡的目录,文件名为.unifo.txt

在这里插入图片描述

文章来源: libai.blog.csdn.net,作者:网络¥安全联盟站,版权归原作者所有,如需转载,请联系作者。

原文链接:libai.blog.csdn.net/article/details/123764180

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。