Shellcode指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Shellcode
目录
1: 概述和工具 (1)
1.1 概述 (1)
1.2 Windows与Linux的Shellcode 有什么不同? (2)
1.3 建立环境 (2)
1.4 其他工具 (4)
1.4.1 Metasploit (4)
1.4.2 OllyDbg 1.10 (4)
1.4.3 lcc-win32 (4)
2. 我的第一个shellcode (4)
2.1 说明 (4)
2.2 怎样从windows DLL里发现要使用的函数地址 (5)
2.3 汇编代码 (6)
2.4 编译汇编代码 (7)
2.5 获取shellcode (7)
2.6 测试shellcode (8)
3. 怎么在汇编里使用字符串 (9)
4. 函数Hash表 (10)
4.1 概述 (10)
4.2 目标 (10)
4.3 使用OllyDbg运行分析shellcode (14)
5. 动态Shellcode (18)
5.1 目标 (18)
5.2 建立函数Hash表 (18)
1: 概述和工具
1.1 概述
The assembly tutorials contained within this site are aimed towards creating assembly code in the aim to get you ready to create your own assembly and shellcode - which would hopefully be included with the "Project Shellcode Development Framework".
1.2 Windows与Linux的Shellcode 有什么不同?
摘自: (/shellcode/shellcode.html)
Linux提供了直接的方式与内核进行交互(通过int 0x80 接口)。可以在下列网址找到完整的Linux syscall 表rmatik.htw-dresden.de/~beck/ASM/syscall_list.html。
Windows 没有直接提供内核访问接口。系统需要从运行的DLL(动态连接库)里获取要使用的函数的地址来进行交互。关键的不同在于在Windows下每一个操作系统版本的函数的地址都是不同的,而Linux下int 0x80 syscall编号是固定的。
Windows程序员这样做,是因为他们不用担心任何内核的变化带来的麻烦;但是在Linux 世界所有内核级的函数都有一个固定的编号,如果他们变了,会有超过100万的程序员很生气,后果很严重。
那么我们怎么在windows下发现需要的DLL函数的地址呢?在不同的windows版本下又是怎么处理的呢?
(/shellcode/shellcode.html)
目前有多种方式找到你需要使用的函数的地址。本系列指南描述了两种方法来定位函数的地址;你可以使用函数的硬编码地址。在本指南使用硬编码方式获取函数地址。本指南里唯一需要保证映射到shellcode的地址空间里的dll是kernel32.dll。这个dll包含了函数LoadLibrary和GetProcAddress,这两个函数用于获取映射到进程地址空间里的其他函数的地址。使用这个方法有个问题,就是不同版本的Windwos相同函数的地址的偏移可能不一样。所以如果使用这种方法,你的shellcode就只能在特定的Windows平台上运行。
动态发现函数地址的机制将在后续指南里讲述。
1.3 建立环境
我们先把焦点放在Windows 汇编创建的上;然而Linux系统对于开发汇编和shellcode 真的很方便。基于上述原因,我们使用Cygwin作为平台来开发shellcode。
先下载Cygwin的安装文件/setup.exe。安装时选择下列包。
- Devel->binutils (contains ld, as, objdump)
- Devel->gcc
- Devel->make
- Devel->nasm
- Devel->gdb
- Editors->hexedit
- Editors->vim
- Net->netcat
- System->util-linux
当你的Cygwin安装好后,下载下列工具。一些是我写的脚本可以让我们的工作更容易些。你可以把它们保存在下列目录:C:\cygwin\home\Administrator\shellcode\,Administrator
是你的用户名。
名称说明下载地址
xxd-shellcode.sh 解析xxd输出用于提取原始的shellcode /downl
oads/xxd-shellcode.sh
shellcode-compiler.sh 自动编译汇编代码,提取原始的shellcode,
创建一个Unicode的针对原始shellcode进
行编码后的Shellcode,注入你编码后的
shellcode到"Template Exploit"(ms07-004)
进行测试,创建一个包含你shellcode 的C
测试程序,并且编译好,只差运行了。是不
是很给力。/downl oads/shellcode-compiler.sh
或者
/downl oads/shellcode-compiler.zip
findFunctionInDLL.sh 找出系统中哪一个DLL包含你指定的函数/downl
oads/findFunctionInDLL.sh
arwin.c Win32 DLL 地址获取程序/shellcod
e/arwin.c
或者
/downl
oads/arwin.c
shellcodetest.c /shellcod
e/shellcodetest.c
或者
/downl
oads/shellcodetest.c
启动bash shell进入前面创建的shellcode路径。
cd /home/Administrator/shellcode/
现在,你需要编译arwin.c。
gcc -o arwin arwin.c
现在你可以通过输入./arwin 执行arwin命令显示他的使用信息。
我们不需要编译shellcodetest.c。他在测试shellcode是才使用。