Shellen 是一个交互式 shellcode 编写环境。如果你需要一个方便的工具来编写 shellcode,那么 shellen 可能会成为你的朋友。Shellen 也可以用作汇编或反汇编工具。
keystone 和 capstone 引擎用于 shellen 的所有操作。
Shellen 仅适用于 python3。未来可能会支持 python2。
首先,你应该安装 shellen 的依赖:
$ sudo apt-get install cmake python3-dev python3-setuptools
你可以使用 pip3 安装 shellen 的稳定版本:
$ sudo pip3 install shellen
或者,如果你已经拥有了所有必需的软件包(参见要求):
$ python3 setup.py install
如果你在安装 keystone-engine 时遇到任何问题,那么你应该编译 keystone-engine(参见 keystone 仓库中的 COMPILE.md 文件)
安装 shellen 及其必需的软件包后,你可以通过在终端中输入以下命令来运行 shellen:
$ shellen
你可以运行 shellen 的 help 命令来获取关于 shellen 用法的信息。
Shellen 可以汇编和反汇编指令,因此有两种使用模式:分别是 asm 和 dsm。其他功能包括搜索系统调用表以及搜索常见 shellcode。
Shellen 有一个实用的提示符,显示当前模式、操作系统(用于系统调用的 OS)以及当前模式所选的架构。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 | 清除终端屏幕。就像 Windows 上的 cls 或 *nix 系统上的 clear 一样。 |
help | 显示帮助信息。 |
quit,q,exit | 结束当前会话并退出 |
要汇编指令,请按如下所示输入它们并用分号分隔:
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
此外,你可以在子进程中运行你的 shellcode。请注意,这可能会损害你的系统!。跳转到子进程中的最后一段 shellcode。会出什么问题呢?' 请注意,你无法控制代码被加载到的基地址,并且这假定指令对你的 CPU 是有意义的。请参阅 shellen 中的 help 以了解如何使用它。
我计划在某个虚拟环境中执行子进程,以便更安全地运行潜在危险的 shellcode。
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
当你创建 shellcode 时,会需要系统调用。要使用 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 搜索的系统调用表取决于所选的架构和操作系统(OS)。在此例中,架构是 x86_32,操作系统是 Linux。
Shellen 可以根据你的关键字为你显示常见 shellcode 的列表。Shellen 的关键字查找使用 shell-storm.org 的 API(感谢作者!),可以这样使用:
L:asm:x86_32 > shell <keyword> <count>
注意,count 参数不是必需的。图片部分有 shell <keyword> <count> 输出的图片。
目前,shellen 仅支持在 Linux 上运行。如果你想为 Windows 或 MacOS 添加功能,请提交一个 issue,我会添加支持。
如果你发现问题/Bug 或其他情况,请针对该问题写一个 issue。此外,如果你认为某个功能对 shellen 来说是一个很好的补充,同样 -- 写一个 issue,我会尝试添加你请求的功能。
asm 和 dsm 模式提供不同的历史记录只是一小堆图片。(由于添加了不同的功能,它们已经过时了)