
🌸 Интерактивная среда шеллкодинга для лёгкого создания шеллкодов
Shellen — это интерактивная среда для написания шеллкодов. Если вам нужен удобный инструмент для написания шеллкодов, то shellen может стать вашим другом. Shellen также можно использовать как инструмент ассемблирования или дизассемблирования.
Для всех операций shellen используются движки keystone и capstone.
Shellen работает только на python3. Поддержка python2 может появиться в будущем.
Сначала следует установить зависимости shellen:
$ sudo apt-get install cmake python3-dev python3-setuptools
Стабильную версию shellen можно установить с помощью pip3:
$ sudo pip3 install shellen
Или, если у вас уже есть все необходимые пакеты (см. Требования):
$ python3 setup.py install
Если у вас возникли проблемы с установкой keystone-engine, вам следует скомпилировать keystone-engine (см. файл COMPILE.md в репозитории keystone)
После установки shellen и необходимых пакетов вы можете запустить shellen, введя в терминале следующее:
$ shellen
Вы можете выполнить команду help, чтобы получить информацию об использовании shellen.
Shellen ассемблирует и дизассемблирует инструкции, поэтому существует два режима использования: asm и dsm соответственно. Есть и другие возможности, включая поиск по таблицам системных вызовов и поиск распространённых шеллкодов.
У shellen есть удобное приглашение, которое отображает текущий режим, ОС (операционную систему для системных вызовов) и выбранную для текущего режима архитектуру. Приглашение shellen выглядит так:
L:asm:x86_32 >
Вы можете редактировать ввод, как при наборе текста в терминале. Кроме того, shellen сохраняет историю ваших команд (просто нажмите стрелку вверх, чтобы увидеть предыдущие команды).
L — это сокращённое название Linux в приглашении. Ниже перечислены все остальные названия ОС:
L — это LinuxW — это WindowsM — это MacOSЕсли вы хотите сменить ОС, введите setos [linux/windows/macos] следующим образом:
L:asm:x86_32 > setos windows
[+] OS changed to windows.
Чтобы сменить текущий режим, введите asm или dsm в приглашении.
L:dsm:arm32 > asm
[+] Changed to asm (assembly) mode
L:asm:x86_32 > dsm
[+] Changed to dsm (disassembly) mode
L:dsm:arm32 >
| Команда | Описание |
|---|---|
clear | Очищает экран терминала. Как обычно, cls в Windows или clear в *nix-системах. |
help |
Чтобы ассемблировать инструкции, введите их и разделите точками с запятой, как показано здесь:
L:asm:x86_32 > mov edx, eax; xor eax, eax; inc edx; int 80;
[+] Bytes count: 7
Raw bytes: "\x89\xc2\x31\xc0\x42\xcd\x50"
Hex string: "89c231c042cd50"
Если ассемблированные байты содержат нулевой байт, shellen сообщит вам об этом.
Дизассемблирование похоже на ассемблирование. Только вместо этого введите байты в приглашении и посмотрите результат!
L:dsm:x86_32 > 89c231c042cd50
0x00080000: mov edx, eax
0x00080002: xor eax, eax
0x00080004: inc edx
0x00080005: int 0x50
Кроме того, вы можете запустить свой шеллкод в дочернем процессе. Имейте в виду, что это может навредить вашей системе!. Переход к последнему шеллкоду в дочернем процессе. Что может пойти не так?' Обратите внимание, что у вас нет контроля над базовым адресом, по которому загружается ваш код, и это предполагает, что инструкции будут понятны вашему процессору. Чтобы узнать, как этим пользоваться, см. help внутри shellen.
Я планирую запускать дочерний процесс в некой виртуальной среде, чтобы сделать запуск потенциально опасного шеллкода более безопасным.
Режимы asm и dsm работают для различных архитектур. Чтобы увидеть список доступных архитектур для текущего режима shellen, введите:
L:dsm:x86_32 > archs
┌────────┬────────┬─────────┬─────────┬────────┐
│ │ │ │ │ │
│ arm32 │ mips32 │ sparc32 │ systemz │ x86_16 │
│ arm64 │ mips64 │ sparc64 │ │ x86_32 │
│ arm_tb │ │ │ │ x86_64 │
└────────┴────────┴─────────┴─────────┴────────┘
Если вы хотите сменить текущую архитектуру, введите следующее:
L:dsm:x86_32 > setarch arm32
[+] Architecture of dsm changed to arm32
При создании шеллкода вам понадобятся системные вызовы. Чтобы найти системные вызовы с помощью shellen, введите sys и имя нужного системного вызова. Shellen выведет список системных вызовов, который может содержать искомый вами системный вызов.
L:asm:x86_32 > sys open
┌────────┬───────┬──────────────────────┬──────────────────────┬──────────────┬──────────────┐
│ name │ eax │ ebx │ ecx │ edx │ esi │
├────────┼───────┼──────────────────────┼──────────────────────┼──────────────┼──────────────┤
│ open │ 0x05 │ const char *filename │ int flags │ umode_t mode │ - │
│ openat │ 0x127 │ int dfd │ const char *filename │ int flags │ umode_t mode │
└────────┴───────┴──────────────────────┴──────────────────────┴──────────────┴──────────────┘
sys выводит список возможных вариантов для указанного системного вызова. Таблица системных вызовов, по которой выполняет поиск shellen, зависит от выбранной архитектуры и операционной системы (ОС). В данном случае архитектура — x86_32, а ОС — Linux.
Shellen может показать вам список распространённых шеллкодов в зависимости от вашего ключевого слова. Поиск по ключевым словам в shellen использует API shell-storm.org (спасибо автору!) и может использоваться так:
L:asm:x86_32 > shell <keyword> <count>
Обратите внимание, параметр count не является обязательным. Изображение вывода shell <keyword> <count> находится в разделе Скриншоты.
В настоящее время shellen поддерживается только в Linux. Если вы хотите добавить функциональность для Windows или MacOS, напишите issue, и я добавлю поддержку.
Если вы нашли проблему/баг или что-то подобное, напишите issue об этой проблеме. Кроме того, если вы считаете, что какая-то функция станет хорошим дополнением к shellen, сделайте то же самое — напишите issue, и я постараюсь добавить запрошенную вами функцию.
asm и dsmПросто небольшая подборка скриншотов. (Они устарели из-за добавления различных функций)
| Показывает справочное сообщение. |
quit,q,exit | Завершает текущий сеанс и выходит |