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

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

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

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

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

Категории

Все категории
Loading categories
asminject — Heavily-modified fork of David Buchanan's dlinject project. Injects arbitrary assembly (or precompiled binary) payloads directly into x86-64, x86, and ARM32 Linux processes without the use of ptrace by accessing /proc/<pid>/mem. Useful for certain post-exploitation scenarios, recovering content from process memory, etc.. | Kitploit
Инструменты/GitHubGitHub/bishopfox/asminject
ShellcodePost-ExploitationPenetration TestingPayload DevelopmentContainer Escape
GitHubbishopfox/asminject

asminject

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

Популярное

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

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

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

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

Смотреть все инструменты →

Описание

Heavily-modified fork of David Buchanan's dlinject project. Injects arbitrary assembly (or precompiled binary) payloads directly into x86-64, x86, and ARM32 Linux processes without the use of ptrace by accessing /proc/<pid>/mem. Useful for certain post-exploitation scenarios, recovering content from process memory, etc..

Поделиться

asminject.py

asminject.py — это значительно модифицированный форк проекта dlinject Дэвида Бьюкенена. Внедряет произвольные ассемблерные (или предварительно скомпилированные бинарные) полезные нагрузки непосредственно в процессы Linux на архитектурах x86-64, x86 и ARM32, обращаясь к /proc/<pid>/mem вместо присоединения через ptrace. Полезен для вмешательства в работу доверенных процессов, реализации некоторых сценариев постэксплуатации, извлечения содержимого из памяти процессов и обхода ряда средств контроля безопасности. Может внедрять код в процессы внутри контейнеров извне контейнера, при условии наличия root-доступа к хосту.

Подробнее о asminject.py и его происхождении можно также прочитать на странице инструмента Bishop Fox, включая подробный разбор работы, вдохновившей создание этого инструмента.

В этом документе:

  • Краткие описания или TLDR
  • Происхождение
  • Примеры
  • А как насчёт ограничений ptrace_scope в Yama?
  • Планы на будущее

Отдельная, более подробная документация:

  • Как работает asminject.py — обсуждение архитектуры на высоком уровне с углублением в некоторые технические детали, особенно для читателей, которые раньше не работали с инструментами инъекции в память
  • Начало работы
  • Отличия от dlinject.py
  • Специализированные параметры
  • Устранение неполадок
  • История версий

Краткие описания или TLDR

  • "asminject.py похож на dlinject, за исключением того, что позволяет внедрять любую нужную полезную нагрузку, а не только загружать библиотеку, и работает на нескольких архитектурах."
  • "asminject.py отдалённо напоминает Frida, но не присоединяется через интерфейс ptrace, поэтому процессы не могут заблокировать его, вызывая ptrace по отношению к самим себе."

Происхождение

asminject.py был написан для двух основных сценариев в пентесте Linux-окружений:

  • Атака на средства контроля безопасности на уровне процессов и контейнеров с точки зрения атакующего, имеющего root-доступ к хосту
  • Избегание обнаружения после успешной эксплуатации другой уязвимости

Например, рассмотрим пентест, в ходе которого тестировщик получил root-доступ к серверу, на котором размещено множество контейнеров. В одном из контейнеров обрабатываются банковские переводы, и внутри него установлен очень надёжный продукт для защиты конечных точек. Когда пентестер пытается изменить данные банковского перевода изнутри контейнера, ПО для защиты конечных точек обнаруживает и блокирует эту попытку. asminject.py позволяет пентестеру внедрять произвольный код непосредственно в память процесса банковского ПО или даже в продукт защиты конечных точек извне контейнера. Подобно жертве «злого демона» Декарта, программное обеспечение безопасности внутри контейнера беспомощно, поскольку оно существует в среде, полностью контролируемой атакующим.

Оригинальный dlinject.py был разработан специально для загрузки общих библиотек Linux в существующий процесс. asminject.py делает всё, что делал оригинал, и гораздо больше. Он выполняет произвольный ассемблерный код и включает шаблоны для множества атак. Он также был переработан, чтобы помогать избегать обнаружения механизмами безопасности, которые реагируют на потенциально подозрительную активность, например на события загрузки библиотек.

Примеры

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

Базовый синтаксис вызова asminject.py выглядит следующим образом:

root@kitploit:~
# python3 ./asminject.py <target_process_id> <payload> \
  --arch [x86-64|x86|arm32] --relative-offsets-from-binaries --stop-method "slow" \
  --var <payload_variable_1_name> <payload_variable_1_value> \
  # ... \
  --var <payload_variable_n_name> <payload_variable_n_value>

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

  • Базовые примеры — простые полезные нагрузки, которые, например, заставляют существующий процесс копировать файлы за вас
  • Внедрение Python-кода
  • Внедрение PHP-кода
  • Внедрение Ruby-кода
  • Внедрение шеллкода/стеджера
  • Внедрение общей библиотеки

А как насчёт ограничений ptrace_scope в Yama?

Большинство дистрибутивов Linux включают модуль безопасности ядра под названием Yama, который контролирует доступ к использованию возможности ptrace в отношении других процессов. Хотя asminject.py не присоединяется к интерфейсу отладчика, ему всё равно требуется разрешение на использование возможности ptrace. Если вы получаете ошибки, связанные с этой возможностью, проверьте содержимое /proc/sys/kernel/yama/ptrace_scope. Если оно установлено в 2, выполните следующую команду от имени root:

root@kitploit:~
echo 1 > /proc/sys/kernel/yama/ptrace_scope

Значения 3 и выше нельзя сбросить без перезагрузки. Однако, если вы являетесь уполномоченным администратором Linux-системы, где кто-то случайно установил /proc/sys/kernel/yama/ptrace_scope в 3, или проводите санкционированный пентест окружения, где установлено это значение, обратитесь к каталогу ptrace_scope_kernel_module — там описан возможный обходной путь, не требующий перезагрузки.

Планы на будущее

  • Добавить поддержку ARM64 (Aarch64).
  • Разрешить передачу шеллкода через stdin в дополнение к текущему методу чтения из файла.
  • Исследовать возможность использования Keystone для ассемблирования шеллкода вместо вызова системной команды gcc.
  • Для Python и других интерпретаторов скриптов с API для передачи скомпилированного байт-кода на выполнение (в отличие от выполнения читабельного скриптового кода в стиле eval) предоставить полезные нагрузки, использующие эту возможность для ещё большей скрытности.
  • Если это осуществимо, внедрять Java-код в Java-процессы через JNI.
  • Добавить параметры для перехвата конкретного метода (или адреса и т. п.) в качестве альтернативы текущему методу «перехватить следующий системный вызов», унаследованному от dlinject.py.
  • Предоставить способ использования инструмента для квази-отладки, например, перехватывать функцию и выводить передаваемые ей аргументы при каждом её вызове.
    • Возможно, имеет больше смысла найти способ внедрения Frida с помощью asminject.py — требуется дополнительное исследование.
  • Разработать интерактивные полезные нагрузки, например, вместо внедрения конкретной строки Python-кода в Python-процесс asminject.py мог бы запрашивать у оператора строку кода для внедрения, внедрять её, возвращать полученный результат и затем запрашивать следующую строку кода.
    • Это также, возможно, имеет больше смысла реализовать с помощью Frida, если Frida можно внедрить в процесс с использованием asminject.py так, чтобы избежать необходимости Frida во временном обращении к интерфейсу отладчика.
  • Предоставить способ взаимодействия с целевым процессом, работающим на архитектуре процессора, отличной от той, на которой выполняется . Например, взаимодействовать с удалённым устройством с помощью такого оборудования, как PCI leech, эксплуатировать экстремальные крайние случаи, например устройства с , доступным для root через NFS-шару, и т. п.
Скачать инструмент
asminject.py
/proc/mem
  • Добавить более изощрённые фрагменты обфускации.