[ 我写这个并不是因为我已经厌倦了一遍又一遍的回答一样的问题,而是考虑到这确实是一个有意义的问题,其实很多人(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++是最佳选择.
为什么发这篇文章? 在这里我看到有很多人提问说谁可以教他呀??有没有高手可以教他,或 是怎么黑别人,看到这些问题我都不愿意去回答他,因为我觉得问这些问题的人很无知,问问题的人是在浪费时间,回答他的人也是在浪费时间,其实没有人可以帮你成为一个网络高手或黑客,只有靠自己,这个世界就是这样,你学习也要靠自己,如果你想要别人教你那你就到学校里去学吧,但是,在我知道的高手里 没有几个是从现在的学校里学成的,而大部分人都是自学而成的,只有你自己可以帮你,大家不要在浪费时间了,我决不会说我发这篇文章时绝对的对,但它至少可以帮助你,给你指一个方向,不论对于不对,请各位高手指正,我说的是真正的高手!
|