摘要
黑客,在大多数人的印象中非常神秘,成为一个黑客是不少学计算机人的梦想。但是网上关于黑客的书籍以及教程非常少,而且有价值的书更加少,这给大多数想要学习这方面知识的人带来了不小的难度。本文将从入门的角度,介绍网络攻防的历史以及基本原理,为这方面感兴趣的小伙伴提供一点经验。
web攻防历史
早期的万维网是仅有web站点构成,这些站点储存基本的静态文档供用户访问。后来人们发明了浏览器,用它来检索这些文档。早期的相关信息流仅由服务器向浏览器单向传送,对所有用户不加区分。因此主要的安全问题集中在服务器端,攻击者通过修改服务器上的文件,恶意引导用户进行下载,从而达到入侵用户的目的。这个时候为了保障web安全,主要的技术是在服务器端研究防火墙,防止恶意入侵,从而达到保护网络环境安全的目的。
现在的web站点是非常复杂的应用程序,它们介于服务器和客户端之间,可以支持注册和登录,金融交易,搜索等极其复杂的功能。用户通过浏览器发出请求,传给web站点,站点访问服务器的数据对请求进行处理,然后返回给客户端。现在web程序交互是双向的,浏览器可以传输请求给服务器,服务器也可以返回请求给客户端。而且现在的web程序,服务器上的很多数据都是比较私密的数据,是不允许用户随意查看的。因此现在的web安全问题变得非常复杂和多样化。每一个web应用程序是不同的,所以它们对应的安全问题也不同,这就需要新的技术来保障网络安全。
web程序的核心安全问题
现在web程序面临的最基本的问题是:“用户可以提交任意的输入”,这是现在一切网络攻防的起步点和落脚点。只要知道web站点的ip地址和端口,用户就可以构造任意的输入,从而达到入侵系统的目的。所以现在黑客攻击网络站点的本质是,利用站点的漏洞,构造出来恶意的请求数据,从而达到获取服务器隐私数据,控制站点的目的。举一个例子,图片p1为一个数据库的表,表名为jobs。假设我们现在有一个用户名为1,我们目的是查到该数据库中所有的用户的数据信息。
p1
我们首先在浏览器输入如下url:localhost:3452/EXcelUsingXSLT/Default.aspx?jobid=1,它会执行如下的查询语句:
SELECT job_id, job_desc, min_lvl, max_lvl FROM jobs WHERE (job_id = 1)最终结果如图p2所示。
p2
我们查出了id为1的用户对应的信息。我们现在想查询所有用户的信息,这个时候直接查询是不行的,应为我们不知道别的用户的id。要查询所有用户信息,直观上应该执行的语句是
SELECT * FROM jobs
但是这条语句是无法直接执行的,因为我们无法控制服务器端代码,我们唯一可以控制的就是我们的请求,简单来说就是url:localhost:3452/EXcelUsingXSLT/Default.aspx?之后的参数。我们构造如下的参数:jobid=1'or'1'='1,它对应的sql查询语句如下:
SELECT job_id, job_desc, min_lvl, max_lvl FROM jobs WHERE job_id = '1' OR '1' = 1'最终结果如图p3所示。
p3就这样,我们在仅仅知道服务器一个用户名的条件下,查询出了服务器所有的用户信息。以上例子是一个恶意构造输入来入侵系统的实例。在现在的web程序中,用户可以改变请求参数,cookie和HTTP信息头,然后发送给服务器。用户可以用完全合法的输入执行恶意的操作,传统的防火墙无法识别,这就只能靠程序员写程序的时候注意安全。但是一个复杂的程序不可能对所有情况进行验证,这就是说,一个网络程序,一定存在一些漏洞和风险,黑客要做的就是发现这些漏洞,构造输入进行入侵。
总结
武功分为内功和招式。想要成为绝顶高手,一定要有深厚的内功基础。而本文重点讲了黑客攻防的一些基本的理论。现在大多数人学习的时候都喜欢去研究一些具体的招式,比如用几个工具去攻击一些玩具网站,然后觉得很有成就感。然而这些东西虽然学习起来快,但是很难在真正的网络攻防中起到作用。要想真正成为一名黑客,内功非常重要。所以建议各位小伙伴,欲速则不达,练好基础,踏实前进。本文的例子参考了http://blog.csdn.net/stilling2006/article/details/8526458/,尊重原创