我被问了很多次有关于很多领域的问题.
比如:什么编程语言你最推荐? 应该读什么书作为开始?
总而言之,如何在安全领域内成为一个有影响的人.
既然我的答案和一般的答案有所不同,我打算把我的看法说出来.
-----------------------------------------------------------------------
从那里开始?
-----------------------------------------------------------------------
我的观点可能和一般的看法十分的不一样。如果你是刚刚起步,我建议你---*不要*以
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++是最佳选择.