SQL注入小结
一、SQL注入的概述
定义:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
(1)SQL注入威胁表现形式可以体现为以下几点:
●绕过认证,获得非法权限
●猜解后台数据库全部的信息
●注入可以借助数据库的存储过程进行提权等操作
(2)SQL注入攻击的典型手段
●判断应用程序是否存在注入漏洞
●收集信息、并判断数据库类型
●根据注入参数类型,重构SQL语句的原貌
●猜解表名、字段名
●获取账户信息、攻击web或为下一步攻击做准备
二、SQL注入的判断方法
①http://www.heetian.com/showtail.asp?id=40'
②http://www.heetian.com/showtail.asp?id=40 and 1=1
③http://www.heetian.com/showtail.asp?id=40 and 1=2
如果执行①后,页面上提示报错或者提示数据库错误的话,说明是存在注入漏洞的。
如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。
三、常见的sql注入产生原因
基于此,SQL注入的产生原因通常表现在以下几方面:
①转义字符处理不合适;
②不安全的数据库配置;
③不合理的查询集处理;
④不当的错误处理;
⑤多个提交处理不当。
详细解释:
(1)不当的处理类型
Sql数据库将单引号字符(’)解析成代码与数据间的分界线:单引号外面的内容军事需要运行的代码,而用单引号引起来的内容均是数据。因为只需要简单的在URL或WEB页面的字段中输入一个单引号,就能很快速的识别出web站点是否会受到sql注入攻击。
四、SQL注入攻击的简单示例:
这里我们举一个比较常见的例子来简要说明一下sql注入的原理。
假如我们有一个users表,里面有两个字段username和password。在我们的java代码中我们初学者都习惯用sql拼接的方式进行用户验证。比如:
"select id from users where username = '"+username +"' and password = '" + password +"'"
这里的username和password都是我们存取从web表单获得的数据。下面我们来看一下一种简单的注入:
如果我们在表单中username的输入框中输入 ' or 1=1-- ,password的表单中随便输入一些东西,假如这里输入123。此时我们所要执行的sql语句就变成了:
select id from users where username = '' or 1=1-- and password = '123'
我们来看一下这个sql,因为1=1是true,后面 and password = '123'被注释掉了。所以这里完全跳过了sql验证。
六、注入原理
SQL注入式攻击的主要形式有两种。
一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。上面笔者举的例子就是采用了这种方法。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。
二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记 “--” 来终止注入的字符串。执行时,系统会认为此后语句为注释,故后续的文本将被忽略,不被编译与执行。
SQL注入很复杂,本文知识简单浅薄了解一下,有想深入理解的,可查看本文末参考博客,在此对引用文章,原博博主表示深深感谢。
参考及致谢:
2.SQL注入攻击原理以及基本方法(本文中引用图来源)
4.小试牛刀:SQL 注入攻击(这一篇虽然没有引用,但是很好,属于实操性的,手把手带图领着你一步一步实现注入)
Over......