




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章緩沖區溢出攻擊高等教育出版社網絡攻防原理與實踐高等教育出版社本章要點
2.緩沖區溢出類型
1.緩沖區溢出攻擊概述
3.緩沖區溢出利用技術
4.ShellCode編寫
5.緩沖區溢出攻擊的防范網絡攻防原理與實踐高等教育出版社緩沖區溢出原理生活中,如果把一瓶啤酒全部倒入一個小杯子中,裝不下的啤酒就會四處溢出,流到桌子上。同樣道理,在計算機內部:緩沖區<-->小杯子數據<-->啤酒向緩沖區內填充數據,如果數據的長度很長,超過了緩沖區本身的容量,那么數據就會溢出存儲空間。裝不下的數據則會覆蓋在合法數據上,這就是緩沖區溢出的原理。網絡攻防原理與實踐高等教育出版社緩沖區溢出原理緩沖區溢出(BufferOverflow)是指向固定長度的緩沖區中寫入超出其預先分配長度的內容,造成緩沖區中數據的溢出,從而覆蓋與緩沖區相鄰的內存空間。在理想的情況下,程序應檢查每個數據的長度,并且不允許超過緩沖區的長度大小。有些程序設計人員在設計時,假設數據長度總是與所分配的存儲空間相匹配,而不作檢查,從而為緩沖區溢出埋下隱患。網絡攻防原理與實踐高等教育出版社示例程序例如,一段使用strcpy()函數的C程序:#include<stdio.h>#include<string.h>charname[]=“abcdef”;intmain(){charbuffer[8];strcpy(buffer,name);return0;}strcpy()函數的作用是直接將name中的內容復制到buffer中,這樣只要name的長度大于8,就會造成buffer的溢出,使得程序運行出錯。網絡攻防原理與實踐高等教育出版社緩沖區溢出攻擊事件蠕蟲病毒——Morris利用Fingerd程序的緩沖區溢出漏洞“紅色代碼”蠕蟲病毒——通過微軟公司IIS系統漏洞進行感染“沖擊波”病毒——利用WindowsRPC緩沖區漏洞攻擊系統
“震蕩波”病毒——利用Windows平臺的LSASS漏洞傳播“VanBot”病毒——利用Windows域名系統服務器服務的遠程調用管理接口中存在基于堆棧的緩沖區溢出漏洞網絡攻防原理與實踐高等教育出版社緩沖區溢出分類按照溢出位置分類:棧溢出堆溢出BSS段溢出按照攻擊者的手段分類在程序的地址空間里植入適當的代碼通過適當地初始化寄存器和存儲器控制程序轉移到攻擊者安排的地址空間去執行按照攻擊目標分類攻擊棧中的返回地址攻擊棧中保存的舊框架指針攻擊堆或BSS段中的局部變量或參數攻擊堆或BSS段中的長跳轉緩沖區網絡攻防原理與實踐高等教育出版社系統內部處理緩沖區機制一個程序編譯好后,它在內存中從低址到高址通常被分為5段,如下圖所示:網絡攻防原理與實踐高等教育出版社系統內部處理緩沖區機制堆和棧的區別:棧是由編譯器自動管理,而堆的釋放是由程序員控制。堆由于頻繁的new()/delete()操作,會造成內存空間的不連續,產生大量碎片,降低程序運行效率。而棧是先進后出的隊列。堆的生長方式是向著內存地址增加的方向;棧的生長方向是向著內存地址減少的方向增長。堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部變量的分配。動態分配由alloca()函數進行分配,由編譯器進行釋放。網絡攻防原理與實踐高等教育出版社基于棧的緩沖區溢出#include<stdio.h>#include<string.h>voidflow(charptr[]){charbuffer[8];strcpy(buffer,ptr);printf("buf:%s\n",buffer);}intmain(){
charname[]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";flow(name);return0;}網絡攻防原理與實踐高等教育出版社基于堆的緩沖區溢出#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv[]){longdis;charch[100];char*buf1=malloc(20);char*buf2=malloc(20);dis=(long)buf2-(long)buf1;strcpy(buf2,"mynameisbolina");printf("buf1的地址是:%p\n",buf1);printf("buf2的地址是:%p\n",buf2);printf("兩地址間的距離是:%d\n",dis);printf("請輸入填充到buf1的字符:");gets(ch);strcpy(buf1,ch);printf("buf1的內容是:%s\n",buf1);printf("buf2的內容是:%s\n",buf2);system("PAUSE");returnEXIT_SUCCESS;}網絡攻防原理與實踐高等教育出版社基于堆的緩沖區溢出當輸入buf1中的字符個數小于32時,輸出結果是正常的當輸入buf1中的字符個數不小于32時,輸出結果出現問題
網絡攻防原理與實踐高等教育出版社基于BBS段的緩沖區溢出#include<string.h>#include<stdio.h>#include<memory.h>#include<stdlib.h>#defineBUFSIZE16staticcharbuf1[20],buf2[20];intmain(intargc,char**argv){ longdiff; intoversize; staticcharbuf1[BUFSIZE],buf2[BUFSIZE]; diff=(long)buf2-(long)buf1; printf("buf1=%p,buf2=%p,diff=ox%x(%d)bytes\n\n",buf1,buf2,diff,diff); memset(buf2,'A',BUFSIZE-1),memset(buf1,'B',BUFSIZE-1); buf1[BUFSIZE-1]='\0',buf2[BUFSIZE-1]='\0'; printf("beforeoverflow:buf1=%s,buf2=%s\n",buf1,buf2);
oversize=(int)diff+atoi(argv[1]); memset(buf1,'B',oversize); buf1[BUFSIZE-1]='\0',buf2[BUFSIZE-1]='\0'; printf("afteroverflow:buf1=%s,buf2=%s\n\n",buf1,buf2); return0;}網絡攻防原理與實踐高等教育出版社緩沖區溢出攻擊的基本條件精確定位溢出程序的返回點編寫ShellCode把返回點地址覆蓋成ShellCode的地址網絡攻防原理與實踐高等教育出版社定位溢出點探測法#include<stdio.h>#include<string.h>#include<windows.h>intmain(intargc,char*argv[]){ charname[16]; strcpy(name,argv[1]); printf("%s\n",name); return0;}網絡攻防原理與實踐高等教育出版社定位溢出點將“01234567890123456789AAAABBBBCCCCDDDD”作為程序的參數輸入時,即argv[1]=“01234567890123456789AAAABBBBCCCCDDDD”。程序會產生如圖所示的異常。網絡攻防原理與實踐高等教育出版社定位溢出點反匯編分析法通過對反匯編代碼的分析,直接定位溢出點。下面是溢出漏洞程序中溢出點附近的反匯編相關代碼。004113C8moveax,dwordptr[ebp+0ch]004113CBmovecx,dwordptr[eax+4]004113CEpushecx004113CFleaedx,[ebp-18h]004113D2pushedx004113D3call@ILT+165(_strcpy)(4110AAh)其中調用strcpy函數的地方,就是溢出點所在的位置。網絡攻防原理與實踐高等教育出版社覆蓋執行控制地址覆蓋什么位置能夠控制程序執行流程?棧中保存的EIP指針程序執行函數后會返回到EIP所指向的地址繼續執行,因此覆蓋返回地址可以控制程序的執行流程。覆蓋函數指針變量以函數指針void(*pfunc)(int)為例,使用時調用pfunc(1)覆蓋函數指針的內容,當函數指針被調用時會跳轉到覆蓋內容所指向的地址去執行函數指令。覆蓋異常處理結構結構化異常處理是一種對程序異常的處理機制,它把錯誤處理代碼與正常情況下所執行的代碼分開。網絡攻防原理與實踐高等教育出版社確定跳轉地址跳轉指令的選取跳轉指令的搜索范圍跳轉指令地址的選擇規律網絡攻防原理與實踐高等教育出版社定位ShellCode例如,將函數的返回地址改成addr1,而addr1處是一條“jmpesp”指令,在函數正常返回之后,將跳轉到addr1處執行,也就是執行“jmpesp”指令。執行完之后將轉到進程堆棧中執行。由于溢出時已經覆蓋了堆棧的內容,堆棧中的內容是可以自己控制的。我們可以在堆棧中放上完成某種功能的ShellCode,這樣就可以控制程序轉到ShellCode來執行,從而就完成了溢出攻擊。網絡攻防原理與實踐高等教育出版社ShellCode編寫ShellCode是一組能完成預設功能的機器代碼,通常以十六進制數組的形式存在,本質上對應著可直接執行的匯編程序。ShellCode其實是計算機能直接執行的機器代碼,只要計算機的指令指針EIP指向ShellCode里面,就可以順利執行,不需要再點擊和編譯。網絡攻防原理與實踐高等教育出版社Windows下的函數調用原理Windows下執行函數Func(argv1,argv2,argv3)的過程:網絡攻防原理與實踐高等教育出版社查看函數地址下面的程序是打開一個DoS窗口:#include<windows.h>#include<winbase.h>typedefvoid(*MYPROC)(LPTSTR);intmain(){HINSTANCELibHandle;MYPROCProcAdd;LibHandle=LoadLibrary(“msvcrt.dll”);ProcAdd=(MYPROC)GetProcAddress(LibHandle,"system");(ProcAdd)("");return0;}網絡攻防原理與實踐高等教育出版社查看函數地址查看msvcrt.dll的地址網絡攻防原理與實踐高等教育出版社查看函數地址查看system()函數的地址網絡攻防原理與實踐高等教育出版社ShellCode生成把system(“command.exe”)改寫成匯編代碼,然后執行,彈出DoS窗口,如圖所示:網絡攻防原理與實踐高等教育出版社最后生成機器碼——ShellCode網絡攻防原理與實踐高等教育出版社緩沖區溢出攻擊的防范系統管理上的防范關閉不需要的特權程序及時下載操作系統和各種應
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論