<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    為什么棧緩沖區溢出比堆溢出更容易被攻擊者利用


    發現錯別字 2年前 提問
    回答
    1
    瀏覽
    368
    請勿發布不友善或者負能量的內容。與人為善,比聰明更重要!
    回答數量: 1
    等保中級測評師 CICSA

    棧緩沖區溢出比堆溢出更容易被攻擊者利用:
    利用基于棧的溢出,通常可以立即控制棧上的已保存返回地址,并因此控制當前功能返回的指令指針。
    利用基于堆的溢出,通常可以將內存中的任意指針設置為任意值。

    棧緩沖區溢出

    在信息安全和編程中,緩沖區溢出或緩沖區溢出是一種異常,其中程序在將數據寫入緩沖區時會超出緩沖區的邊界并覆蓋相鄰的存儲器位置。

    緩沖區是專門用于存放數據的內存區域,通常在將程序從一個程序段移動到另一個程序段時,或者在程序之間移動。緩沖區溢出通常可能由格式錯誤的輸入觸發;如果假設所有輸入都小于某個大小并且緩沖區被創建為該大小,那么產生更多數據的異常事務可能導致它寫入緩沖區的末尾。如果這會覆蓋相鄰的數據或可執行代碼,則可能導致程序行為不穩定,包括內存訪問錯誤,錯誤結果和崩潰。

    利用緩沖區溢出的行為是眾所周知的安全漏洞。在許多系統中,程序的內存布局或整個系統都是明確定義的。通過發送旨在引起緩沖區溢出的數據,可以寫入已知可保存可執行代碼的區域并將其替換為惡意代碼,或者有選擇地覆蓋與程序狀態有關的數據,從而導致未被原始程序員。緩沖區在操作系統(OS)代碼中很常見,因此可以進行執行權限提升的攻擊并獲得對計算機資源的無限制訪問。 1988年著名的莫里斯蠕蟲將其作為攻擊技術之一。

    堆溢出

    簡單來說:堆塊中Data區存儲超過了分配的大小從而覆蓋后面堆塊的結構。

    堆塊從空表中取下舉例

    圖片

    從空表中卸下一個堆塊

    當空閑堆塊取下時,為了保持其他空閑堆塊信息的完整,需要前后堆塊中flink和blink信息的更改。

    在快表中類似,只用前節點保存被取下節點的Flink結構即可。

    但倘若我們我們通過多寫入當前堆塊的Data區域,使之覆蓋后一個空閑堆塊的Headers甚至是Flink和Blink,那么當這個空閑堆塊被使用而從空表或快表中取下時,我們實際控制了相關節點的向前或向后指針,快表或空表就會認為偽造的Flink或者Blink中的地址中是空閑的堆塊,從而在分配下一個空閑堆塊時,向偽造的的地址寫入。這樣的攻擊實現了任意地址寫。

    棧緩沖區溢出比堆溢出更容易被攻擊者利用

    利用基于棧的溢出,通常可以立即控制棧上的已保存返回地址,并因此控制當前功能返回的指令指針。可以將指令指針指向包含shellcode的任意地址(通常位于觸發溢出的同一緩沖區內)。

    利用基于堆的溢出,通常可以將內存中的任意指針設置為任意值。正常情況下,利用這種修改來控制執行流還需要采取其他步驟。此外,使堆緩沖區溢出后,滲透測試員可能無法立即實施攻擊,而要依賴于影響堆內存分配的意外事件。

    回答所涉及的環境:聯想天逸510S、Windows 10。

    2年前 / 評論
    亚洲 欧美 自拍 唯美 另类