我被問了很多次有關於很多領域的問題.
比如:什麼編程語言你最推薦? 應該讀什麼書作為開始?
總而言之,如何在安全領域內成為一個有影響的人.
既然我的答案和一般的答案有所不同,我打算把我的看法說出來.
-----------------------------------------------------------------------
從那裏開始?
-----------------------------------------------------------------------
我的觀點可能和一般的看法十分的不一樣。如果你是剛剛起步,我建議你---*不要*以
Technotronic, Bugtraq,
Packetstorm, Rootshell (不知道這個是否還在運行?), 等等地方為開始。
沒錯!*不要*從那裏開始。(盡管他們是很好的站點,而且這裏沒有說你不要去訪問他們的站
點)。
原因十分簡單。如果你以為通曉"安全"就是知道最新的漏洞,你將會發現你自己一無所獲。
我同意,知道什麼是好的,什麼有漏洞是十分有必要的。但是這些並不能夠給你的高手之路打下堅
實的基礎知識。很好,你知道RDS 是最新的漏洞,你知道如何下載並使用利用這個漏洞的SCRIPT
工具。你知道如何修補這個漏洞(也許。很多人隻知如何攻擊,不知道如何防護)3個月後,補丁
漫天飛舞。這個漏洞已經不存再了------現在你的那些知識還有什麼用?而且還不算你可能根本
沒有理解漏洞的分析。
你的知識是什麼? 分析?還是攻擊手段?
這是我想要再一次強調的。人們可能沒有注意,已經有很多人認為隻要他們知道最新的漏洞他們就
是安全專家。NO! NO ! NO!所有他們知道的隻不過是"漏洞",而*不是* "安全"。
例如:你知道有關於PHF 的漏洞,SHOWCODE。ASP 的漏洞。 COUNT。CGI 和TEST-CGI 的漏洞。
但是你知道為什麼他們會成為CGI 的漏洞嗎?你知道如何編一個安全的通用網關嗎?你會根據一
個CGI 的工作狀態來判斷他可能有哪些漏洞或那方麵的漏洞嗎?或者, 你是不是隻知道這些CGI
有漏洞呢?
所以我建議你*不要*從漏洞開始。就當他們不存在(你知道我的意思)。你真正需要做的是從一個
普通用戶開始。
-----------------------------------------------------------------------
做一個用戶。
-----------------------------------------------------------------------
我的意思是你至少要有一個基本的常規的知識。例如:如果你要從事 WEB HACKING 你是否可能連
瀏覽器都不會使用?你會打開NETSCAPE , 打開IE? 很好! 你會輸入姓名。你知道 。HTML 是
網頁。 很好。。。 你要一直這樣下去,變成一個熟練的用戶。你會區別ASP 和CGI 是動態的。
什麼是PHP ? 什麼是轉向?COOKIE? SSL?你要知道任何一個普通用戶可能接觸到的關於WEB
的事物。
不是進攻漏洞,僅僅是使用。沒有基礎的(也許是枯燥的)的這些東西你不可能成為高手++。
這裏沒有任何捷徑。
好, 現在你知道這裏的一切了, 你用過了。在你HACK UNIX 之前你至少要知道如何LOGIN 。
LOGOUT 。 使用 SHELL COMMAND 。 使用一般的常用的程序。 ( MAIL , FTP ,WEB 。
LYNX 。 等等)。 你要想成為一個管理員,你要知道基本的操作。
-----------------------------------------------------------------------
成為一個管理員。
-----------------------------------------------------------------------
現在你已經超過了一個普通用戶的領域了。 進入了更複雜的領域。你要掌握更多的東西。
例如:WEB 服務器的類型。 和其他的有什麼區別?如何去配置他。想這樣的知識你知道的越多意
味著你更了解他是如何工作的。他是幹什麼的。你理解HTTP 協議嗎?你知道HTTP 1。0 和
HTTP1。1 之間的區別嗎?WEBDAV 是什麼?知道HTTP1。1 虛擬主機有助於你建立你的WEB 服務
器。。。。 深入, 深入。
操作係統?如果你從來沒有配置過NT 你怎麼可能去進攻一個NT 服務器?你從來沒有用過
RDISK, 用戶管理器, 卻期望CRACK 一個ADMIN 的密碼,得到用戶權限?你
想使用RDS 而一切你在NT 下的操作你一直是使用圖形界麵?再一次, 你需要從管理員上升到一
個"超級管理員"。這裏不是指你有一個超級用戶的權限。而是你的知識要貫穿你的所有領域。很
好, 你會在圖形界麵下添加用戶,命令行方式怎麼樣?而且,那些在 SYSTERM32 裏的。EXE 文
件都是幹什麼的?你知道為什麼USERNETCTL 必須要有超級用戶權限?你是不是從來沒有接觸過
USERNETCTL?深入, 深入。。。。
成為一個"百曉生"這是關鍵。不要以為知道如何作到就行了(騙老板可以,騙進攻
者??。。。)盡可能的知道越多越好。成為一個技術上的首腦。但是。。。。。。
-----------------------------------------------------------------------
你不可能知道所有的事情。
-----------------------------------------------------------------------
哎!這是生命中不得不麵對的悲慘事實。不要以為你能。。。。如果你認為你可以。 你在自欺欺
人。你需要做的是選擇一個領域。一個你最感興趣的領域。進一步的學習更多的知識。
成為一個用戶, 成為一個管理員, 成為一個首腦。成為在某領域的最優秀的家夥(小夥,姑
娘) 不要僅僅學習如何使用WEB 瀏覽器,怎樣寫CGI 就行了。知道HTTP ,知道WEB 服務器是幹
什麼的,怎麼幹的。知道在那裏找答案。知道當服務器不正常工作時應該怎樣讓他工作。
當你在你的領域內有一定經驗時,你自然就知道怎樣進攻了。
這其實是很簡單的道理。如果你知道所有的關於這裏的知識,那麼。你也知道安全隱患在那裏。所
有的漏洞,新的,舊的,將來的,你自己就能夠發現未知的漏洞(你這時已經是一個網絡高手
了),你,找漏洞,是的,可以,但你必須了解你要找的一切先。
所以,放下你手中的WHISKER 的拷貝。去學習到底那些CGI 是幹什麼的。他們怎麼使通過HTTP使
WEB 服務器有漏洞的?很快你就會知道到底WHISKER 是幹什麼的了。
-----------------------------------------------------------------------
編程語言。
-----------------------------------------------------------------------
一些最近我經常被問的問題中最常聽的問題就是 我認為什麼編程語言應該學:
我想這要根據一些具體情況。----大致上是你準備花費多少時間在上麵,你想讓這個語言有多麼
有用。一個程序要多長時間完成。和這個程序能完成多麼複雜的事情。
以下有幾個選項(排列沒有什麼意義)。
Visual Basic.
- 非常容易學習的語言。很多這方麵的書,公開的免費原代碼也很多。你應該可以很快的使用他。
但是這個語言有一個限度。他並不是象 比如 c++ 一樣強大。你需要在WINDOWS 下運行他。需要
一個VB 的編程環境(不論盜版還是正版的 , 反正他不是免費的)。想用VB 來編攻擊代碼,或
補丁是十分困難的。
C++
- 也許是最強大的語言.在所有的操作係統裏都有.在網上有上噸的原代碼和書是免費的。
,包括編程環境。比VB 要複雜一點。也許要掌握他花費的時間要比VB 要多一點。簡單的東西容易
學,幹複雜的活的東西理解起來也要複雜一點。你自己衡量。
Assembly
- 最複雜的,也是最難學習的語言,如果你把他當作第一個你要學習的語言,那麼將會難的你頭要
爆裂。但是,你先學了彙編,其餘的還不是小菜 ;)
有一些書,這方麵的教材有減少的趨勢。但是彙編知識對某些方麵來說是致關緊要的。比如:緩衝
逸出。攻擊。很多這類的免費軟件。但從這個語言開始是十分*困難*。
Perl
- 一個很不錯的語言. 他象VB 一樣容易.學習他相應的容易一些.他也象VB一樣有限製,但是他在
多數操作平台都能運行.(UNIX . 和WIN ).所以這是他的優勢.很多這方麵的書. (O'Reilly
'Camel' books), 而且這個語言是完全免費的.你可以使用他來作一些普通的攻擊工具. 他主要
是作用於一些文本的技巧攻擊.不適合做二進製程序.
我想這是所有你想知道的. 有把握的說 C/C++是最佳選擇.