入侵技术说的很简单,这次说详细一些,不过也不会设及技术细节,只作概念讨论,高手可以略过了。有不对的地方请大家指正。
一、还是先说注入,因为我想大家对网络都比较熟悉。
什么是注入?
用我的话说:注入的思路就是把我们需要的数据库查寻语句(或其它语句)插入到服务器中的网站程序中
去,让它在服务器上得以执行,并反回我们需要的信息。插入的方法当然可以是输入框,也可以是地址栏
的参数当中,也可以是COOKIE中(如果服务器程序要读取本地的COOKIE的话),当然只要能够被传送到服
务器上的地方都是有可能的。那么注入的关键也就是找到这样的注入点。
不明白接着看。
先解释ASP等网页的显示过程----------------------------------
在上网的时间我们都见过类似这样的网址
http://iienter.cn/view.asp?ID=12(举例而已,并不存在)这样
的网址,一些ASP、PHP等写的网站上常见,先解释一下,
http://iienter.cn/这是网站地址,view.asp
是网站上负责显示内容的ASP代码网页,ID=12是传给网页的参数它会被送到服务器上,并传给view.asp,
ID是文章的标识。这个网址的意思就是用view.asp显示iienter.cn这个站点上的标识ID是12的文章。怎样
显示呢?view.asp接到传来的参数(本例是ID=12)后,会根据传来的参数查数据库,查出ID是12的文章
的内容,以便显示。查数据库的语句为(为了方便理解,部分用了的汉字)
select 文章内容 from 文章表 where ID=12 -------ID=12是传来的参数
这个语句的意思是:查寻(select) 文章内容 从(from)文章表 里的(where)ID=12的地方。这是英
文的语序,用我们的话说就是,在 文章表 里找ID=12 的文章内容。这样我们就可以看到这篇文章的内容
了。
下面说怎样注入--------------------------------------------
这样的网址在正常情况下是不会有问题的,但是我们可以根据它的网址构造一些网址,如:
http://iienter.cn/view.asp?ID=12 and select 管理员密码 from 管理员表 where 用户名=管理员用户
名
and 是SQL数据库中连接两个语句的关键词,你只要知道它前后各是一个语句就行了。
这样传给view.asp的参数就是“ID=12 and select 管理员密码 from 管理员表 where 用户名= 管理员用
户名”如果view.asp将其直接代入查寻语句就成了
select 文章内容 from 文章表 where ID=12 and select 管理员密码 from 管理员表 where 用户名= 管
理员用户名
这样我们就成功的给view.asp文件增加了一个查寻,得到的将是管理员的密码。
--------------------------------
在本例中
http://iienter.cn/view.asp?ID=12这个可以注入的网址我们就称为注入点,当然我们也可以利
用输入框、COOKIE等其它有参数传递的地方进行注入。
本例中我们成功的把我们要执行的查寻语句“select 管理员密码 from 管理员表 where 用户名= 管理员
用户名”注射进了view.asp这个文件中,并顺利执行。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
二、再说一下 溢出:
溢出的原意是我们向容器中倒入过量的水,水就会溢出来撒在别的上面。那在计算机中的容器是什么呢?
缓冲区,也就是临时存放程序之间传递的参数的地方,因为缓冲区的大小是固定的,当我们传入过大的数据
时,如果超过了缓冲区的大小,多出来的数据就会覆盖在正常的程序上(这里和注入是有区别的,因为计算机
中的程序是编译执行的,计算机根据内存位置来执行代码,代码的位置是相对固定的当缓冲区溢出后,后面
的程序不会后移,而是被覆盖.)可以想象,如果我们在这些数据当中加入越权的代码,而且它覆盖的位置正
好是下一条要执行的指令的话,那么我们的越权代码就会被执行,从而给我们打开大门.
也举个例子说明一下。在计算机之间进行连接时,也要传送一些参数,我们可以把计算机之间的连接过程
看成是两个计算机之间的对话。
例----------------------------------------------------
如服务器中有一段程序:
你是( )?如果是“黑客”,结束;否则连接成功,执行正常程序。(这里也用语言代替程序,
空格代表缓冲区,它的大小是程序绝定的,不能改变。)
黑客机的如果在空位填上“黑客”就会结束通信。怎样突破呢?下面我们一起行动起来,进行一次溢出
入侵。
------------ ----------------------------
把“你是( )?如果是“黑客”,结束;否则连接成功,执行正常程序。”这段程序复制进WORD文
件中。并把WORD的编辑状态改成“改写”(按DEL上面的insert键)。这样,因为缓冲区(空格)的大小
是一定的,如果我们在空格中加入过多的内容就会覆盖掉后面的代码(文字)。
下面我们构造溢出代码------------------------------
最简单的就是写入“黑客,连接成功,并且具有最高权限。”把这句话从空格位置开始输入(我们写在下
面一行),上面的代码就成了:
你是( )?如果是“黑客”,结束;否则连接成功,执行正常程序。
黑客,连接成功,并且具有最高权限。
但是这样还有一个问题,因为计算机中的程序是按内存位置执行的,接到黑客机的信息后,后面的代码是从
原代码"如果"的位置开始执行的,而现在覆盖在这里的代码是“成功”,后面执行的代码就成了:“成功
,并且具有最高权限。”这样会使程序出错,而使溢出失败。
我们重新构造代码,可以在“连接”前面插入一些无用代码使后面的代码向后移动,直到对准“如果”的
位置。如下:
你是( )?如果是“黑客”,结束;否则连接成功,执行正常程序。
黑客,----连接成功,并且具有最高权限。
这样服务器接收到黑客机的回应后转去执行的就是黑客构造好的代码。
-------------------------------------------------
这样原来正常服务器程序被覆盖了,取而代之的是我们的代码,从而使我们得到权限。
这两种入侵是不是很相像呢?关键是把我们要执行的语句“注射”进目标的体内,使我们的语句得以执行
。不过现在各种程序对传来的参数等信息的过滤是越来越严了。不过有挑战才有乐趣吗?先写这些吧,也
不知对新手们有没有用。以上只是对原理的一点解释,当然要找到漏洞实现入侵,将是一个复杂的过程,不
过也是个很有趣的过程!