版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
關 成為隱患;另外,數(shù)組越界問題、字符串格式化問題,都是需考慮的問題型的多個實例。舉例說明,如下代碼voidvoidfunction(char{charbuffer[16];}這是一個Csc(),該函數(shù)的功能是將中的內容c到ff中在該代碼中,r數(shù)據(jù)類型相同), 動 動態(tài)PUSH:在堆棧的頂部加入一個元素,棧頂上移O下移。函數(shù)調用函數(shù)的現(xiàn)場,函數(shù)中又的現(xiàn)場,再恢復、、一個名為堆棧指針(SP)的寄存器指向堆棧的堆棧的大小在運行時由內核動態(tài)地調CPU使用指令PUSH和POP來向堆棧中添加元素和中移去 函數(shù)局部變量等。觀察如下例子voidvoidfunction(inta,int{}void{}令,將源代碼編譯并生成匯編代碼輸出_mainproc;?debugL5movax,2pushaxmovax,1pushaxcallnearptr 英文名稱,如bufferoverflow、bufferoverrun、smashthestack、trashthestack等等,它也是一種比較有歷史的、多、多
作系果包
是Morris蠕致的程系: 程系: voidvoidfunction(char{charbuffer[16];}tp()inputpbuffinput,就會造成buffr。我們可以假設最理想的情況是:程序對輸入字符串長行檢查,確保輸入的長度不超過緩沖區(qū) 存在象strcpyscanf();等等。具體大家可以參考相應文檔下面用一個程序來介紹緩沖區(qū)溢出的具#include#include#includevoidfunction(char{charbuffer[10];}intmain(intargc,char*{return}在Turboc2下面生成exe文件:P02_02.exe,到達該文件存放 ,在因為function函數(shù)中的buffer大小定義為10,在輸入?yún)?shù)沒有超過10個字的情況下,程序沒有問本章是基于CC語言具有不安全性的某些特性,。在這個程序中, 程序執(zhí)行發(fā)生不正?,F(xiàn)象。從的角度講,因為這種事情完全是“碰巧”,等到人員去維護時,問題就找不到了,白白花費人員的精緩沖區(qū)溢出程序是否試 溢出時被覆蓋的數(shù)據(jù);等的目的站在量的下面用一個例子來介紹緩沖 的原理。所使用的環(huán)境 5 f 5 f u
#include<string.h>voidfun1(char*input){charprintf("Call}intmain(intargc,char{return}由該代碼生成exe文件(具體和相應的IDE有關),在結果(下面分析以下錯 )的ASCII碼 46#include<stdio.h>#include<string.h>voidfun1(char*input){charbuffer[10];printf("Call}void{printf("Call}intmain(intargc,char{printf("AddressOfreturn}生成,運行如下命令此處我們可以知道,u2報錯:址
#include#include 3,voidfun1(char 3,{char printf("Call}void{printf("Call}intmain(intargc,char{printf("AddressOffun2=%p\n",fun2);return0;}注意!fun2函數(shù)被調用了在中文in、07ff52,可以用sdesd以下sd"\x77\x1d\x80\x7c""\x52\x8D\x45\xF4\x50\xFF\x55\xF0"F\x8D\x45\xF4""\x50\xB8""\xc7\x93\xbf\x77""\xFF\xD0"#include<stdio.h>#include<string.h>voidfun1(char*input){charbuffer[10];}intmain(intargc,char{charbuffer[]="abcdefghijklmnopqrstuvwxyz12\x12\x45\xfa\x7f""\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA""\x77\x1d\x80\x7c"45\xF4""\x50\xB8""\xc7\x93\xbf\x77""\xFF\xD0""\x83\xC4\x12\x5D";return}生成,運行相應exe運行時,能夠打開控制臺命令如 限,可以進行任意操 看以下#include<stdio.h>#include<string.h>#includemain(intargc,char{char*buffer1,*charstr[]=buffer1=(char*)malloc(32);buffer2=(char*)malloc memcpy(buffer1,str,32+6);free(buffer1);free(buffer2);return0;}生成exe文件效果 者如果精心構造這個6個字節(jié),也可以達 的的緩沖區(qū)溢 ,由于實現(xiàn)起來比較方便,成為一種常見的安。因此,相對于其 ,緩沖區(qū)溢 比較普 者可以通過很多利用緩沖區(qū)溢出并且進行。一般說來,緩沖區(qū)溢出的目的在于使得者取得某些程序的控制權,執(zhí)行某些功能,實現(xiàn)操作的目的;情況下,如果該程序具有管理者為了達到目的,一般情況下 行為分為兩步行 直接輸入法。者向被個指令序列,的地址傳遞參數(shù)法。在這種情況下,者想要執(zhí) 碼要求執(zhí)行exec(“某個命令”),而在被 函數(shù)為exec(arg),那么 怎樣讓程序跳轉到相應的程序代碼,一般情況下有如法束時返回的地址,指示函數(shù)結束后會執(zhí)行的功能。代碼擊者只需在函數(shù)指針附近將緩沖區(qū)溢出,用一個目的具體案例:本世紀初,Cerberus安全小組發(fā)布了微軟的IIS4/5存在 瀏覽器向IIS提出一個HTTP請求, (或IP地址)后,加上一個件名,該文件名以“.htr”做后ServiceAPI)應用程序;IIS將所有針對“.htr”資源的請求定向到ISM.DLL程序,ISM.DLL這個文件并執(zhí)行瀏覽器將提交的請求中包含的文件名在緩沖區(qū)中,若它很長,會導致局部變量緩沖區(qū)溢出,覆蓋返回地址空間,使IIS。更進一步,在 利用CompaqC編譯器等。 :成一習不因為一味追程序編寫些安隱多的碼,別是不要使用一些能有 P少 發(fā)生的可可以一錯工,限一能具緩溢出 的函數(shù)的用如tcp和t等)使一個 成功地變了程的針,為系統(tǒng)事檢測到指的改變這個指將會被使達不到 的的整數(shù) 方以int為例,在TurboC中,一個整數(shù)用2個字節(jié)(16位)存放;在某些C編譯器(如DevC++)中,整數(shù)用4個字節(jié)(32位)存放;在Java語言中,一個字節(jié)存放的字節(jié)整數(shù)短整數(shù)長整數(shù)in編碼方101102212進制和 16進制表示 加1,成為:16進制表示為:0xFFFFFFFE一般說來,如果 置1,這個變量就被解釋為負數(shù);如果置0,這個變就解 什么情況下會出現(xiàn)整數(shù)溢出呢一數(shù)num1=num2= num3=num1+由于整數(shù)在內存里面保存在一個固定長度(在本章中使用32位)的空間內一數(shù)num1=num2= num3=num1+整舉個例,有兩個無符號整數(shù),u1n,個數(shù)是32首值n1一32位整的大,num2被賦值為。后讓um和u2加,后 結果第33位整um代如:很顯然,num1的值是;num2的值;兩者相因此,num3中的值是0,發(fā)生了整數(shù)溢出試#include試int{儲int {short能char來l=來大sc=明printf("l=0x%x(%dbytes)\n",l, printf("s=0x%x(%dbytes)\n",s,可printf("c=0x%x(%dbytes)\n"creturn}生成可執(zhí)行文件,運行,顯示#include<stdio.h>#include<string.h> 不。int 不。{般unsignedshort般int以char以i=法s=法if(s>= return-}memcpy(buf,argv[2buf[i]=下printf("成功拷貝%d個字節(jié)\nreturn}然后這個值被賦予unndhot類型的整數(shù),由于位進 ,16位能 的最大數(shù)是即:十進制的65535,因此,unsignedshort 的范圍是0–65535,如果這個值大于unsignedshort類型所能夠 1系統(tǒng)只取后面16位進行。下面的例子列舉了另#includeintmain(intargc,char{intn1=intn2=0x intn6=0x8fffffff;printf("%d(0x%x)+1=%d(0x%x)\n",n1,n1,n1+1,n1+1);printf("%d(0x%x)+%d(0x%x)=%d(0x%x)\n",n2,n2,n2,n2,n2+n2,printf("%d(0x%x)*4=%d(0x%x)\n",n2,n2,n2*4,n2*4);printf("%d(0x%x)-%d(0x%x)=%d(0x%x)\n",n2,n2,n6,n6,n2-n6,n2-return}整數(shù)溢出還有可能在動態(tài)分配內存時被利用。請看代碼P02_11.c該代碼將array拷貝到newarray中,生成exe文件,運行看似沒有問題。但是如果輸入下 令我們知道,1073741824的16進制是 ,從前一個例子可看出 *4=0x0。因此,屏幕上顯示很顯然,這個看起來沒有問題的函數(shù),可能出現(xiàn)在沒有為nw分配內存況向里面拷貝組元環(huán)次數(shù)還非多重時造成系統(tǒng) 。 者通過選擇一個合適的值給n可使得循環(huán)復執(zhí)行導致緩沖溢出#include#include<stdio.h>int*arraycpy(int*array,intlen)newarray=if(newarray==NULL)return- for(i=0;i<len;i++)newarray[i]=}return}intmain(intargc,char*argv[]){intarray[]={1,2,3,4,5};return0;}還有一種情況,通過改寫m的控制結,也能夠在正常的函數(shù)運行的過程中插入其他可執(zhí)行 代碼。請看P02_12.c該例子看起來無懈可擊,并且進行了len1和len2相加之后的檢查,2147483647的16進制為0x7FFFFFFF。該運行結果為程 。根本不會顯示:"超出mybuf容納范圍!"。是什么原因?大家自#include#include<stdio.h>intcatstring(char*buf1,char*buf2,intlen1,int{charmybuf[256];if((len1+len2)>256){return-}memcpy(mybuf+len1,buf2, return}intmain(intargc,char*argv[])return} 充分考慮各種數(shù)據(jù)的取值范圍,使用合適的數(shù)據(jù)類型盡量不要在不同范圍的數(shù)據(jù)類型之間進行賦值;等voidInsertInt(intindex,int{Array[index]=}intmain(intargc,char*argv[])intindex=atoi(argv[1]);intvalue=atoi(argv[2]);return0;}相當于在Array基址后偏移600個整數(shù)元素空間字符串格式化不當,也可能造成,其方法和緩沖這種的函數(shù)有printf函數(shù)、sprintf函數(shù)等等。不過一般說來,這種可以很容易避免printf("%s",此種是怎樣出現(xiàn)的呢?下面舉一個例子。如:打印輸printf("%s",則會出現(xiàn)安全隱患,在不知不覺中打開了一個安pipid的參數(shù)值就從堆棧中取出,并取代所在的為止。很明顯,者可以通過打印出堆棧中的這些值來偷看程序或是向運行中程序的內存里寫入任意值#include#includeintmain(intargc,char{return
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年枸杞采摘采摘技術與設備租賃合同3篇
- 二零二五年度網(wǎng)絡安全人才培養(yǎng)與輸送合同2篇
- 二零二五版果園果樹種植與農(nóng)業(yè)技術培訓服務合同樣本3篇
- 二零二五年度采砂廠承包綜合效益評估合同范本3篇
- 二零二五版智能化住宅項目施工及造價管理合同3篇
- 二零二五年度環(huán)保污水處理設備采購補充合同范本2篇
- 2025年新型城鎮(zhèn)化項目場地租賃與開發(fā)建設合同范本2篇
- 二零二五版環(huán)保設施投資合作合同3篇
- 二零二五版交通事故車輛損失賠償合同3篇
- 二零二五版特種車輛租賃及操作培訓合同3篇
- 寒潮雨雪應急預案范文(2篇)
- DB33T 2570-2023 營商環(huán)境無感監(jiān)測規(guī)范 指標體系
- 上海市2024年中考英語試題及答案
- 房屋市政工程生產(chǎn)安全重大事故隱患判定標準(2024版)宣傳海報
- 垃圾車駕駛員聘用合同
- 2025年道路運輸企業(yè)客運駕駛員安全教育培訓計劃
- 南京工業(yè)大學浦江學院《線性代數(shù)(理工)》2022-2023學年第一學期期末試卷
- 2024版機床維護保養(yǎng)服務合同3篇
- 《論拒不執(zhí)行判決、裁定罪“執(zhí)行能力”之認定》
- 工程融資分紅合同范例
- 2024國家安全員資格考試題庫加解析答案
評論
0/150
提交評論