首页
社区
课程
招聘
[翻译] Shellen-交互式shellcode开发环境
2018-2-27 21:00 4926

[翻译] Shellen-交互式shellcode开发环境

2018-2-27 21:00
4926

Github项目地址: https://github.com/merrychap/shellen

 

shellen是一个交互式shellcode开发环境. 如果你需要一个便携的工具去编写shellcode, shellen会是一个好帮手. 当然它也可以简单用作一个汇编/反汇编工具.

 

shellen使用keystonecapstone提供操作, 目前shellen仅支持python3, 也许在未来会作改变.

安装

你可以使用pip3安装shellen稳定版本

$ sudo pip3 install shellen

或者如果你已经装有所有依赖的包(详情见Requirements), 可以直接使用以下命令安装

$ python3 setup.py install

如果你在安装keystone-engine时出现问题, 你可以通过手动编译的方式进行安装(参考keystone仓库COMPILE.md文件进行编译)

如何运行

安装完shellen以及所有依赖包, 你只需要在终端里敲如下命令, 即可运行shellen

$ shellen

工具有内置help命令, 几乎可以解释你所遇到的一切问题

功能

shellen初始是因汇编/反汇编而创建的项目, 所以使用该工具有两种模式, 分别为asmdsm. 当然, 还有其他一些比如说系统调用表, 通用shellcode等功能.

问题/新功能

如果你在使用时发现有问题或bug, 欢迎提交关于该问题的issue. 同样, 如果你认为shellen应该添加的不错的功能, 也欢迎提交issue, 我会尽力去添加这些功能.

命令提示符

shellen有实用的命令提示符, 会显示当前的模式, 操作系统类型(用于系统调用表), 并且可以选择相应的架构, 就像下面这样

L:asm:x86_32 >

你可以像终端那样编辑输入, 同样shellen也有输入过命令的历史记录(按上箭头键即可查看). 命令提示符里的LLinux的缩写. 以下列出了所有支持的操作系统名称:

    > L -> Linux
    > W -> Windows
    > M -> MacOS

如果你想要改变操作系统类型, 只需要输入setos [linux/windows/macos]

L:asm:x86_32 > setos windows

[+] OS changed to windows.

如果要修改当前的模式, 在命令行中输入asmdsm

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

选择架构

asmdsm模式支持的架构会有差异. 要查看当前模式支持的架构, 输入以下命令

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_32Linux.

通用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编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 54
活跃值: (122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LYQINGYE 2018-2-28 04:38
2
0
mark
游客
登录 | 注册 方可回帖
返回