Mini Elf Structure and generate,在IDF实验室博客曾介绍payload exec组成结构与生成方法,文章中使用Inlineegg框架来生成Mini Elf,通过linux命令和hex来理解其结构。

Immunityinc公司出品的CANVAS是渗透工程师所熟悉的漏洞检测框架,而核心攻击框架是今天我们所要介绍的,它是:MOSDEF2.0,什么是MOSDEF呢?

A C-like compiler suite originally built for and designed for Immunity's CANVAS attack framework written completely in Python。
website: http://immunityinc.com

首先,我们来认识其框架的有哪几部分组成:

1. 程序编译/分析
2. ASM/C
3. 库:PLY
4. payload 生成与shellcode
5. 命令使用

一、MOSDEF的主要组成部分

1、看下它的ASM/C这部分有那写可用文件:

在MOSDEFlibc中包含了在C语言中的常用函数及常量,其中还包括了C语言中的宏定义与调用的header file等等。

2、而它的生成Mini Elf,主要依赖于一下文件:

这里生成Mini Elf 的命令是:makeexe.py。

我们知道Mini Elf 主要依赖的section与结构,来看下它的工作原理:

它调用了:mosdefutils, sys, binfmt 下的elf与elf_const。

elf.py: 主要包括了elf 的section,elf header,program header,elf dyn linker,elf shareder与symbol,Rel。在程序中介绍了C lib中的类型,而elf_const包含了ELF中的常量与offset地址。

3、PLY 由哪几个文件组成呢?

由yacc,lex模块组成,在MOSDEF2.0中存在两个同样的文件,分别是:yacc2.py,lex2.py,yacc.py,lex.py。其处理数据与表达式等等。

二、工作与实践

这里把几个核心文件已经基本介绍了一下,来看下其工作:

cc.py -> cpp.py -> cparse2.py -> il2x86 -> x86parse.py -> makeexe.py

看下它的Mini Elf生成代码:

传入参数为: data,filename,filename默认为空,来看下其传入的data。

data 传入的数据为byte,主要是段可执行性代码,通过asm编译,取program section。

注:程序的可执行部分。

回头看看其调用的module,代码文件中看到,makeexe.py调用了mosdefutils中函数为:halfword2bstr。我们可以剔除其依赖的mosdefutils module。其中注释掉了原函数,来看下其内容:

如何使用它呢?

我这使用了exploit-db database中的lin-x86中的13334.txt文件,作为新的payload生成新的exe文件,而filename为backdoor。 ps:13334.txt 执行的是“/bin/sh”。

makeexe.py是个命令行程序,在程序中自带了payload代码,如果需要使用新的payload,可以把makeexe.py当作module来调用。接着看它的编译实例,文件名为:test.c。

代码:

是不是和C语言不同呢?

没有了#include的函数,使用了#import,这东西能编译吗?它不能通过gcc编译,但能使用它自带的工具编译成ELF文件。

command:

编译过程:

已经编译完成,文件名为:test,看下它的文件类型,文件执行情况。

如图:

文件已执行,输出:HITHERE。

通过命令,看到test Elf并没有调用任何symbols,其文件为静态文件,静态编译。(ps: 静态编译:gcc -static infilen -o outfile。)

是不是有点像payload exec的生成呢?通过前张图片我们可以了解到程序是有ELF header和program header组成。这里你可以通过objdump尝试是不是能提取可执行的section。

看下其编译调用了哪些module,function:

IL Code:

总结:

这里我们可以看出MOSDEF具有很强大的功能,到这里我们初步认识了它,下篇文章我们将深入核心部分进行了解它的使用,和代码编写上的思路。

To be continue……

IDF实验室 4ll3n

源链接

Hacking more

...