緩沖區(qū)溢出攻擊原理_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1.緩沖區(qū)溢出攻擊原理,堆棧,(已初始化數(shù)據(jù))數(shù)據(jù)段(未初始化數(shù)據(jù)),代碼段,一個進程的內(nèi)存映像,文本段(代碼段) 文本區(qū)域是由程序確定的, 包括代碼(指令)和只讀數(shù)據(jù)。 該區(qū)域相當于可執(zhí)行文件的文本段。 這個區(qū)域通常被標記為只讀, 任何對其寫入的操作都會導致段錯誤(segmentation violation,數(shù)據(jù)段 數(shù)據(jù)區(qū)域包含了已初始化和未初始化的數(shù)據(jù)。 靜態(tài)變量儲存在這個區(qū)域中,堆棧

2、 用于函數(shù)調(diào)用,用于返回,,高,低,1) 緩沖區(qū)溢出攻擊(實例),main(){char passwd[8] = {"2e4rfe"};char yourpasswd[8] = {""};again:puts("please input passwd?");gets(yourpasswd);if (strcmp(yourpasswd, passwd)

3、= =0)goto ok;puts("passwd error");goto again;exit(-2);ok:puts("correct!");// do work you wantreturn 0;},程序的設計功能:輸入正確的口令后做某項工作(否則重復要求輸入口令)演示:輸入精心計劃好的字串打亂設計期望的執(zhí)行邏輯,從而繞過某些口令,2)棧溢出攻擊(函

4、數(shù)調(diào)用),1) 首先把參數(shù)壓入棧; 2) 然后保存命令寄存器(IP)中的內(nèi)容作為返回地址(RET); 3) 第三個放入堆棧的是基址寄存器(FP); 4) 然后把當前的棧指針(SP)拷貝到FP,作為新的基地址; 5) 最后為本地變量留出一定空間,函數(shù)調(diào)用與堆棧,,緩沖區(qū)溢出攻擊,,,,,,,緩,沖,區(qū),,,寄存器,,,EIP,,,argc,,,argv,,ESP,→,,,,,EIP’,,,,←buf,→,,ESP,→,,低

5、,,高,,,,①進入函數(shù)后的堆棧,,②拷貝超長字符,數(shù)組到緩沖區(qū)中,,③釋放局部變量,ESP指向返回地址,,④從堆棧中取出的,EIP,執(zhí)行shell code,,,,,,,,,,,EIP’,,,,,,,,,,ESP,→,,,,,EIP’,,,,,,,,,,EIP’,→,例子,int AFunc(int i,int j){int m = 3;int n = 4;    m = i;n =

6、j;    BFunc(m,n);    return 8;},int BFunc(int i,int j){ int m = 1; int n = 2; m = i; n = j; return m;},int main(){AFunc(5,6); return 0;},,,6,AFunc(5,6);push 6

7、push 5call _AFuncadd esp+8,,函數(shù)調(diào)用中棧的工作過程,5,EIP,_AFuncpush ebpmov ebp,espsub esp,48h//壓入環(huán)境變量//為局部變量分配空間,EBP,48h,EDIESIEBX,3(m=3),4(n=4),,,6,AFunc(5,6);……call _AFuncadd esp+8,,函數(shù)調(diào)用中棧的工作過程,5,EIP,_AFunc{……return

8、 0;}pop edipop esipop ebxadd esp,48h//棧校驗pop ebpret,EBP,48h,EDIESIEBX,3(m=3),4(n=4),,,當緩沖區(qū)溢出發(fā)生時……,int AFunc(int i,int j){int m = 3;int n = 4; char szBuf[8] = {0}; strcpy(szBuf, “This is a overflow bu

9、ffer!”);    m = i; n = j;    BFunc(m,n);    return 8;},,#include#includevoid input(){ int access(0); //access為1時表示登錄正確得到權(quán)

10、限,初始為0 char password[4]; //用于存儲用戶輸入的登錄密碼  cout>password;  if(strcmp(password,"1988")==0)//比較兩個串是否相等,如果相等返回值為0 {  access=1;

11、 //兩串相等,將權(quán)限變量賦值1  } if(access!=0)  //access非零,則登錄成功  cout<<"登錄成功"<<endl; else        

12、  //access為零,登錄失敗  cout<<"error";}void main(){ input();   //函數(shù)調(diào)用},example.c void function(char *s

13、tr) { char buffer[16]; strcpy(buffer,str); } void main() { char large_string[256]; int i; for(i=0;i<255;i++)  large_str

14、ing[i] = ‘A’; function(large_string); },*str,Ret(Function后的指令地址),基地址FP,buffer,棧底(內(nèi)存高端),,程序運行結(jié)果:buffer、FP、RET、甚至Str本身等的值都變成了A,,攻擊原理: 改變RET的值; 用特殊的可執(zhí)行指令來改變 這樣就可以達到攻擊目的。 RET的位置是可以被計

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論