深入理解黑客攻擊-緩衝區溢出攻擊
嗨,各位粉絲好,你們有沒有想過黑客是一群什麼樣的人?
他們是一群誰也不知道真實身份的人,他們可以是你、我、他當中的任何一個人
他們可以攻擊也可以防禦。遊走在法律的邊緣,看似邪惡卻也充滿正以,它可以使一個人,也可以是一群人他們是誰?
匿名者!
永遠不要忘記,他可能就在我們之中
有人會問,難道真的沒有什麼系統完全能抵禦黑客的攻擊嗎?
對,當然沒有!因為漏洞在人身上,沒有絕對安全的系統
攻防無絕對,技術無黑白
今天就來講解一下黑客攻擊的其中一部分——緩衝區溢出攻擊
緩衝區溢出攻擊呢是利用緩衝區溢出漏洞所進行的攻擊行動
如果有人利用棧中分配的緩衝區寫溢出,悄悄地將一段惡意代碼的首地址
作為返回地址覆蓋寫到原先的正確的返回地址處。那麼程序在執行ret的時候會悄悄地轉移到這個惡意代碼段處執行
從而可以輕易獲得系統特權,進而進行各種非法操作
造成緩衝區溢出的原因就是系統沒有對作為緩衝區的數組進行越界檢查
給出一段代碼
#include
main函數調用outputs函數。
通過對main函數進行反彙編,可以得到
Dump of assembler code for function main: 0x080484be : push %ebp 0x080484bf : mov %esp,%ebp 0x080484c1 : and $0xfffffff0,%esp 0x080484c4 : sub $0x10,%esp 0x080484c7 : movl $0x8048584,(%esp) 0x080484ce : call 0x804847d
通過對outputs函數進行反彙編,可以得到
Dump of assembler code for function outputs: 0x0804847d : push %ebp 0x0804847e : mov %esp,%ebp 0x08048480 : sub $0x28,%esp 0x08048483 : mov 0x8(%ebp),%eax 0x08048486 : mov %eax,0x4(%esp) 0x0804848a : lea -0x18(%ebp),%eax 0x0804848d : mov %eax,(%esp) 0x08048490 : call 0x8048340
可以看出,彙編代碼
0x08048490 : call 0x8048340
是對應於c代碼
strcpy(buffer,str);//str to buffer這一句的
那麼strr[0]是對應於 0x0804848a : lea -0x18(%ebp),%eax這一句的
那麼buffer[0]是對應於 0x08048483 : mov 0x8(%ebp),%eax這一句的
也就是說strcpy(buffer,str);這一條語句,就是將buffer數組賦值給str數組
而ebp+8的地址就是返回地址所在的內存地址的位置
所以我們必須將-0x18(%ebp)到4(%ebp)之間全部填充滿
然後-4(%ebp)到8(%ebp)填充為我們想要程序返回的地址
這樣函數outputs執行完畢以後,就會返回到我們想要返回的地址
通過對hacker進行反彙編
我們得到hacker函數的首地址
如圖所示,hacker函數的首地址為0x080484aa
那麼我們就把esp+4到esp+8的區間填充為0x080484aa
可以看到,劫持成功了
以上內容就是對黑客攻擊做一個簡單的瞭解和介紹
你想像他們一樣麼?做一名白帽子,幫助安全廠商去修復漏洞嗎。
閱讀更多 黑客入門學習 的文章