<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>

    緩沖區溢出使用說明書

    VSole2022-04-25 15:37:27

    前言

    本文主要說明緩沖區溢出及其發生方式。

    緩沖區溢出是通過覆蓋進程或程序的內存片段而發生的。

    覆蓋進程的某些指針和寄存器的值會導致分段錯誤,從而導致多個錯誤,從而導致以異常方式終止程序執行。

    緩沖區溢出的定義

    緩沖區是一種易丟失的內存配置,它們當數據從一個位置轉移到另一個位置時臨時性的保存這些數據。當正在處理的數據超過內存緩沖區的存儲容量時,會發生緩沖區溢出。

    項目中這種結果會造成溢出數據覆蓋到相鄰內存位置,從而導致緩沖區溢出。當我們對 char 類型的緩沖區進行操作時,會發生緩沖區溢出。

    我們將嘗試用幾個例子來理解這個概念。

    例如,一個緩沖區設定為只能接受8字節的數據,在這種情況下,如果用戶輸入的數據超過8字節,則超過8字節的數據部分將覆蓋相鄰內存從而超過已分配緩沖區的邊界。這最終會產生分段錯誤,之后引發許多其他錯誤,導致程序執行被終止。


    如上所述,分配的內存是8個字節,而用戶輸入的數據是10個字節,超過了緩沖區邊界,而那些額外的2個字節的數據(E&R)覆蓋了相鄰的內存位置。現在我們已經大致了解了緩沖區溢出,是時候對緩沖區溢出的類型進行一些了解了。

    緩沖區溢出類型

    緩沖區溢出有兩種類型,一種是棧緩沖區溢出,一種是堆緩沖區溢出。

    我們來對其總結一下。

    棧緩沖區溢出

    當一個程序覆蓋到一個內存地址,但該地址在一個固定長度的程序所調用緩沖區邊界以外的位置,就會發生這種情況。

    在棧緩沖區溢出中,額外的數據被寫入堆棧上的相鄰緩沖區中。這通常會導致應用程序崩潰,因為這種堆棧上溢出會導致內存損壞方面的錯誤。

    堆緩沖區溢出

    堆是一種用于動態內存分配管理的內存結構。它通常用于分配在編譯時大小未知的內存,其中所需的內存量太大以至于無法安裝在堆棧上。

    堆溢出或堆噴是堆數據區域中發生的一種緩沖區溢出。

    基于堆的溢出的利用不同于基于棧的溢出利用。堆上的內存是在運行時動態分配的且通常包含程序數據。

    利用堆緩沖區溢出漏洞是通過以特定方式損壞此數據來完成的,從而導致應用程序覆蓋內部結構(例如鏈表指針)。

    緩沖區溢出攻擊

    最常見的緩沖區溢出攻擊稱為基于堆棧的緩沖區溢出或普通緩沖區溢出攻擊,該堆棧通常為空,直到程序需要用戶輸入(如用戶名或密碼)。否則該堆棧通常為空。

    然后,程序將返回內存地址寫入堆棧,然后將用戶的輸入存儲在堆棧之上。在處理堆棧時,用戶的輸入將發送到程序指定的返回地址。

    -但是,堆棧的特定內存量在開始時分配,這使得它有限。如果用戶輸入的數據大于堆棧中分配的內存量,并且程序沒有任何輸入驗證,可以驗證提供的數據是否適合分配的內存,則將導致溢出。

    如果堆棧緩沖區中充滿了不受信任的用戶提供的數據,則用戶可以以將惡意可執行代碼注入正在運行的程序并控制進程的方式損壞堆棧。

    棧緩沖區溢出原理

    借助示例可以理解基于堆棧的緩沖區溢出事件。我們將使用一個非常簡單的C++程序來演示基于堆棧的緩沖區溢出。

    #include using namespace std;int main(){char buffer[8];cout<<“Input data : ";cin>>buffer;return 0;}
    

    在上面的代碼中,我們使用了一個字符型變量,并創建了一個名為"buffer"的數組,該數組最多可以存儲8個字節的數據。

    此程序在執行時等待用戶輸入。用戶將數據放入輸入字段后,應用程序會將值存儲在分配的 8 個字節的內存中。如果用戶提供的數據大于 8 個字節,則會覆蓋相鄰的內存位置,從而導致進程終止。

    您可以使用任何C++編譯器來執行上述給定的程序。為此,我們使用了一個在線編譯器。只需將上述源代碼復制粘貼到編譯器中,然后點擊運行按鈕即可。


    編譯后,程序被執行。

    在第一次執行時,我們提供了"bufferov"作為輸入數據。



    正如我們在上圖中看到的那樣,程序正常退出,退出代碼為0。退出代碼 0 表示進程的成功執行。

    這是因為用戶提供的數據輸入僅為 8 個字節。

    隨后,我們通過在輸入字段中提供"bufferoverflow"作為輸入數據來測試程序,并檢查了結果。



    正如我們在上圖中看到的,它說檢測到堆棧粉碎,并且程序退出,退出代碼為134。退出代碼 134 表示程序已中止(收到 SIGABRT),這可能是由于斷言失敗的結果。

    檢測到的堆棧粉碎錯誤是由編譯器生成的,以響應其針對緩沖區溢出的防御機制。此處發生緩沖區溢出,因為分配的緩沖區設計為僅保存 8 個字節,而用戶提供的輸入數據為 14 個字節。

    這額外的 6 個字節超過了緩沖區邊界,覆蓋了堆棧中存在的相鄰內存位置。這創建了分段錯誤,導致堆棧粉碎錯誤。


    結束語










    本文主要說明了棧緩沖區溢出和堆緩沖區溢出攻擊的基本概念。

    并且通過具體的程序演示說明了緩沖區溢出的原理。






    【火線Zone云安全社區群】

    進群可以與技術大佬互相交流

    進群有機會免費領取節假日禮品

    進群可以免費觀看技術分享直播

    識別二維碼回復【社區群】進群



    【火線zone社區周激勵】

    2022.4.18~ 2022.4.24公告


    【相關精選文章】




    火線Zone是[火線安全平臺]運營的云安全社區,內容涵蓋云計算、云安全、漏洞分析、攻防等熱門主題,研究討論云安全相關技術,助力所有云上用戶實現全面的安全防護。歡迎具備分享和探索精神的云上用戶加入火線Zone社區,共建一個云安全優質社區!

    如需轉載火線Zone公眾號內的文章請聯系火線小助手:hxanquan(微信)


    // 火線Zone //

    微信號 : huoxian_zone


    點擊閱讀原文,加入社區,共建一個有技術氛圍的優質社區!

    堆棧緩沖區溢出
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    緩沖區溢出及其發生方式
    根據攻擊性安全公司Bishop Fox的最新報告,雖然Fortinet已經發布安全更新一個多月,但仍有數十萬個FortiGate防火墻的嚴重漏洞(CVE-2023-27997)未得到修補。
    該漏洞由專注于物聯網的安全公司Senrio的研究人員發現,位于名為gSOAP工具和;用于開發XML Web服務和XML應用程序的高級C/C++自動編碼工具。
    ..aaaagf,一共有260個寬字符。漏洞跟蹤將構造好的U盤插入Windows 2000系統,在ollydbg中開啟cmd.exe進程,如下圖:在命令行窗口執行dir e:,進程出現異常。這里我用了污點數據追蹤的方法來找程序的crash point,也就是說在堆棧區找到我們構造的污點數據aaaaaaaa…
    Ivanti解決了Secure VPN設備中的一個嚴重性很高的緩沖區溢出漏洞,該漏洞可能允許經過身份驗證的遠程攻擊者以提升的特權執行任意代碼。跟蹤為CVE-2021-22908的漏洞已獲得的CVSS評分,它會影響Pulse Connect Secure版本和。讀取公司發布的安全公告。* CERT協調中心還發布了有關該漏洞的公告,該漏洞與Pulse Connect Secure設備連接到Windows文件共享的功能有關。根據CERT的說法,該功能由許多CGI腳本實現,這些CGI腳本使用基于Samba 的庫和幫助程序。讀取CERT協調中心發布的警報。
    Beniamini表示,Broadcom固件代碼中的堆棧緩沖區溢出問題可能會導致遠程代碼執行漏洞,允許智能手機WiFi范圍內的攻擊者在設備上發送和執行代碼。Google Project Zero團隊于去年12月向Broadcom報告了這一問題。蘋果和谷歌都通過周一發布的安全更新解決了該漏洞,谷歌通過其Android 2017年4月安全公告發布了更新,蘋果發布了iOS 10.3.1更新。
    蘋果也沒有提供有關該漏洞的任何技術細節,但敦促蘋果iPhone、iPad和iPod Touch用戶盡快更新設備。在iOS 10.3.1附帶的安全說明中,蘋果將該問題描述為堆棧緩沖區溢出漏洞,該公司通過改進輸入驗證解決了該漏洞。該漏洞允許攻擊者在范圍內在手機的Wi-Fi芯片上執行惡意代碼。
    總部位于英國曼徹斯特的 NCC 集團的 IT 安全研究人員發布了一份技術咨詢,解釋了 Nuki 智能鎖如何容易受到過多攻擊的可能性。 值得注意的是,Nuki Home Solutions 是一家位于奧地利格拉茨的歐洲智能家居解決方案供應商。以下是 Nuki 鎖的 11 個缺陷的詳細概述。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类