我写这个并不是因为我已经厌倦了一遍又一遍的回答一样的问题,而是考虑到这确实是一个有意义的问题,其实很多人(90%)确实需要问这个问题而从来没有去问.]

     我被问了很多次有关于很多领域的问题. 比如:什么编程语言你最推荐? 应该读什么书作为开始? 总而言之,如何在安全领域内成为一个有影响的人. 既然我的答案和一般的答案有所不同,我打算把我的看法说出来.

                        从那里开始?

    我的观点可能和一般的看法十分的不一样。如果你是刚刚起步,我建议你---*不要*以 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++是最佳选择.

                        推荐的书

    另外一个问题是我推荐去读什么书:

    我个人手边总是有以下的几本书做参考:

       Applied Cryptography (Bruce Scheiner)
       Linux Application Development (Mike Johnson and Erik Troan)
       Windows Assembly Language and Systems Programming (Barry Kauler)
       Perl Cookbook (Tom Christiansen and Nathan Torkington) (O'Reilly)
       Linux Programmer's Reference (Richard Petersen) (Osborne)
       All the O'Reilly 'Pocket Reference' books, which include vi, emacs,
       python, perl, pl/sql, NT, javascript, sendmail, tcl/tk, perl/tk

    我总是在这些书的一些基本的规则里思考.

    我的心得,大部分O'Reilly 书耐读.找一个你感兴趣的领域专心去钻研.