?? 通通透透講溢出攻擊.txt
字號:
發信人: Car (承受), 信區: Hacker
標 題: 通通透透講溢出攻擊
發信站: 哈工大紫丁香 (2001年12月30日21:55:37 星期天), 站內信件
中國E安網絡聯盟 Ahriman 發布
緩沖區溢出技術基礎
在這里強調一下,想完全看的懂這篇文章,至少需要具備一定的匯編語言,C語言和LIN
UX的基礎。
緩沖區溢出”在英文中可以解釋為:buffer overflow,buffer overrun,smash the
stack,trash the stack,scribble the stack, mangle the stack, memory
leak,overrun screw;
我們通常所說的“溢出”指的是緩沖區溢出,(廢話,不然要從那里溢出呀!)先解釋
一下什么是緩沖區——緩沖區是內存中存放數據的地方,是程序運行時計算機內存中的
一個連續的塊,它保存了給定類型的數據。問題隨著動態分配變量而出現。為了不用太
多的內存,一個有動態分配變量的程序在程序運行時才決定給他們分配多少內存。當程
序試圖將數據放到計算機內存中的某一位置,但沒有足夠空間時會發生緩沖區溢出。另
一種說法,就是說程序在動態分配緩沖區放入太多的數據會有什么現象?它會溢出,會
漏到了別的地方。
一個緩沖區溢出應用程序使用這個溢出的數據將匯編語言代碼放到計算機的內存中,通
常是產生root權限的地方。單單的緩沖區溢出,并不會產生安全問題。只有將溢出送到
能夠以root權限運行命令的區域才行。這樣,一個緩沖區利用程序將能運行的指令放在
了有root權限的內存中,從而一旦運行這些指令,就是以root權限控制了計算機。
所以我們更多的時候把緩沖區溢出指的是一種系統攻擊的手段,通過往程序的緩沖區寫
超出其長度的內容,造成緩沖區的溢出,從而破壞程序的堆棧,使程序轉而執行其它指
令,以達到攻擊的目的。據統計,通過緩沖區溢出進行的攻擊占所有系統攻擊總數的80
%以上。
世界上第一個緩沖區溢出攻擊——著名的Morris蠕蟲,發生在十年前,它曾造成了全世
界6000多臺網絡服務器癱瘓。我這是我所知的最早的緩沖區溢出攻擊程序。
記住,造成緩沖區溢出的原因是程序中沒有仔細檢查用戶輸入的參數!!!
下面舉一個最為常見的,也是最簡單的溢出。
void function(char *str){
char buffer[16];
strcpy(buffer,str);
}
在這個例子中上面的buffer的長度被限制在16,而strcpy()將直接把str中的內容copy到
buffer中。這樣只要str的長度大于16,就會造成buffer的溢出,使程序運行出錯。So,
我們說這個程序溢出了。
在C語言中,靜態變量是分配在數據段中的,動態變量是分配在堆棧段的。緩沖區溢出
是利用堆棧段的溢出的。一個正常的程序在內存中通常分為程序段,數據端和堆棧三部
分。程序段里放著程序的機器碼和只讀數據,這個段通常是只讀,對它的寫操作是非法
的。數據段放的是程序中的靜態數據。動態數據則通過堆棧來存放。在內存中,它們的
位置如下:
。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -