SQL注入技术的研究

时间:2022-09-21 09:22:13

SQL注入技术的研究

摘要:SQL注入是一种基于跨站请求伪造的技术,黑客可以利用跨站请求伪造来进行SQL注入获得的管理员权限,进入网站任意获得网站上的文件或者在网页上加挂木马和各种恶意程序,对网站和访问该网站的网友都带来巨大危害。该文主要介绍了SQL注入的原理、方法及防范措施。

关键词:SQL注入;数据库;权限;密码

中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)14-3592-01

1 引言

ASP编程简便易学,初学者很容易掌握。在一段不长的时间里,就已经能够编出比较完美的动态网站,但在安全性方面,新手最容易忽略的问题就是SQL注入漏洞的问题。用NBSI 2.0对网上的一些ASP网站稍加扫描,就能发现许多ASP网站存在SQL注入漏洞,高校内部机构的一些网站这种漏洞就更普遍了,可能这是因为这些网站大都是一些学生做的缘故吧,虽然个个都很聪明,可是毕竟没有经验,而且处于学习中,难免存在漏洞了。如何有效地防范措施SQL注入呢?SQL注入一般存在于形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX等带有参数的ASP动态网页中,有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。如果ASP程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的可能性就非常大。

2 什么是SQL注入

利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。它一般通过互联网的输入区域,插入SQL meta-characters和指令,操纵执行后端的SQL查询的技术。这些攻击主要针对其他组织的WEB服务器。CSS攻击通过在URL里插入script标签,然后诱导信任它们的用户点击它们,确保恶意Javascript代码在受害人的机器上运行。这些攻击利用了用户和服务器之间的信任关系,事实上服务器没有对输入、输出进行检测,从而未拒绝javascript代码。

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据。

3 SQL注入的原理及分类

3.1 SQL-Injection的原理

SQL是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。SQL语言可以修改数据库结构和操作数据库内容。当一个攻击者能够通过往查询中插入一系列的SQL操作数据写入到应用程序中去,并对数据库实施了查询,这时就已经构成了SQL-Injection。

3.2 SQL-Injection的分类

由于SQL-injection攻击出要发生在B/S结构的应用程序上,而这些程序大部分都属于互联网的web站点,在这种情况下SQL-Injection同样需要遵循HTTP协议,形成了两种分类:POST方式注入和GET方式注入。

4 SQL-Injection的注入方法

4.1 常规注入方法

SQL注入攻击本身就是一个常规性的攻击,它可以允许一些不法用户检索你的数据,改变服务器的设置,或者在你不小心的时候黑掉你的服务器。

4.2 旁注

顾名思义就是从旁注入,也就是利用主机上面的一个虚拟站点进行渗透 ,此类手法多出现与虚拟主机站点。

4.3 盲注

通过构造特殊的SQL语句,在没有返回错误信息的情况下进行注入。

4.4 跨站注入

攻击者利用程序对用户输入过滤及判断的不足,写入或插入可以显示在页面上对其他用户造成影响的代码。跨站注入的高级攻击就属于这种攻击。

5 SQL注入的过程

SQL注入利用的是正常的HTTP服务端口,表面上看来和正常的web访问没有区别,隐蔽性极强,不易被发现。

第一步:判断Web环境是否可以SQL注入。如果URL仅是对网页的访问,不存在SQL注入问题,如:.cn/162414739931.shtml就是普通的网页访问。只有对数据库进行动态查询的业务才可能存在SQL注入,如:/webhp?id=18,其中?id=18表示数据库查询变量,这种语句会在数据库中执行,因此可能会给数据库带来威胁。

第二步:寻找SQL注入点。完成上一步的判断后,就要寻找可利用的注入漏洞,通过输入一些特殊语句,可以根据浏览器返回信息,判断数据库类型,从而构建数据库查询语句找到注入点。

第三步:猜解用户名和密码。数据库中存放的表名、字段名都是有规律可言的。通过构建特殊数据库语句在数据库中依次查找表名、字段名、用户名和密码的长度,以及内容。这个猜测过程可以通过网上大量注入工具快速实现,并借助破解网站轻易破译用户密码。

第四步:寻找WEB管理后台入口。通常WEB后台管理的界面不面向普通用户开放,要寻找到后台的登陆路径,可以利用扫描工具快速搜索到可能的登陆地址,依次进行尝试,就可以试出管理台的入口地址。

第五步:入侵和破坏。成功登陆后台管理后,接下来就可以任意进行破坏行为,如篡改网页、上传木马、修改、泄漏用户信息等,并进一步入侵数据库服务器。

6 SQL注入的危害

SQL注入的主要危害包括:1) 未经授权状况下操作数据库中的数据;2) 恶意篡改网页内容;3) 私自添加系统帐号或者是数据库使用者帐号;4) 网页挂木马。

无论你有多强大的防火墙规则设置或者非常勤于补漏的修补机制,如果你的网络应用程序开发者没有遵循安全代码进行开发,攻击者都能进入你的系统。SQL注入意味着数据库被攻破,入侵者得到当前数据库权限的同时,也获得了整个数据库服务器的管理权限,入侵者可通过数据库管理权限得到系统权限,并为所欲为。

7 防止SQL注入的方法

很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用来防止别人进行手动注入测试。可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点。然后只需要几分钟,你的管理员账号及密码就会被分析出来。对于注入分析器的防范,首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员账号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员账号怎么变都无法逃过检测。

一般的做法是注册两个账号,一个是普通的管理员账号,一个是防止注入的账号,理由是如果找一个权限最大的账号制造假象,吸引软件的检测,而这个账号里的内容是大于千字以上的中文字符,就会使软件对这个账号进行分析的时候进入全负荷状态甚至资源耗尽而死机。具体做法如下:

1) 对表结构进行修改。将管理员的账号字段的数据类型进行修改,文本型改成最大字段255(其实也够了,如果还想做得再大点,可以选择备注型),密码的字段也进行相同设置。

2) 对表进行修改。设置管理员权限的账号放在ID1,并输入大量中文字符(最好大于100个字)。

3) 把真正的管理员密码放在ID2后的任何一个位置(如放在ID549上)。

4) 在管理员登录的页面文件中写入字符限制。

我们通过上面的四步完成了对数据库的修改,就算对方使用这个有上千字符的账号密码也会被挡住的,而真正的密码则可以不受限制。

参考文献:

[1] 潘爱民.计算机网络[M].4版.北京:清华大学出版社,2004.77-81.

[2] 谢希仁.计算机网络[M].5版.北京:清华大学出版社,2008.101-108.

[3] 王吉军.网络安全机密与解决方案[M].5版.北京:清华大学出版社,2006.56-83.

上一篇:一种基于需求的实时数据广播模型 下一篇:遗传算法与文本特征选择方法相结合的研究