緩沖區溢出提綱

緩沖區溢出簡單的來講分為兩種

  • 棧溢出
  • 堆溢出

那么什么是棧什么是堆呢

在這里簡單談一下對于堆和棧的理解 :

<p>: 用來為程序中已經聲明的變量來分配內存空間的地址,以及保存函數返回地址的空間,可以用來實現函數的遞歸調用。

例如 int ,char 這類的定義的數據。

<p>: 在程序運行時動態分配的內存。一般使用一個堆指針來使用得到的內存。堆在使用時需要實用專有的函數進行聲明。如C語言的malloc以及C++的new。注意使用完后要回收內存,否則會造成內存泄露。

例如 int *name;
name = (int *)malloc(8);

棧溢出

  • 修改臨接變量(變量越界缺陷)

  • 修改函數返回地址"自主控制":
    定位工具:ollydbg.exe
    相對地址選擇:kernel32.dll user32.dll

  • S·E·H結構函數: 將異常處理函數入口地址更改為shellcode的地址。

堆溢出

堆的結構(堆區)
  • 堆塊 :
  • 塊首:8byte,用來存儲堆塊的信息
  • 塊身: 用來存放數據(堆塊的指針是直接指向快身的)
  • 堆表 :堆區的起始。 空閑堆塊的索引。
    最重要的堆表有兩種:
    空表(雙向鏈表)128項。
    塊表(一般在緩沖區溢出中不予利用)
堆溢出的利用
  • Dword Shoot:利用堆管理時“卸下”操作。
  • Heap Spray:申請大量內存。slide code → shell code。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容