Android diva 分析(全)

Android-DIVA分析

new blog:http://showmeshell.top/2018/08/31/Android-DIVA%E5%88%86%E6%9E%90/

1. Insecure Logging

主要是由于app代码中将敏感信息输出到app的logcat中,查看app记录的logcat

adb shell ps| grep -i diva
adb shell logcat | grep 1012

Android diva 分析(全)_第1张图片
在diva中输入数字1111222233334444 测试:输出纯文本显示应用程序的信息
这里写图片描述

2.Hardcoding Issues

使用了硬编码的方式,导致存在一定的安全风险
Android diva 分析(全)_第2张图片
Android diva 分析(全)_第3张图片
Android diva 分析(全)_第4张图片

3.Insecure Data Storage-Part1

不安全的数据存储也是App常见的安全问题之一,主要有三种方式:
1,将敏感数据保存到配置文件中;
2,将敏感数据保存在本地的sqlite3数据库中;
3,将敏感数据保存在临时文件或者sd卡中。

源码:InsecureDataStorage1Activity
Android diva 分析(全)_第5张图片
/data/data/jakhar.aseem.diva(包的名称) shared_prefs 文件夹中找到:-检查内容:-打开.xml文件,找到用户先前引入的凭据:SharedPreferences类存储的数据会以.xml的形式存储在/data/data/apppackagename/shared_prefs
Android diva 分析(全)_第6张图片

4.Insecure Data Storage-Part2

用户的敏感信息存储到本地的数据库中,一般app对应的数据库目录:/data/data/apppackagename/databases
Android diva 分析(全)_第7张图片
打开文件夹,有许多不同的数据库。
我们可以尝试其中任何一个,直到找到有趣的信息 但是,为了简单起见,我们直接转到ids2:- Android使用 sqlite 数据库管理系统:- ids2数据库中有2个表:- 从表myuser中选择所有内容,我们找到用户引入的凭据

5.Insecure Data Storage-Part3

/data/data/jakhar.aseen.diva/零时数据 uinfotemp

Android diva 分析(全)_第8张图片

Android diva 分析(全)_第9张图片

Android diva 分析(全)_第10张图片

6.Insecure Data Storage-Part4

原目录查看,InsecureDataStorage4Activity 发现函数getExternalStorageDirectory()及uinfo.txt
Android diva 分析(全)_第11张图片

Android diva 分析(全)_第12张图片

7.Input Validation Issues-Part1

//SQLInjectionActivity
package jakhar.aseem.diva;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class SQLInjectionActivity extends AppCompatActivity {
    private SQLiteDatabase mDB;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            mDB = openOrCreateDatabase("sqli", MODE_PRIVATE, null);
            mDB.execSQL("DROP TABLE IF EXISTS sqliuser;");
            mDB.execSQL("CREATE TABLE IF NOT EXISTS sqliuser(user VARCHAR, password VARCHAR, credit_card VARCHAR);");
            mDB.execSQL("INSERT INTO sqliuser VALUES ('admin', 'passwd123', '1234567812345678');");
            mDB.execSQL("INSERT INTO sqliuser VALUES ('diva', 'p@ssword', '1111222233334444');");
            mDB.execSQL("INSERT INTO sqliuser VALUES ('john', 'password123', '5555666677778888');");

        }
        catch(Exception e) {
            Log.d("Diva-sqli", "Error occurred while creating database for SQLI: " + e.getMessage());
        }
        setContentView(R.layout.activity_sqlinjection);
    }

    public void search(View view) {
        EditText srchtxt = (EditText) findViewById(R.id.ivi1search);
        Cursor cr = null;
        try {
            cr = mDB.rawQuery("SELECT * FROM sqliuser WHERE user = '" + srchtxt.getText().toString() + "'", null);
            StringBuilder strb = new StringBuilder("");
            if ((cr != null) && (cr.getCount() > 0)) {
                cr.moveToFirst();
                do {
                    strb.append("User: (" + cr.getString(0) + ") pass: (" + cr.getString(1) + ") Credit card: (" + cr.getString(2) + ")\n");
                } while (cr.moveToNext());
            }
            else {
                strb.append("User: (" + srchtxt.getText().toString() +") not found");
            }
            Toast.makeText(this, strb.toString(), Toast.LENGTH_SHORT).show();
        }
        catch(Exception e) {
            Log.d("Diva-sqli", "Error occurred while searching in database: " + e.getMessage());
        }
    }
}         
//Java源代码通知有关存储用户凭据的SQLite数据库:
/*检查前一句,最后一个字符串由两部分组成。第一部分对应于无效用户,但它使用OR二进制操作链接到第二部分。第二部分始终为“true”('2'='2'),因此整个字符串也是“true”(0 OR 1 = 1)。剩下的两个连字符 - 意味着连字符后的所有内容都被视为注释。*/

Android diva 分析(全)_第13张图片

8.Input Validation Issues-Part2

应用程序要求提供URL,例如http://showmeshell.top浏览器按预期打开此博客的网站:- 但是,这种情况可用于使用不同的协议来利用浏览器HTTP,例如File协议,用于读取内部文件系统的内容,甚至是外部存储器中的数据。- 从上一个练习中,我们在此路径中存储了一些凭据:- 使用File protocole,可以实现对uinfo文件的访问:- 将File文件路径作为输入,显示uinfo文件的内容:- 在同样,此输入验证漏洞可用于访问外部存储上的数据。例如,假设SD卡上有一个密钥文件:Key.txt
Android diva 分析(全)_第14张图片

Android diva 分析(全)_第15张图片
Android diva 分析(全)_第16张图片
Android diva 分析(全)_第17张图片
Android diva 分析(全)_第18张图片

9.Access Control Issues-Part 1

可在AndroidManifest.xml中查看文件中暴露的activity组件
Android diva 分析(全)_第19张图片
Android diva 分析(全)_第20张图片
Android diva 分析(全)_第21张图片

10.Access Control Issues-Part 2

Android diva 分析(全)_第22张图片
这里写图片描述
Android diva 分析(全)_第23张图片
Android diva 分析(全)_第24张图片
这里写图片描述
Android diva 分析(全)_第25张图片
Android diva 分析(全)_第26张图片

11.Access Control Issues-Part 3

Android diva 分析(全)_第27张图片
Android diva 分析(全)_第28张图片
Android diva 分析(全)_第29张图片

12.Hardcoding Issues 2

Android diva 分析(全)_第30张图片
Android diva 分析(全)_第31张图片
Android diva 分析(全)_第32张图片
Android diva 分析(全)_第33张图片

divajni.c 保存原始C语言程序,其中供应商密钥存储为常量(#define VENDORKEY“olsdfgad; lh”),后来与函数 strncmp进行比较:最重要的结论是要记住开发人员经常将密钥硬编码到 .so 文件中

13.Input Validation Issues 3

要了解应用程序内部发生的情况,检查logcat命令生成的日志非常方便。找到signal(SIGSEGV=segmentation fault ,or segmentation violation),出现内存保护的现象。

adb shell ps | grep -i diva
adb shell logcat | grep (pid)

这里写图片描述
找到Java source =InputValidation3Activity.java
Android diva 分析(全)_第34张图片
找到 divajni.c 找到关于CODESIZEMATX的定义, app/src/main/jni
这里写图片描述
这里写图片描述
问题函数:strcpy没有检查目标缓冲区的大小足以容纳源参数,输入超过20个数后,灰造成内存损坏或者缓冲区溢出。

你可能感兴趣的:(RE)