緩沖區溢出


一、定義

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

二、原理

  程序的緩沖區就像一個個格子。當程序需要接收用戶數據,程序預先為之分配了若干個格子。用戶在輸入數據時,假設輸入了更多數據,而且程序也沒有對用戶輸入數據的多少進行檢查,就往預先分配的格子中存放,這樣不僅分配的格子被使用了,其后相鄰的格子中的內容都被新數據覆蓋了。這樣原來后續格子中的內容就丟失了。

三、實踐

  C語言編程中,一些不作邊界檢查的字符串拷貝函數(如strcpy)容易造成緩沖區溢出。

  后續編程以strcpy()函數為核心,代碼如下:

  #include <stdio.h>

  #include <string.h>

  int main(int argc, char* argv[])

  {

      int apple;

      char buf[9];

      strcpy(buf,"11111111111111111111111111111111111111111");

      if (apple == 0x64636261)

      {

          printf("hello world!");

      }

  getchar();

    return 0;

  }

  使用Microsoft Visual C++編譯運行后出現報錯

 

 

  原因是buf數組輸入了過長數據。

 

  查看緩沖區發現緩沖區溢出,沖去原有EIP、EBP,導致后續運行失敗,未能打印結果。

 

 

 

四、防范措施

 

 在進行程序設計時,為了防范緩沖區溢出攻擊,可以采用哪些方法?

 

  1、通過操作系統使得緩沖區不可執行,從而阻止攻擊者植入攻擊代碼;

 

  2、強制寫正確的代碼的方法;

 

  3、利用編譯器的邊界檢查來實現緩沖區的保護,使得緩沖區溢出不可能出現,從而完全消除了緩沖區溢出的威脅。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM