什麼是黑客
在日本出版的《新黑客字典》中,對黑客是這樣定義的:「喜歡探索軟件
程序並從中增長了其個人才幹的人。他們不像絕大多數電腦使用者那樣,只規
規矩矩地瞭解別人指定的狹小的一部分知識」。在Open Source(開放源代碼)
旗手ERIC。S。RAYMOND的《The New Hackers Dictionary》一文中,對「Hac
ker」的解釋包括了下面幾類人:
一:那些喜歡發掘程序系統內部實現細節的人,在這種發掘過程中,他們延
伸並擴展著自己的能力,這和只滿足於學習有限知識的人是截然不同的
二:那些狂熱地沉浸在編程樂趣的人,而且,他們不僅僅是在理論上談及編

三:一個高超的程序設計專家
四:一個喜歡智力挑戰的,並創造性地突破各種環境限制的人
五:一個惡意的愛管閒事的傢伙,他試圖在網絡上逡巡溜躂的同時發現一些
敏感的信息
對最後一類人,ERIC。S。RAYMOND賦予其更恰當的一個稱謂,那就是「Cra
cker」,有就是我們常說的「駭客」,指那些樂於破壞的傢伙。當他們在給這個
社會製造著麻煩和噱頭的同時,就只能被冠以「駭客」之名。正是因為「駭客」
的存在,純正而古老的黑客精神才愈來愈被人曲解,但在真正崇尚黑客精神的一
類人眼裡,「駭客」與「黑客」是如此的涇渭分明,不可混淆!更有甚者,有些
黑客們說:在黑客界,鬥爭只存在於「黑客」和「駭客」之間!
黑客群體有自己特有的一套行為準則(the hacker ethic)美國學者史蒂夫
。利維在其著名的《黑客電腦史》中所指出的黑客道德準則(the hacker ethic)
就是對其最深刻的表述:
(1),通往電腦的路不止一條
(2),所有的信息都應當是免費共享的
(3),一定要打破電腦集權
(4),在電腦上創造的是藝術和美
(5),計算機將使生活更加美好
可以看出,「黑客道德準則」正是這個獨特的文化群體一直心照不宣地遵循
著的「江湖規矩」,以這種「江湖規矩」作為參照,黑客們的行為特徵也就清晰
地呈現給我們了!
一,熱衷挑戰
黑客們多數都有很高的智慧,至少在某些方面表現突出。他們喜歡挑戰自己
的能力,編寫高難度程序,破譯電腦密碼給他們帶來了神氣的魔力,認為運用自
己的智慧和電腦技術去突破某些著名的防衛措施森嚴的站點是一件極、富刺激性
和挑戰性的冒險活動。
二,崇尚自由
黑客文化首先給人的突出感覺就是一種自由不羈的的精神。黑客如同夜行的蝙
蝠俠,任意穿梭在網絡空間中。黑客在電腦虛擬世界發揮著自己的極致的自由。
他們隨意登錄在世界各地的網站,完成著現實生活中無法企及的冒險旅程,實現
著個人生命的虛擬體驗。正是這種對自由的體驗,使黑客如同吸毒上癮一樣,對
網絡入侵樂此不疲
三,主張信息共享
黑客們認為所有的信息都應當是免費的和公開的,認為計算機應該是大眾的工
具,而不應該只為有錢人私有。信息應該是不受限制的,它屬於每個人,擁有知
識或信息是每個人的天賦權利
四,反叛精神
黑客文化帶有某種反叛世界的傾向,黑客們蔑視傳統,反抗權威,痛恨集權,
其行為模式以深深烙上了無政府主義的印記。互聯網的一個顯著特點是平等和共
享,對於在網絡中存在的許多禁區,黑客們認為是有違網絡特徵的,他們希望建
立一個沒有權威,沒有既定程序的社會,所以他們一般都喜歡與傳統,權威和集
權做永無休止的鬥爭
五,破壞心理
黑客們要在網絡空間來去自如,蔑視權威,就必然夾帶著某些破壞行動。只有
突破計算機和網絡的防護措施才能隨意登錄站點,只有顛覆權威設置的程序才能
表示反抗權威,也只有摧毀網絡秩序才能達至人人平等的信息共享目標。當然,
由於心理動機不同,不同黑客行為的破壞程度也是有所區別的!
這樣一種獨特的黑客文化,必然孕育出黑客群體所讀有的文化態度!
(1)這個世界不斷湧現出許多迷人的問題等待人們去解決
(2)一個問題不應該重複地解決兩次
(3)無聊而乏味的工作是可惡的
(4)自由是美好的,黑客們需要的是自由協作和信息共享,而不是專制和所
謂的權威
(5)態度並不能成為能力的替代品,想成為黑客,只有態度是不夠的,更重
要的是,還在於努力工作,傾心奉獻,鑽研和實踐!
言語
我寫這個並不是因為我已經厭倦了一遍又一遍地回答同樣的問題,而是考慮到這確實是一個有意義
的問題,其實很多人(90%)確實需要問這個問題而沒有問!
我被問了很多次有關安全領域的問題,比如,什麼編程語言你最推崇?應該讀什麼書作為開始?總
而言之,就是如何安全領域內成為一個有影響的人。既然我的答案和一般的答案有所不同,我打算把我
的看法說出來!
-------------------------------------------
從哪裡開始?
-------------------------------------------
我的觀點可能和一般的看法不同,如果你剛剛起步,我建議你不要從Bugtrap,Technotronic,Roo
tshell等站點開始。沒錯!不要從那裡開始(儘管它們是很好的站點,而且我的意思並不是說不要去訪
問這些站點)原因非常簡單。如果你認為你通曉「安全」,就是知道最新的[url=/News/World]漏洞[/url],到頭來你將會發現自
己一無所獲
我同意,知道什麼地方有[url=/News/World]漏洞[/url]是十分必要的,但是這些並不能夠為你的高手之路打下堅實的基礎。
比如,你知道RDS是最新的[url=/News/World]漏洞[/url],知道如何下載並使用對這個[url=/News/World]漏洞[/url]進行利用的Script工具,知道如何修補
這個[url=/News/World]漏洞[/url](也許,很多人只知道如何攻擊,並不知道如何防範),可是,3個月後,補丁漫天飛舞,這個
[url=/News/World]漏洞[/url]已經不存在了。。。。。現在你的那些知識還有什麼用?而且你可能根本沒有理解對[url=/News/World]漏洞[/url]的分析!
你應該學習的知識是什麼?是分析?還是攻擊手段?
這是我想要再次強調的,人們可能沒有注意,已經有很多人認為他們只要知道最新的[url=/News/World]漏洞[/url]就是安全QQ:9750406
專家,NO!所有他們知道的只不過是「[url=/News/World]漏洞[/url]」,而不是「安全」
例如,你知道有關於phf的[url=/News/World]漏洞[/url],showcode.asp的[url=/News/World]漏洞[/url],但是你知道它們為什麼會成為GGI[url=/News/World]漏洞[/url]的嗎?
你知道如何編一個安全的 通用網關程序嗎?你會根據一個GGI的狀態來判斷它有可能有哪些[url=/News/World]漏洞[/url]或哪方
面的[url=/News/World]漏洞[/url]嗎?或者,你是不是只知道這些GGI有[url=/News/World]漏洞[/url]呢?
所以,我建議你不要從[url=/News/World]漏洞[/url]開始,就當它們不存在(你知道我的意思),你真正需要做的是從一個
普通用戶開始。
---------------------------------------------
做一個用戶
---------------------------------------------
我的意思是你至少要有一些基本的常規的知識。例如:你如果要從事Web Hacking,你是否連瀏覽器都
不會用?你會打開Netscape,打開IE?很好!你會輸入姓名,你知道HTML是網頁,很好,你要一直這樣下
去,變成一個熟練的用戶。你會區別ASP和GGI是[url=/News/industry]動態[/url]的,什麼是PHP?什麼是轉向,COOKIES,SSL?你要知
道任何一個普通用戶可能接觸到的關於Web事物。不是進攻[url=/News/World]漏洞[/url],僅僅是使用。沒有這些基礎(也許是枯燥
的)知識你不可能成為高手,這裡沒有什麼簡捷
好!現在你知道這裡的一切了,你用過了。在你Hack Unix之前至少要知道如何Login,Logout,如何
使用Shell命令,如何使用一般的常用程序(MAIL,FTP,WEB,LYNX等)。
要成為一個管理員,你需要掌握如下基本的操作
------------------------------------------------
成為一個管理員
------------------------------------------------
現在你已經超過了一個普通用戶的領域了,進入更複雜的領域,你要掌握更多的知識。例如:Web服務
器的類型,與其他的服務器有什麼區別?如何去配置它,像這樣的知識,你知道得越多句意味著你更瞭解
它是如何工作的?它是幹什麼的?你理解HTTP協議嗎?你的HTTP1.0和HTTP1.1之間的區別嗎?WEBDAV是什
麼?知道HTTP1.1虛擬主機有助於建立你的Web服務器嗎?
你需要瞭解操作系統,例如你從來沒有配置過NT,你怎麼可能去攻擊一個NT服務器呢?你從來沒有用
過Rdisk,用戶管理器,卻期望Crack一個管理員的密碼,得到用戶權限?你想使用RDS,而你在NT下的操作
一直用的是圖形界面?你需要從管理員提升到一個「超級管理員」,這不是指你有一個超級用戶的權限,
而是你的知識要貫穿你的所有領域。很好!你會在圖形界面下填加用戶,在命令行你也能做到嗎?而且,
system32里的那些。exe文件都是幹什麼的?你知道為什麼USERNETCTL必須要有超級用戶權限?你是不是
從來沒有接觸過USERNETCTL?不要以為知道如何做到就行了,要盡可能知道得更多,成為一名技術上的領
導者,但是。。。
-------------------------------------------------
你不可能知道所有的事情
-------------------------------------------------
這是我們不得不面隊的事實。如果你認為你可以知道所有的事情,你在自欺欺人。你需要做的是選擇
一個領域,一個你最感興趣的一個領域,並進一步學習更多的知識。
要想成為一名熟練的用戶,成為一個管理員,成為一名技術上的領導者,直至成為某一個領域中最優
秀的人,不是僅僅學習如何使用Web瀏覽器,怎樣寫GGI就行了,你知道HTTP和WEB服務器的原理嗎?知道
當服務器不正常工作時應該怎樣使它工作嗎?當你在這個領域內有一定經驗時,自然就知道怎樣攻擊和防
御了!
這其實是很簡單的道理,如果你知道所有的 關於這方面的知識。那麼,你就可以知道安全隱患在哪
裡?面對所有的[url=/News/World]漏洞[/url]時(新的,舊的,將來的)你自己就能夠發現未知的[url=/News/World]漏洞[/url](你這時已經是一個黑客高
手了)
你找[url=/News/World]漏洞[/url]可以,但你必須首先瞭解[url=/News/World]漏洞[/url]的來源。所以,放下你手中的Whisker的拷貝,去學習GGI到底
是幹什麼的?它們是怎麼使通過HTTP的Web服務器有[url=/News/World]漏洞[/url]的?很快你就會知道到底Whisker是幹什麼的了!
編程語言
在所有最近被提及的問題中,最唱聽到的就是:「你認為應該學習什麼編程語言」
我想,這要看具體情況了,如你花費多少時間來學習?你想用這種語言來做什麼QQ:9750406
事?想用多長時間來完成一個程序?這個程序將完成多複雜的任務?
以下有幾個選項:
*Visual Basic
一種非常容易學習的語言,有很多關於這方面的書,公開的免費源代碼也很多,
你應該能夠很快地使用它。但是這個語言有一定的局限。它並不像C++那樣強大,你
需要在Windows下運行它,需要有一個VB的編程環境。想用VB來編寫攻擊代碼或補丁
是十分困難的
*C++
也許是最強大的語言了。在所有的操作系統裡都存在。在網上有成噸的源代碼和
書是免費的,包括編程環境。它比VB複雜,掌握它需要花費的時間也比掌握VB長。
簡單的東西容易學,功能強大的東西理解起來也要困難一些,這需要你自己衡量
*Assembly
也許是最複雜的語言,也是最難學的語言。如果你把它當作自己的初入門語言。
那麼將會難的你的頭要爆裂。但是,先學會了彙編,其餘的編程語言也就變得容易
多了。市場上的彙編書籍有減少的趨勢。不過,彙編知識在某些方面至關重要,比
如緩衝溢出攻擊。
*perl
一種很不錯的語言。它像VB一樣容易學習,也像VB一樣有局限性。但是它在多數
操作平台上都能運行(unix和windows,所以這是它的優勢。有很多這方面的書籍
而且是完全免費的。你可以用它來製作一些普通的攻擊工具,它主要用於一些文本
方式的攻擊技巧,並不適合製作二進製程序
我想,這是你所有想知道的,有把握的說,C/C++是最佳選擇。
-----------------------------------------
推薦的書
-----------------------------------------
另外一個問題是我推薦去讀什麼書。
我個人手邊有以下的幾本書作為參考。
Applied Cryptography (Btuce Scheiner)
Linux Application Development (mike johnson and troan)
windows assembly language and systems programming(barry kauler)
perl cookbook (tom chirstiansen and nathan torkington)(oreilly)
linux programmers reference (richard petersen)(osborne)
all the oreilly pocket referencebooks,which include vi.emacs.python.
perl.pl/sql。nt.javascript.sendmail.tcl/tk.perl/tk
我總是在這些書的一些基本規則裡思考。
我的心得是,大部分oreilly的書都非常耐讀,找一個你感興趣的領域專心去
鑽研吧!
遠程聯線
遠程聯線是一個不可思議的工具, 它讓您超越時空一般的使用遠端的
電腦系統。有了遠程聯線, 電腦軟硬體資源的分享變得很有效率, 打個比
喻來說, 您可以連線載入位於某處的超級電腦(假設您有存取權), 做天體
模擬運算, 當結果迅速的產生時, 您可以將資料傳送到另一部圖形模擬工
作站, 由那裡產生一份實體模擬圖。在這例子中, 您先後用到了一部超級
電腦以及一部圖形處理工作站, 而您雙手真正接觸到的, 很可能是一部位
於實驗室的個人電腦(PC), 可是其他這兩台電腦可能在什麼地方也不知道!
是的, 您一點也無須知道, 通過Internet的遠程聯線工具, 您只需到知道
那裡有您要的CPU時間,以及應用軟件, 如此而已。

遠程聯線可以應用於跨越時空的環境, 當然也同樣適用於辦公室區域
網絡間, 一台電腦模擬成另一台電腦的終端機而連線載入對方系統。


什麼是Telnet?

也許讀者們聽說過Telnet是一種通訊協定之一, 對於這種說法, 您大
可以忽略掉。 讀者不妨簡單的想, Telnet就是讓剛剛以上的說明成為具體
可行的一個實際的工具, 也就是說, 我們只是單純的視Telnet為一個執行
遠程聯線的工具之一, 讓一台電腦連線載入另外一部電腦。

筆者記得前面已經提到很多次, 在網絡上的應用程式多半是採用
Client/Server模式, 用中文來說, 也就是一定有一端是請求端, 請求端
執行Telnet請求程式。在主機這一端則有裝置有伺服程式來接受連線請求
,不過在多半的情況, 主機端則Client與Server兩者都有。

遠程聯線的使用程序與您平常在本地通過電話線或任何其他方式載入
一部主機並沒有很大不一樣, 您在對方主機一定要有一個私人使用帳號,
以及您的通行密碼, 這樣子您才有辦法連線進入該主機系統。細節上請參
考下面的示意。另外, 在Internet上, 有相當多的各式各樣服務系統也是
通過這方式來提供服務, 其中決大部分是免費的服務, 像是Hytelnet、BBS
、Gopher及Archie等等就是, 這類系統通常開放有公用帳號, 且無須使用
密碼。

Telnet在功能上, 是模擬成遠端一部電腦系統的終端機, 通過網絡連
線載入該電腦系統。假如您實驗室中有跑DOS的個人電腦, 該電腦也已經連
結上校園網絡, 您可以請人幫您裝設一套NCSA Telnet軟件, 之後您就可以
做筆者以上所介紹的這些不可思議的事情 (筆者一直都沒有吹牛:-) )。
NCSA Telnet是專門為DOS設計的一個請求程式, 至於在Unix機器上, 您就
無須擔心, 因為Unix是網絡的天生好手, 它一出廠就已經具備有Telnet這
東西, 而且通常是請求程序與服務程序同時具備。


□ 二. □例:遠程聯線遠端某個主機系統

┌——————————————————————————————————————————┐
│ $ telnet jet.ncic1.ac.cn ← 連線 │
│ Trying 159.226.43.26... │
│ Connected to 159.226.43.26 │
│ Escape character is ^]. │
│ │
│ SunOS UNIX (sparc4) (連線成功) │
│ │
│ login: feng ←輸入賬號
password:******* ←輸入密碼
│ Last login: Thu Dec 30 11:37:17 from 159.226.43.45 │
│ SunOS Release 4.1.1 (sparc15) #1: Tue Nov 12 05:15:31 CST 1996 │
└——————————————————————————————————————————┘
遠程聯線就是這麼簡單, 上面的操作就是一個典型遠程聯線的應用,
我們應用遠程聯線的功能,來取用遠端某一台主機系統提供的某某公
共服務系統, 至於很多商業性服務系統也可以用這方式來連線進入。

在Internet, 我們可以發現很多有趣的服務系統, 比方說,
假如您喜歡下棋, 您也找得到一些圍棋服務系統, 利用這系統您可以與另
外一個人下圍棋 ( 注意是對手是「人」, 而您可能不知道對手人在地球的
那個角落, 妙哉! ) , 其他像是網絡遊戲系統(比方MUD)您有時間也可以一
試。其他的服務系統像是BBS、IRC及Gopher等等也可以通過Telnet來取得
服務。

□ 三. Telnet、Tn3270 淺介

遠程聯線時, 您只須知道幾個Telnet的指令, 大抵如何連線, 如何中
途執行本端指令 (您自己主機這一端) , 如何結束連線及萬一不得已時使
用的中斷連線等等。Telnet的使用並沒有像FTP有很多獨特的操作指令。


不論在DOS或Unix環境, Telnet 都是個非常容易的指令, 您幾乎不
需要任何學習, 您該知道的頂多只是一開始的連線動作, 以及最後要退出
對方系統時的操作程序, 以下筆者只介紹兩個指令:

Unix下的telnet與tn3270在操作上幾乎是一樣的, 所不同者, 只因為
所連線對方系統並不一樣, 所以操作程序稍稍有異, 所以您要注意的只是,
「遵照」對方系統的要求程序來中斷連線即可。舉例來說, 您用tn3270連
線IBM VM系統時, 「logoff」 (大小寫不拘) 就是您結束連線的指令, 您
除非不得已, 不要用Unix〞kill〞指令來結束連線。

在Unix下, 無論telnet或 tn3270, 您都可以按CTRL-] (CTRL 鍵及]
鍵同時按, 有時得按兩次 ) 暫時回到 telnet/tn3270 環境, 這時您可
以執行telnet/tn3270本身的指令, 會出現下面畫面。


┌——————————————————————————————————————————┐
│ telnet> ?    ← ? 符號求助 │
│ Commands may be abbreviated. Commands are: │
│ │
│ close close current connection │
│ display display operating parameters │
│ mode try to enter line-by-line or character-at-a-time mode │
│ open connect to a site │
│ quit exit telnet │
│ send transmit special characters (send ? for more) │
│ set set operating parameters (set ? for more) │
│ status print status information │
│ toggle toggle operating parameters (toggle ? for more) │
│ z suspend telnet │
│ ? print help information │
│ telnet>

arrow
arrow
    全站熱搜

    j5530736 發表在 痞客邦 留言(0) 人氣()