时间 : 16-10-12 栏目 : 数据库 作者 : 冰镇宝贝321 评论 : 0 点击 : 2,058 次
案例描述
一篇短文,了解下SQL注入是怎么实现的
案例详解
首先,我们来谈一谈SQL注入的步骤:
1、判断环境,寻找注入点。
2、找到注入点后,判断数据类型。
3、根据注入参数类型,构造带有特征字符的SQL语句并提交。
4、获取信息,转入下一步攻击。
以上为SQL注入的几个步骤,简易的用生活中的道理来理解:
比如想追求某个姑娘或小伙子;
首先先找到他/她的喜好(寻找注入点);
然后就可以创建和她/他相遇的场景(找到注入点);
然后再留意她/他的性格之类哒(判断数据类型);
比如他/她喜欢旅游(注入类型);
然后就可以一起约出去游玩(构造带有特征字符的SQL语句);
已经能约出来了(获得信息),最后读者自己YY吧
生活我们读懂了,那接下来看一下,怎么用程序去实现SQL注入呢?
先来实现一个简单的SQL功能:
一个简单的ASP.NET程序允许用户输入一个顾客ID,然后检索公司全部人员的名字,如果顾客ID作为ASPX页面请求串的一部分返回,那么开发人员可以编写下面的代码获得数据:
以上为正常可以满足需求的SQL语句,那如何破解呢,只需要生成客户ID字典,然后输入进去,就可以成功查询人员的名字信息。
攻击升级下:
当然,对于一个攻击程序而言,即使它不知道任何顾客的ID,甚至不用去猜,也可以获得数据。则需要对输入内容进行如下的修改:
custId= ' UNION ALL SELECT ContactName from Customers Where customerID <>'
实际执行的SQL如下:
SELECT ContactName FROM Customers WHERE CustomerID = ''
UNION ALL
SELECT ContactName FROM Customers WHERE customerID <> ''
通过获得空和非空顾客的ID并集,这个查询语句会返回数据库中所有的相关姓名。事实上,这个UNION技术可以用来获得数据库中的大部分信息。
通过修改custId = ' UNION ALL SELECT FirstName + ' ' + LastName from Employees Where LastName <>'
然后实际执行的SQL如下:
SELECT ContactName FROM Customers WHERE CustomerID = ''
UNION ALL
SELECT FirstName + ' ' + LastName from Employees Where LastName <>' '
这就是攻击程序从数据库中获得的第一个员工的名字。
绕过验证:
最简单的SQL注入技术是绕过基于表单的登录。例如请求代码如下:
如果攻击者输入:
Username = ' OR ''='
Password = ' OR ''='
而实际上的执行的SQL为:
SELECT Username FROM Users WITH(NOLOCK)
WHERE Username = '' OR ''='' AND Password = '' OR ''=''
然后当数据库执行了上面这段SQL后,将以默认第一位用户的信息进行登录。
总结:
1、永远不要相信非正常用户的输入
2、遇到动态拼接的SQL,就修改成参数化吧
除非注明,文章均为( 冰镇宝贝321 )原创,转载请保留链接: https://bkqv5.com/archives/238.html