久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 緩沖區溢出指的是什么

緩沖區溢出指的是什么 時間:2018-12-28      來(lai)源:華清遠見(jian)

緩沖(chong)區(qu)溢出,是針(zhen)對程(cheng)序設計(ji)缺陷,向程(cheng)序輸入緩沖(chong)區(qu)寫入使之(zhi)溢出的(de)內(nei)容(通(tong)常(chang)是超過緩沖(chong)區(qu)能保存的(de)最大數據量的(de)數據),從(cong)而破壞程(cheng)序運行、趁著中斷之(zhi)際并獲取程(cheng)序乃至系統(tong)的(de)控制權。

計算機(ji)程(cheng)(cheng)序(xu)(xu)(xu)一般都會使用到一些(xie)內(nei)(nei)存(cun)(cun)(cun),這些(xie)內(nei)(nei)存(cun)(cun)(cun)或(huo)是(shi)程(cheng)(cheng)序(xu)(xu)(xu)內(nei)(nei)部(bu)使用,或(huo)是(shi)存(cun)(cun)(cun)放用戶的(de)輸(shu)入(ru)(ru)數(shu)(shu)(shu)據(ju)(ju)(ju),這樣(yang)的(de)內(nei)(nei)存(cun)(cun)(cun)一般稱(cheng)作緩(huan)沖(chong)區。溢(yi)出是(shi)指盛放的(de)東西(xi)超(chao)出容(rong)(rong)器容(rong)(rong)量而(er)溢(yi)出來(lai)了(le)(le),在計算機(ji)程(cheng)(cheng)序(xu)(xu)(xu)中,就(jiu)(jiu)是(shi)數(shu)(shu)(shu)據(ju)(ju)(ju)使用到了(le)(le)被分(fen)配內(nei)(nei)存(cun)(cun)(cun)空(kong)間之(zhi)外(wai)的(de)內(nei)(nei)存(cun)(cun)(cun)空(kong)間。而(er)緩(huan)沖(chong)區溢(yi)出,簡單(dan)的(de)說(shuo)就(jiu)(jiu)是(shi)計算機(ji)對接收的(de)輸(shu)入(ru)(ru)數(shu)(shu)(shu)據(ju)(ju)(ju)沒有進(jin)行有效的(de)檢(jian)測(理想的(de)情況是(shi)程(cheng)(cheng)序(xu)(xu)(xu)檢(jian)查數(shu)(shu)(shu)據(ju)(ju)(ju)長(chang)度(du)并不允許輸(shu)入(ru)(ru)超(chao)過(guo)緩(huan)沖(chong)區長(chang)度(du)的(de)字符(fu)),向緩(huan)沖(chong)區內(nei)(nei)填(tian)充數(shu)(shu)(shu)據(ju)(ju)(ju)時超(chao)過(guo)了(le)(le)緩(huan)沖(chong)區本身(shen)的(de)容(rong)(rong)量,而(er)導致數(shu)(shu)(shu)據(ju)(ju)(ju)溢(yi)出到被分(fen)配空(kong)間之(zhi)外(wai)的(de)內(nei)(nei)存(cun)(cun)(cun)空(kong)間,使得溢(yi)出的(de)數(shu)(shu)(shu)據(ju)(ju)(ju)覆(fu)蓋(gai)了(le)(le)其他內(nei)(nei)存(cun)(cun)(cun)空(kong)間的(de)數(shu)(shu)(shu)據(ju)(ju)(ju)。

在(zai)計算機安(an)全領域(yu),緩(huan)(huan)(huan)沖區(qu)溢(yi)出(chu)就好比給自己的(de)(de)程(cheng)(cheng)序(xu)(xu)開了個(ge)后(hou)門,這種安(an)全隱(yin)患是致命(ming)的(de)(de)。緩(huan)(huan)(huan)沖區(qu)溢(yi)出(chu)在(zai)各(ge)種操作系統、應(ying)用(yong)軟件中廣(guang)泛存(cun)在(zai)。而利用(yong)緩(huan)(huan)(huan)沖區(qu)溢(yi)出(chu)漏洞(dong)實施(shi)的(de)(de)攻擊就是緩(huan)(huan)(huan)沖區(qu)溢(yi)出(chu)攻擊。緩(huan)(huan)(huan)沖區(qu)溢(yi)出(chu)攻擊,可以導致程(cheng)(cheng)序(xu)(xu)運行(xing)(xing)失敗(bai)、系統關機、重新啟動,或者(zhe)執行(xing)(xing)攻擊者(zhe)的(de)(de)指令,比如非(fei)法(fa)提(ti)升權限。通過(guo)往(wang)程(cheng)(cheng)序(xu)(xu)的(de)(de)緩(huan)(huan)(huan)沖區(qu)寫超出(chu)其長度的(de)(de)內容,造成緩(huan)(huan)(huan)沖區(qu)的(de)(de)溢(yi)出(chu),從而破壞程(cheng)(cheng)序(xu)(xu)的(de)(de)堆棧,造成程(cheng)(cheng)序(xu)(xu)崩潰或使程(cheng)(cheng)序(xu)(xu)轉而執行(xing)(xing)其它(ta)指令,以達到攻擊的(de)(de)目(mu)的(de)(de)。造成緩(huan)(huan)(huan)沖區(qu)溢(yi)出(chu)的(de)(de)原因是程(cheng)(cheng)序(xu)(xu)中沒有(you)仔細檢查用(yong)戶輸入的(de)(de)參數。

下面通過一個(ge)示例來詳細看(kan)(kan)看(kan)(kan)什么是緩(huan)沖(chong)區(qu)溢(yi)出(chu)。程序(xu)(xu)的(de)(de)(de)(de)緩(huan)沖(chong)區(qu)就(jiu)像(xiang)一個(ge)個(ge)格子(zi)(zi)(zi)(zi)(zi)(zi),每(mei)個(ge)格子(zi)(zi)(zi)(zi)(zi)(zi)中存放不(bu)同的(de)(de)(de)(de)東西,有的(de)(de)(de)(de)是命(ming)令,有的(de)(de)(de)(de)是數據(ju)(ju),當程序(xu)(xu)需要接收用(yong)戶(hu)(hu)數據(ju)(ju),程序(xu)(xu)預先(xian)為之分(fen)配(pei)(pei)了(le)4個(ge)格子(zi)(zi)(zi)(zi)(zi)(zi)(下圖中黃色(se)的(de)(de)(de)(de)1~4號(hao)格子(zi)(zi)(zi)(zi)(zi)(zi))。按照程序(xu)(xu)設(she)計,就(jiu)是要求用(yong)戶(hu)(hu)輸(shu)入(ru)的(de)(de)(de)(de)數據(ju)(ju)不(bu)超過4個(ge)。而用(yong)戶(hu)(hu)在輸(shu)入(ru)數據(ju)(ju)時(shi),假(jia)設(she)輸(shu)入(ru)了(le)17數據(ju)(ju),而且程序(xu)(xu)也沒有對用(yong)戶(hu)(hu)輸(shu)入(ru)數據(ju)(ju)的(de)(de)(de)(de)多少進行檢查,就(jiu)往預先(xian)分(fen)配(pei)(pei)的(de)(de)(de)(de)格子(zi)(zi)(zi)(zi)(zi)(zi)中存放,這樣(yang)不(bu)僅4個(ge)分(fen)配(pei)(pei)的(de)(de)(de)(de)格子(zi)(zi)(zi)(zi)(zi)(zi)被使用(yong)了(le),其后(hou)相鄰的(de)(de)(de)(de)13個(ge)格子(zi)(zi)(zi)(zi)(zi)(zi)中的(de)(de)(de)(de)內(nei)容都被新數據(ju)(ju)覆(fu)蓋了(le)。這樣(yang)原來13個(ge)格子(zi)(zi)(zi)(zi)(zi)(zi)中的(de)(de)(de)(de)內(nei)容就(jiu)丟失了(le)。這時(shi)就(jiu)出(chu)現了(le)緩(huan)沖(chong)區(qu)(1~4號(hao)格子(zi)(zi)(zi)(zi)(zi)(zi))溢(yi)出(chu)了(le)。

緩沖區溢出

如下代碼的(de)問題就(jiu)出在strcpy(buf, s)這條語句(ju)上,它(ta)將s拷貝到(dao)buf中,而沒有對s的(de)長度(du)進行限制(zhi),這就(jiu)給(gei)緩(huan)沖區(qu)溢(yi)出攻擊(ji)提供了可乘之計。

#include 

#include 

void vulFunc(char* s)

{

    char buf[10];

    strcpy(buf, s);

    printf("String=%s\n", buf);

}

 

main(int argc, char* argv[])

{

     if(argc == 2)

     {   

           vulFunc(argv[1]);

     }

   else

   {

      printf(";Usage: %s \n", argv[0]);

   }

}

緩沖(chong)區(qu)溢(yi)出一般是由于一下原(yuan)因(yin)導致:

1.字(zi)符串處理函數沒有(you)指定長度,單單憑借結(jie)尾(wei)字(zi)符是(shi)不(bu)是(shi)'\0'來(lai)判斷結(jie)束。

2.被處理的字(zi)符超過緩沖區可接受的大小。例如(ru),從屏幕(mu)輸入(ru)字(zi)符串(chuan):gets(buff),但是(shi)buff的內存(cun)少于屏幕(mu)一行字(zi)符個數,就會導致溢出,應該使(shi)用fgets。

3.所有格式化字符(fu)串的函(han)數(shu):fprintf("%n";,&num_write)。

避免的辦法:

1.不要把用戶的輸入(ru)作為參數傳(chuan)到格式化字符串處理函數中(zhong),例如,printf("%s", argv[1])。

2.字(zi)符串(chuan)處(chu)理避免使用(yong)(yong)strcpy,strcat,sprintf,gets。應該使用(yong)(yong)strncpy,strncat,snprintf。strlcpy和strlcat都是NULL結尾。盡(jin)量(liang)使用(yong)(yong)std::string,MFC::CString

3.使用C++ I/O函數(shu)

4.使(shi)用(yong)安全的C Runtime Time函數(shu)

5.檢查(cha)文件路徑的長度,不要超(chao)過系統允(yun)許(xu)的最大值。

上一篇:什么是字符串數組

下一篇:ARM工程師是做什么的?需要掌握什么技能?

熱(re)點文章推(tui)薦
華清學員就業(ye)榜(bang)單
高(gao)薪學員經驗分(fen)享
熱點新聞推薦
前臺(tai)專線:010-82525158 企業培(pei)訓(xun)洽談專線:010-82525379 院校合作(zuo)洽(qia)談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部