對于緩沖區(qū)溢出,有三件事令我印象深刻:第一次成功地在Linux的imapd上利用一個緩沖區(qū)溢出;第一次在本地的Linux中獨立發(fā)現(xiàn)和利用了緩沖區(qū)溢出;第一次通過編寫緩沖區(qū)溢出成功進入別人的主機。在讀過Aleph1的關于緩沖區(qū)溢出的重要論文“Buffer overflows for fun and profit”后,大多數(shù)人想到的主要是由此帶來的好處。因為精通編寫緩沖區(qū)溢出程序的人在該行業(yè)任何一家大公司中做咨詢師的年薪都可以達到9~12萬美元。但另一方面,許多人對獲得這種技能有一個很大的誤區(qū),認為學會這種技能,就可以一勞永逸了。確實,在IT領域許多訣竅是可以學會的,一旦了解了這些訣竅,也就擁有這些訣竅了。但是編寫緩沖區(qū)溢出程序卻并不如此,從書本中或者速成班中可以學會基礎知識,但是編程的環(huán)境總是在變化。一方面,黑客在不停地尋找新的方法來更好的利用漏洞,尋找發(fā)現(xiàn)新的漏洞方法;另一方面,微軟公司每天都在給它的代碼增加保護,如果3個月不寫緩沖區(qū)溢出代碼,原有的技巧也就過時了。編寫緩沖區(qū)溢出中最難的就是要地根據(jù)不斷變化的環(huán)境給出新對策。用于編寫溢出程序的工具也在不斷變化著,以前編寫溢出程序只需要一份Softice或GDB的拷貝,就可以由某個人單獨完成。但是今天,即使是一個簡單的緩沖區(qū)溢出,Immunity公司也會有相當大的投入。例如,需要有專門的調(diào)試器來查詢、腳本化正在運行的程序;專門的編譯器來創(chuàng)建和調(diào)整克服弱點所需求的shellcode;購買或產(chǎn)生用于專門解決各種不同問題的反向工程工具;用Python語言編寫的完整的mySQL和SSL庫。一個相對復雜的漏洞利用需要整個工作小組協(xié)調(diào)完成。每種復雜的漏洞利用都會有相應的文章介紹,這些漏洞利用來自于整個團隊在不同漏洞利用過程中所得到的經(jīng)驗。最好的緩沖區(qū)溢出程序決不會是蠕蟲。攻擊者定制的漏洞利用會使被攻擊者身陷其中。如果一個頂級黑客要攻擊某個人,則會完全掌握目標主機的工作環(huán)境,目的只有一個,產(chǎn)生一個只使用一次的緩沖區(qū)溢出。編寫緩沖區(qū)溢出程序有幾個階段。本書作者James Foster介紹了一些基礎的知識和技巧,對初學者進行基礎的訓練,確定專攻的方向,然后就可以獨自編寫緩沖區(qū)溢出程序。雖然本書不能使讀者站到技術的最前沿,但是能夠確信自己掌握了基礎知識,能夠做出正確的決定。也許讀者可能投身于此項工作,致力于編寫代碼、提高技能。對于選擇這一行的讀者,請記住下面的座右銘:● 永遠不要害怕。微軟的銷售人員在不停地告誡人們發(fā)現(xiàn)微軟的新軟件的緩沖區(qū)溢出漏洞和編寫相應的漏洞利用程序是件非常困難的事情。激勵自己繼續(xù)做下去的對策就是想像一旦漏洞利用成功,自己將會如何處理這個漏洞。編寫漏洞利用程序需要掌握很多單調(diào)枯燥的技術,例如,HP-UX所用的少見的扇形內(nèi)存訪問方式;Irix帶有的笨拙的高速緩沖存儲器。雖然編寫緩沖區(qū)溢出程序需要數(shù)千條的匯編語句,學起來并不是一件容易的事情,但只要自己覺得能做到,那就一定能做到?!?不要太把自己當回事。無論自己多么優(yōu)秀,在遙遠的地方可能還有一些十五歲的年輕人每天花20小時來爭取做得更好。不要把編寫緩沖區(qū)溢出程序當成一場競爭,否則你不久就會崩潰?!?找一些伙伴。編寫緩沖區(qū)溢出程序不是獨自能不斷進步的一個技能,需要別人的幫助,找出自己在哪方面還比較薄弱?!?不管目標是什么,要把這本書當作工作表,而不是一本小說。要一邊讀一邊在電腦上操作。一本緩沖區(qū)溢出的書不能造就出一個高明的黑客。在逐章學習的過程中,會發(fā)現(xiàn)在漏洞利用不起作用時,自己會去不斷地嘗試,會廢寢忘食,會不惜花金錢來更準確地掌握所學到的知識。● 我的觀點是:漏洞利用是事實的復雜陳述,如果你贊同這個觀點,將使編寫緩沖區(qū)溢出程序變得更加美妙。希望有一天能像欣賞藝術品一樣欣賞你的代碼。—Dave AitelImmunity公司創(chuàng)始人兼CEO