虛擬機安裝:Ubuntu 12.04(x86)
這個帖子是最簡單的漏洞開發教程系列,在互聯網上你可以找到很多關于它的文章。盡管它豐富和熟悉,我更喜歡自己寫博客文章,因為它將作為我未來許多職位的先決條件!
什么是緩沖區溢出?
將源緩沖區復制到目標緩沖區可能導致溢出
1、源字符串長度大于目標字符串長度。
2、不進行大小檢查。
緩沖區溢出有兩種類型:
1、基于堆棧的緩沖區溢出 - 這里的目標緩沖區位于堆棧中
2、基于堆的緩沖區溢出 - 這里的目標緩沖區位于堆中
在這篇文章中,我將只討論基于堆棧的緩沖區溢出。堆溢出將在Linux(x86)漏洞開發教程系列的 “3級”中討論!
緩沖區溢出錯誤導致任意代碼執行!
什么是任意代碼執行?
任意代碼執行允許攻擊者執行他的代碼以獲得對受害機器的控制。受害機器的控制是通過多種方式實現的,例如產生根shell,添加新用戶,打開網口等...
聽起來很有趣,足夠的定義讓我們看看緩沖區溢出攻擊的代碼!
漏洞代碼
編譯代碼
上述漏洞代碼的[2]行顯示了緩沖區溢出錯誤。這個bug可能導致任意代碼執行,因為源緩沖區內容是用戶輸入的!
如何執行任意代碼執行?
使用稱為“ 返回地址覆蓋 ”的技術實現任意代碼執行。這種技術有助于攻擊者覆蓋位于堆棧中的“返回地址”,并且這種覆蓋將導致任意代碼執行。
在研究漏洞代碼之前,為了更好的理解,讓我們反匯編并且繪制出漏洞代碼的堆棧布局。
反匯編
堆棧布局:
因為我們已經知道用戶輸入的大于256,將溢出目標緩沖區并覆蓋堆棧中存儲的返回地址。通過發送一系列“A”來測試它。
測試步驟1:是否可以覆蓋返回地址?
以上輸出顯示指令指針寄存器(EIP)被“AAAA”覆蓋,這樣可以確定覆蓋返回地址是可能的!
測試步驟2:目的緩沖區的偏移量是多少?
這里讓我們找出返回地址相對與目的緩沖區'buf'的偏移量。在反匯編并繪制了main()的堆棧布局后,現在可以嘗試找到偏移位置信息! 堆棧布局顯示返回地址位于距目標緩沖區“buf”的偏移(0x10c)處。 0x10c計算如下:
哪里
因此,用戶輸入的 “A” * 268 + “B” * 4,覆蓋了’buf‘,對齊空間和調用者的ebp覆蓋為”A"并且返回地址變為"BBBB"
以上輸出顯示攻擊者可以控制返回地址。 位于堆棧位置(0xbffff1fc)的返回地址被“BBBB”覆蓋。 有了這些信息,我們可以編寫一個漏洞利用程序來實現任意的代碼執行。
攻擊代碼:
執行上面的exploit程序,給了我們root shell,如下所示:
注意:為了獲得這個root shell,我們關閉了許多漏洞利用緩解技術。 對于所有文章中的1級,我已經禁用了這些利用減輕技術,因為第1級的目標是向您介紹漏洞。 當我們進入Linux(x86)利用開發教程系列的“2級”時,真正的樂趣會發生在這里,我將在此討論繞過這些利用減輕技術!
1024你懂的国产日韩欧美_亚洲欧美色一区二区三区_久久五月丁香合缴情网_99爱之精品网站
責任編輯:韓希宇
免責聲明:
中國電子銀行網發布的專欄、投稿以及征文相關文章,其文字、圖片、視頻均來源于作者投稿或轉載自相關作品方;如涉及未經許可使用作品的問題,請您優先聯系我們(聯系郵箱:cebnet@cfca.com.cn,電話:400-880-9888),我們會第一時間核實,謝謝配合。