宣告:原來是pdf格式的文件,我花了點時間手工轉成了文字文件了。
幻影旅團溢位學習材料
顯示了'access violation when executing [41414141]..'的資訊,右上角視窗顯示eip的值為位址指向41414141,這就意味著,ftp認證部分的user命令上存在著緩衝區溢位,超長的字串覆蓋了eip。接下來我們將不停的嘗試除錯這個bug,由於每次除錯都可能造成war-ftpd程序死掉,你可以在中通過'debug->restart'來重啟程序。
三、除錯漏洞
發現了軟體漏洞,我們可以通過覆蓋eip來改變程式原有的執行流程,跳轉去執行我們安排的shellcode。為實現這個目的,必須知道兩個要素,多長的字串可以覆蓋到eip,還有就是我們安排的shellcode放在了什麼地方。這跟linux中很相似,當然,我們也將看到一些win32特有的部分。正如上面所見,現在覆蓋eip的是41414141,究竟多少長的buffer可以覆蓋到記憶體中的eip呢?我寫了乙個簡單的指令碼'reacheip.py',可以生成都是數字排列的buffer,並且可以通過修改引數來修改數字的排列和長度,方便我們找到需要構建的buffer長度。
指令碼簡單原理如下,這裡我們先假設暫存器大小是1byte:
a.首先生產如下數字串
123456789123456789123456789123456789123456789b.
然後我們看到某個數字覆蓋了eip(假設eip大小是1byte),假設是2,然後我們重新構建數字串,只改變原來數字2所在的位置,其他位置數字忽略或不變。
c.現在某個數字又覆蓋了eip,假設是4,這樣我們就可以計算出buffer的真實長度,用於寫exploit了。(譯者注:因為只是簡單說明一下指令碼的功能,所以這裡作者並沒有提及這個數字4是排列中第幾個4)現實中x86機器中暫存器是4byte的,所以我們將上面的數字串擴充套件到4個數字相同的排列。實際除錯中又發現,有時候並不是剛好相同的4個數字覆蓋了eip,比如是4445,所以我們在buffer的開頭加入乙個align字元,比如a,將buffer擠動一位,這樣覆蓋eip的數字串就是4444了。
有了'reacheip.py'指令碼的構建buffer功能,還需要有傳送和接收功能(網路傳送和接收),將'reacheip.py'作為乙個'library',重新組合一下得到新指令碼'reachwar-ftpd.py',用來專門除錯war-ftpd:
簡單解釋一下這個指令碼的引數:
c:/fuzzer>reach_war-ftpd.py
usage: c:/fuzzer>reach_war-ftpd.py
host: 目標主機的位址
port: 目標主機的埠
align: 放在數字串之前的填充資料個數(1 - 3)
幻影旅團溢位學習材料cloie#.ph4nt0m.
幻影旅團溢位學習材料cloie#.ph4nt0m.
win32彙編清空鍵盤緩衝區
可呼叫win32函式flushconsoleinputbuffer 實作方法如下 data consoleinhandle dword 控制台標準輸入控制代碼 code invoke getstdhandle,std input handle 讀取輸入控制代碼,std input handle是wi...
緩衝區溢位
緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程...
緩衝區溢位
緩衝區溢位,簡單的說就是計算機對接收的輸入資料沒有進行有效的檢測 理想的情況是程式檢查資料長度並不允許輸入超過緩衝區長度的字元 向緩衝區內填充資料時超過了緩衝區本身的容量,而導致資料溢位到被分配空間之外的記憶體空間,使得溢位的資料覆蓋了其他記憶體空間的資料。通過往程式的緩衝區寫超出其長度的內容,造成...