吾愛破解 - LCG - LSG |安卓破解|病毒分析|huihengkj.com

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 1100|回復: 20

[漏洞分析] 簡單的【緩沖區溢出原理】(一)

  [復制鏈接]
樓主
Chost 發表于 2020-11-21 00:10 回帖獎勵
1.      一段具有緩沖區溢出的C代碼
[Asm] 純文本查看 復制代碼
#include "stdio.h"

#include "string.h"

#include <windows.h>

char payload[] = "aaaaaaaabbbbbbbbbbbbxxxx";

void exp()

{

system("whoami");

}

void func()

{

 char buffer[8];

strcpy(buffer,payload);

printf("%s",buffer);

}

int main(){

 func();

getchar();

return 0;

}
2.      原因是strcpy()函數沒有檢查copy的長度而導致的溢出簡單的說緩沖區溢出漏洞的原理就是因為輸入了過長的字符,而緩沖區本身又沒有有效的驗證機制,導致過長的字符將返回地址覆蓋掉,當函數需要返回的時候,由于此時的返回地址是一個無效地址,因此導致程序出錯。利用: 假設所覆蓋的返回地址是一個有效地址,而在該地址處又包含著有效的指令,那么系統就會毫不猶豫地跳到該地址去執行指令。3.      調用func函數的壓棧 4.      編譯代碼,用OllyDbg進行加載分析一開始的地址并不是main 函數,所以需要定位到 main 函數的地址 這個時候把IDA打開,找到main函數,按X鍵交叉引用一下 找到調用main函數的地址0x00401804 5.      OD中按ctrl+G,然后輸入地址0x00401804就來到調用main函數的地方 此處按下F2下斷點,然后按F9讓程序跳到此處,再F7單步進入main函數里 結合IDA分析發現地址0x 0040F988是調用func函數的地方,按F8單步步過到   6.      程序在執行進入CALL的時候,都會將CALL下面那條語句的地址入棧,這樣當CALL執行完后,程序再將該地址出棧,這樣就能知道下一步應該執行哪條指令。一般將這個地址稱為返回地址 call func函數的時候地址0x 0040F98D將被壓入棧中,按F7步入 堆棧區 0x0012FF2C 處保存要返回的地址0x 0040F98D 7.結合IDA發現地址0x00401091就是strcpy 函數的地方 觀察 strcpy 函數執行前后棧空間的變化,當函數執行完后發現堆棧區 0x0012FF2C 處保存要返回的地址0x 0040F98D已經被覆蓋為0x62626262(bbbb) 8.原來它所保存的值為0x 0040F98D,在執行完func函數后,需要執行該地址處的指令。現在棧中的內容變成了比如上圖中的 0x62626262,那么當func函數執行完畢后,程序會跳到地址 0x62626262 處繼續執行。 9.根據這個原理,假設覆蓋的返回地址是一個有效地址,而該地址又包含有效的指令,那么系統就會跳到該地址去執行指令。IDA中發現exp()函數的地址為0x 00401020,把這個地址覆蓋原來的返回地址可以這樣修改payload字符串的值,注意大小端的問題 重新編譯程序后載入OD中分析 當執行完func函數之后,程序成功跳到exp()函數去執行

免費評分

參與人數 4吾愛幣 +4 熱心值 +4 收起 理由
金色傳說 + 1 我很贊同!
Victory.ms + 2 + 1 用心討論,共獲提升!
ywj0909 + 1 + 1 用心討論,共獲提升!
fengbolee + 1 + 1 用心討論,共獲提升!

查看全部評分

發帖前要善用論壇搜索500彩票邀请码功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
ironhulk 發表于 2020-11-21 08:30
樓主最好說明什么編譯環境和注意事項,不然像我們初學者按照這個步驟學習,突然遇到一個DEP或者SEHOP之類的,就會回頭懷疑自己。。。
感謝樓主分享
推薦
doctordc 發表于 2020-11-22 16:24
樓主講的非常好!不過有一個問題就是,就是64位下同樣的代碼還能這樣操作溢出嗎?我試了好像只會報段錯誤,可能是原理有些不同了吧?
沙發
tsecond 發表于 2020-11-21 00:21
4#
留下平凡的一生 發表于 2020-11-21 11:17
大佬大佬
5#
SJZXR2006 發表于 2020-11-21 12:50
大佬,頂起。
6#
2016wapjpc 發表于 2020-11-21 13:09
分析的很到位,esp是棧頂,ebp是棧低,esp在在調用時不斷變化,ebp也隨之調用在提升,然后在call后隨ret一步一步返回到原來的ebp
7#
鴨子咯咯噠~ 發表于 2020-11-21 17:01
wow!學習了
8#
awseq 發表于 2020-11-21 17:33
樓主用的是C,python和Java好像緩沖區溢出不是那么常見?
9#
duoyuba 發表于 2020-11-21 21:51
認真認真的看了  還是有些頭暈  
10#
cptw 發表于 2020-11-21 22:13
大佬大佬,但沒看懂
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|處罰記錄|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-11-27 05:13

Powered by Discuz!

500彩票邀请码Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表

500彩票邀請碼-彩經網