緩衝區溢位實戰教程系列(一):第一個緩衝區溢位小程式
*本文原創作者:kaliking,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載
在安全圈裡我們會經常聽到或用到一些0day漏洞,在印象裡我們都覺的只有真正的大神才能挖掘到這樣的漏洞,事實也的確如此。不過也不要被嚇到,其實大部分的0day是緩衝區溢位漏洞演化而來,只要我們瞭解了緩衝區溢位原理,假以時日也可以自己挖掘出0day漏洞。
由於是本系列的開篇,所以不給大家講解過多的原理,今天先讓大家直觀感受一下什麼是緩衝區溢位,讓各位有一個初步的認識,閒話少敘,讓我們開始。
給大家一段c語言編寫的程式碼,大家在DEV中編譯執行一下:
#include <stdio.h> #include <string.h> char name[] = "kalikingkalikingkaliking" ; int main() { char buffer[8]; strcpy(buffer, name); printf("%s\n",buffer); getchar(); return 0; }
在win7中會出現以下報錯,如圖所示:
有一點c語言基礎的人就不難看出問題所在,在程式中我們要把變數name的值拷貝給變數buffer,但我們分配給變數的空間只有8個位元組,而name的長度遠遠大於8個位元組。這就導致系統原本分配的空間不足而佔用了本來用於儲存程式返回地址的空間,導致程式無法正常執行。
今天先不講原理,先講講分析緩衝區溢位必備的幾款軟體:
1. Dev-C ++ 是一個 免費的 全功能 整合開發環境 (IDE),分佈在 GNU通用公共許可證下, 用於 C 和 C ++程式設計 。它是用 Delphi 編寫的。
免費下載地址:://sourceforge.net/projects/orwelldevcpp/files/latest/download
2. OllyDbg (以其作者Oleh Yuschuk命名)是一個強調二進位制程式碼分析的x86偵錯程式。
免費下載地址: http://www.ollydbg.de/odbg201.zip
3. IDA (Interactive Disassembler)是 反彙編 為 計算機 軟體 ,其生成 組合語言 原始碼 從機器可執行程式碼。它支援多種 可執行檔案格式 為不同 的處理器 和 作業系統 。它還可以用作Windows PE, Mac OS X Mach-O 和 Linux ELF 可執行檔案的 偵錯程式 。
免費版下載地址: https://www.hex-rays.com/products/ida/support/download_freeware.shtml
接下來介紹一下三個軟體的基本使用方法:
在這裡只介紹在程式分析過程中常用的方法,其餘的詳細使用教程請自行Google
Dev c++的使用方法:
1.新建原始碼檔案
由於我們編寫的原始碼,只為了瞭解緩衝區溢位的原理,所以不必過於複雜,我們只需要新建個原始碼檔案就可以了,沒必要建立專案檔案。

把我們上邊的示例程式碼拷貝進去,儲存與其他編輯器無異,ctrl+s就ok,我習慣儲存成c檔案,這個大家隨意。

2.編譯執行:
編譯執行就很簡單了,點選工具欄最上方的執行,接著在下拉選單中找到編譯和執行,點選:
這時候會看到資料夾中多了一個exe檔案這就是我們要用來除錯的程式:
3.除錯和檢視彙編程式碼
這個是比較重要的一步,因為在編寫shellcode的時候會用到,這裡只講用法,如何提取shellcode以後再講。
首先設定斷點,選擇設定斷點的行,可以再前面行標出單擊也可以按F4,當行標處出現紅點說明斷點設定成功。
然後開啟除錯模式,我們點選下方選項卡里的除錯,接著點選除錯按鈕。
接著點選檢視CPU視窗:
我們就會看到彙編程式碼介面:
dev c++幾個重要用法已經說完了,還要跟大家說一下如何解決安裝使用過程中經常會出現zlib2.dll檔案丟失的問題。
解決辦法如下:
1.下載zlib1.dll:
http://www.pc6.com/softview/SoftView_81060.html
2.解壓後放到系統目錄中
32位系統:放到C:\Windows\System32\(此處為系統目錄)
64位系統:放到C:\Windows\SysWOW64\
為了不使篇幅過長,其餘兩個軟體使用方法我將在下一篇文章中進行講解。
*本文原創作者:kaliking,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載