玖叶教程网

前端编程开发入门

安全测试——SQL注入

SQL注入是Web系统安全攻击的常见手段,攻击者通过构建特殊的输入或非法的SQL命令插入表单或页面请求的字符串中后提交,从而达到利用服务器执行恶意SQL语句的目的。SQL注入攻击成功后,可直接屏蔽服务器验证,获取访问权限,甚至获取服务器的最高权限,执行篡改记录等恶意行为。


容易被实施SQL注入的主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。


SQL注入根据注入技术原理的不同,一般分为数据库平台注入和程序代码注入。数据库平台SQL注入由Web系统使用的数据库平台配置不安全或平台本身存在漏洞引发;程序代码注入则主要是由于开发人员在设计时,未能考虑细致及编码时错误实现,从而导致攻击者轻易利用此缺陷,执行非法数据查询。


SQL注入的产生原因通常有以下几个:

(1)不恰当的数据类型处理;

(2)不安全的数据库配置;

(3)不合理的查询处理;

(4)不当的错误处理;

(5)不合适的转义字符处理;

(6)不恰当的请求处理。


SQL注入的方法一般有猜测法攻击及屏蔽法,猜测法主要是通过猜测数据库可能存在的表及列,根据组合的SQL语句获取表信息。屏蔽法主要是利用SQL输入值不严谨错误进行逻辑验证,从而使得SQL验证结果始终为真,达到绕开验证的目的。


01.猜测法

在Web系统的日常测试工作中,经常接触如下的URL请求语句。


http://www.test.com?empid=123


上述URL表示请求了test系统中empid=123的数据信息,“?empid=123”正是提交数据库服务器的查询参数,此时,可在URL地址嵌入SQL恶意攻击语句。例如:


http://www.test.com?empid=123'or'1'='1


这样可列出所有的数据信息,如果需要猜测对应的表名,还可写成:


http://www.test.com?empid=123'or 1=(select count(*) from emp)--


如果不存在该表,则可能会报错,说明emp对象名无效,并可告知是哪种数据库类型,然后根据不同的数据库类型,使用对应的系统表名称进行查询攻击。


【案例1 商品浏览SQL注入测试】


ECShop某个商品的URL地址为:


http://192.168.0.105/ecshop/goods.php?id=64


利用猜测法构造注入URL,如:


http://192.168.0.105/ecshop/goods.php?id=64 'or 1=(select count(*) from goods)--


回车访问后,出现图1,该信息表明ECShop已经进行了该种注入类型的预防。


图1 猜测法注入SQL提示界面

02.屏蔽法

屏蔽法一般利用SQL语句AND和OR运算符进行攻击,以登陆功能为例,通常登陆SQL验证语句如下。


select * from users where username = '$username' and password = '$password'


在实际攻击过程中,将用户名username和密码password输入为:a' or 1=1,这样SQL语句则变成:


select * from users where username='a' or 1=1 and password='a' or 1=1


“AND”执行优先级高于“OR”,因此先执行1=1 and password='a',执行结果为假,username='a'也为假,但1=1为真,因此整个SQL语句的执行结果为真,可成功绕开验证登陆系统。


当然在实际的使用过程中,SQL注入可能比上述的方法更为复杂,需开发人员在设编码时尽可能防范此类攻击方法。


【案例2 用户登陆功能SQL注入测试】


以ECShop注册用户登陆功能为例,用户名输入“a' or 1=1”,密码输入正确,进行SQL屏蔽法攻击,系统提示“用户名或密码错误”,表示系统已经做了防范。


图2 用户登陆SQL屏蔽法测试


AppScan测试结果显示ECShop中不存在SQL注入方面的缺陷。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言