Github项目地址: https://github.com/merrychap/shellen
shellen
是一个交互式shellcode开发环境. 如果你需要一个便携的工具去编写shellcode, shellen
会是一个好帮手. 当然它也可以简单用作一个汇编/反汇编工具.
shellen
使用keystone
和capstone
提供操作, 目前shellen
仅支持python3
, 也许在未来会作改变.
安装
你可以使用pip3
安装shellen
稳定版本
$ sudo pip3 install shellen
或者如果你已经装有所有依赖的包(详情见Requirements), 可以直接使用以下命令安装
$ python3 setup.py install
如果你在安装keystone-engine
时出现问题, 你可以通过手动编译的方式进行安装(参考keystone仓库的COMPILE.md文件进行编译)
如何运行
安装完shellen
以及所有依赖包, 你只需要在终端里敲如下命令, 即可运行shellen
$ shellen
工具有内置help
命令, 几乎可以解释你所遇到的一切问题
功能
shellen
初始是因汇编/反汇编而创建的项目, 所以使用该工具有两种模式, 分别为asm
和dsm
. 当然, 还有其他一些比如说系统调用表, 通用shellcode等功能.
问题/新功能
如果你在使用时发现有问题或bug, 欢迎提交关于该问题的issue. 同样, 如果你认为shellen
应该添加的不错的功能, 也欢迎提交issue, 我会尽力去添加这些功能.
命令提示符
shellen
有实用的命令提示符, 会显示当前的模式, 操作系统类型(用于系统调用表), 并且可以选择相应的架构, 就像下面这样
L:asm:x86_32 >
你可以像终端那样编辑输入, 同样shellen
也有输入过命令的历史记录(按上箭头键即可查看). 命令提示符里的L
是Linux
的缩写. 以下列出了所有支持的操作系统名称:
> L -> Linux
> W -> Windows
> M -> 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 >
汇编功能
对指令进行汇编时, 使用分号进行分割, 像下面这样
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也会告知你汇编字节是否存在\x00
反汇编功能
操作跟汇编时差不多, 输入要反汇编的字节然后可以查看结果
L:dsm:x86_32 > 89c231c042cd50
0x00080000: mov edx, eax
0x00080002: xor eax, eax
0x00080004: inc edx
0x00080005: int 0x50
选择架构
asm
和dsm
模式支持的架构会有差异. 要查看当前模式支持的架构, 输入以下命令
L:dsm:x86_32 > archs
┌────────┬────────┬─────────┬─────────┬────────┐
│ │ │ │ │ │
│ arm32 │ mips32 │ sparc32 │ systemz │ x86_16 │
│ arm64 │ mips64 │ sparc64 │ │ x86_32 │
│ arm_tb │ │ │ │ x86_64 │
└────────┴────────┴─────────┴─────────┴────────┘
如果你要修改当前架构, 使用setarch
命令:
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 │
└────────┴───────┴──────────────────────┴──────────────────────┴──────────────┴──────────────┘
当然你查找的内容不同, 打印出的系统调用表也会有所变化. 搜索到的系统调用表取决于你所选择的架构和操作系统. 在这个示例中它是x86_32
和Linux
.
通用shellcode
shellen可以根据你的关键字展示给你一个通用shellcode的清单. 使用示例可以在之后的展示图
部分看到. 它使用了shell-storm.org
提供的API(谢谢该站长!), 你可以像下面这样使用该功能
L:asm:x86_32 > shell <keyword> <count>
事实上, 参数count
并不是必需的
操作系统
之前有说会有一些操作系统, 但目前只支持Linux. 如果你想要添加Windows或MacOS的功能, 可以提交issue, 我将会添加对该功能的支持.
基础命令
命令 |
描述 |
clear |
清空终端屏幕, 跟windows的cls或*nix系统的clear命令一样 |
help |
显示一些帮助信息 |
quit,q,exit |
关闭当前会话并退出 |
依赖包
> keystone
> capstone
> colorama
> termcolor
> terminaltables
展示图
只是一些使用过程的展示图
原文地址: https://www.kitploit.com/2018/02/shellen-interactive-shellcoding.html
本文由 看雪翻译小组 Vancir 翻译
[培训]内核驱动高级班,冲击BAT一流互联网大厂工
作,每周日13:00-18:00直播授课
最后于 2018-2-27 21:07
被Vancir编辑
,原因: