1.什么是SQL注入?
就是在Web表单提交数据/传输数据时,将预先准备好的SQL语句添加进去,达到欺骗服务器并修改SQL语句的执行结果,非法获取服务器端的数据。
2.SQL注入原理
原理就是攻击者猜测Web系统的数据验证过程,在输入数据的最后加上一段SQL语句,让服务器端的SQL执行出现偏差,从而欺骗服务器,甚至可获取数据库的管理权限,然后将数据库管理用户权限提升至操作系统管理用户权限,控制服务器操作系统,获取重要信息及机密文件。
3.SQL注入流程
判断是否存在注入,注入是字符型还是数字型 猜解SQL查询语句中的字段数 确定显示位置 获取当前数据库 获取数据库中的表 获取表中的字段名 下载数据 4.寻找SQL注入点
SQL注入可以出现在任何从系统或用户接收数据输入的前端应用程序中,这些应用程序之后被用于访问数据库服务器。如果要对一个网站进行SQL注入攻击,首先就需要找到存在SQL注入漏洞的地方,也就是寻找所谓的注入点。可能的SQL注入点一般存在于登录页面、查找页面或添加页面等用户可以查找或修改数据的地方。最常用的寻找SQL注入点的方法,是在网站中寻找如下形式的页面链接:http://www.abc.com/xyz.asp?id=yy,其中“yy”可能是数字,也有可能是字符串,分别被称为整数类型数据或者字符型数据.
5.SQL注入确认
通过操纵用户数据输入并分析服务器响应来寻找SQL注入漏洞。识别出异常后,我们需要构造一条有效的SQL语句来确认SQL注入漏洞。要想构造有效的SQL注入语句,需要对SQL语言有个基本的了解。执行SQL注入攻击,首先要清楚数据库包含不同的数据类型,它们都具有不同的表示方式,可以将它们分为两类:
数字---不需要使用单引号来表示
其他类型---使用单引号来表示
下面,以http://www.abc.com/xyz.asp?p=YY为例进行分析,YY可能是整型,也可能是字符串。
a)整型参数的判断
当输入的参数YY为整型时,通常xyz.asp中SQL语句原貌大致如下:
select * from表名where字段=YY,所以可以用以下步骤测试SQL注入是否存在。
http://www.abc.com/xyz.asp?p=YY’(附加一个单引号),此时xyz.asp中的SQL语句变成了select * from表名where字段=YY’,xyz.asp运行异常; http://www.abc.com/xyz.asp?p=YY and 1=1,xyz.asp运行正常,而且与http://www.abc.com/xyz.asp?p=YY运行结果相同; http://www.abc.com/xyz.asp?p=YYand1=2,xyz.asp运行异常; 如果以上三步全面满足,xyz.asp中一定存在SQL注入漏洞。
b)字符串型参数的判断
当输入的参数YY为字符串时,通常xyz.asp中SQL语句原貌大致如下:
select * from表名where字段='YY',所以可以用以下步骤测试SQL注入是否存在。
http://www.abc.com/xyz.asp?p=YY’(附加一个单引号),此时xyz.asp中的SQL语句变成了select * from表名where字段=YY’,xyz.asp运行异常; http://www.abc.com/xyz.asp?p=YY&nb...39;1'='1',xyz.asp运行正常,而且与http://www.abc.com/xyz.asp?p=YY运行结果相同; http://www.abc.com/xyz.asp?p=YY&nb...39;1'='2',xyz.asp运行异常; 如果以上三步全面满足,xyz.asp中一定存在SQL注入漏洞。
c)特殊情况的处理
有时程序员会在程序员过滤掉单引号等字符,以防止SQL注入。此时可以用以下几种方法试一试。
大小写混合法:某些语言并不区分大小写(如asp),此时可将SQL语句中的命令字进行大小写混合来规避过滤技术,如用wHeRe代替where等。 ASCII码法:将输入内容的部分或全部字符使用ASCII码来代替,这样也有可能规避过滤技术,如A=chr(65),a=chr(97)等 6.SQL注入的危害
由于SQL注入利用的是SQL语法,使得于所有关系型数据库都可能受到攻击,并且与Web编程语言无关,这就导致几乎所有的网站都难以避免。
主要危害有:
信息泄漏---数据库中存放的各种用户信息都可能被泄露。作为数据存储中心,数据库往往保存用户的各类隐私信息,SQL注入能导致这些信息被攻击者访问和窃取。
网页篡改---通过操作数据库里的特定数据来篡改某些指定的页面。
挂马---将数据库里的值,改为木马信息或木马的链接,这样可随时通过木马对网站发起攻击。
恶意操作---修改系统管理员帐户,让管理维护人员无法操作数据库。
某些复杂/组合式的SQL指令能够操作文件系统,这使得SQL注入的危害被进一步放大。可使服务器被远程控制,让黑客修改或控制操作系统。