• catalystcs5 > 网络安全(CS05154) 第5讲 缓冲区溢出攻击
  • 网络安全(CS05154) 第5讲 缓冲区溢出攻击

    免费下载 下载该文档 文档格式:PDF   更新时间:2010-09-02   下载次数:0   点击次数:1
    文档基本属性
    文档语言:English
    文档格式:pdf
    文档作者:
    关键词:
    主题:
    备注:
    点击这里显示更多文档属性
    网络安全
    (CS05154)
    5. Shellcode技术
    主要内容
    Shellcode是一段机器指令,用于在溢出之后 改变系统正常流程,转而执行Shellcode从而 入侵目标系统.
    1. Linux x86平台Shellcode技术 2. Win32平台Shellcode技术 (参考《网络渗透技术》)
    shellcode技术 2
    5.1 Linux x86平台Shellcode技术
    Shellcode是溢出后执行的一堆机器指令集,编 写 Shellcode需要有一些汇编基础语言程序设计 基础.x86的汇编指令语法常见的有AT&T和 Intel两种. Linux下的编译器和调试器使用的是AT&T语法 (mov src des), Win32下的编译器和调试器使用 的是Intel语法(mov des src). 在Intel网站有详细的x86指令手册,不过Masm 里的Opcodes.hlp文件也能够方便地查询指令的 含义及其opcode,可以作为读者写Shellcode时 查询指令的手册.
    shellcode技术 3
    5.1.1 熟悉系统调用
    Linux下每一个函数实际上都是由系统调用实现 的,熟悉系统调用是编写shellcode的基础.看下 面这个简单的程序: [ns@Redhat9x0 3x1]$ cat exit.c main() { exit(0); }
    shellcode技术 4
    演示
    使用静态编译,以避免动态链接干扰,运 行后查看结果:
    [ns@Redhat9x0]$ gcc -static -o exit0 exit.c [ns@Redhat9x0]$./exit0 [ns@Redhat9x0]$echo $ 0
    shellcode技术
    5
    exit函数会调用_exit
    [ns@Redhat9x0 3x1]$ gdb exit0 (gdb) disas main 0x080481d0 : push %ebp …………… 0x080481e5 : call 0x8048608 …… (gdb) disas exit ...... 0x080486b8 : push %esi 0x080486b9 : call 0x804d9bc
    shellcode技术 6
    分析_exit的汇编码
    (gdb) disas _exit Dump of assembler code for function _exit: 0x0804d9bc : mov 0x4(%esp,1),%ebx Linux的软中断指令 0x0804d9c0 : mov $0xfc,%eax 0x0804d9c5 : int $0x80 ;调用该语句()后,程序正常退出,以后的语句不会执行 0x0804d9c7 : mov $0x1,%eax 0x0804d9cc : int $0x80 0x0804d9ce : hlt 0x0804d9cf : nop End of assembler dump. (gdb) b *(_exit+9) Breakpoint 1 at 0x804d9c5 Linux的软中断指令 (gdb) r
    shellcode技术 7
    Linux的功能是用中断指令实现的
    在gdb里看到_exit的反汇编代码里有个int $0x80指令,这是Linux的软中断指令. 执行软中断前,需要给eax赋相应的中断号 值才能执行各种功能.Linux的系统中断号 可以从头文件/usr/include/asm/unistd.h查 到. 有些系统调用需要参数,还要给其他寄存 器赋值,具体情况可以参考相关的文档.
    shellcode技术 8
    5.1.2 得到Shell的Shellcode
    通常溢出后是为了得到一 个Shell以方便控制对方的 系统. 理解了系统中断就可以写 这样的Shellcode. [ns@Redhat9x0 3x1]$ gcc -static -o shellcode shellcode.c [ns@Redhat9x0 3x1]$ ./shellcode sh-2.05$
    [ns@Redhat9x0 3x1]$ cat Shellcode.c #include int main ( int argc, char * argv[] ) { char * name[2]; name[0] = "/bin/sh"; name[1] = NULL; execve( name[0], name, NULL ); }

    下一页

  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 PDF格式下载
  • 您可能感兴趣的
  • cctv5在线直播  cctv5  生化危机5  乡村爱情5  iphone5  cctv5节目表  苹果5  22选5开奖结果  死神来了5