什么是万能密码
在说sql注入分类之前,先来看一下万能密码的构成原理。万能密码是由于某些程序,通过采用判断sql语句查询结果的值是否大于0,来判断用户输入数据的正确性造成的。当查询之大于0时,代表用户存在,返回true,代表登录成功,否则返回false 代表登录失败。由于 ‘or 1=1–’ 在执行后,结果始终为1,所以可以登录成功。因此,被称为万能密码。
什么是sql注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。产生的原因是接受相关参数未经处理直接带入数据库查询操作。xss属于客户端的攻击,而sql注入属于服务端的攻击。(注意:注入最终是数据库,与脚本、平台无关。)
通常 Sql 注入漏洞分为 2 种类型:
-
数字型
当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。 -
字符型
当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。
Sql 注入产生原因
当访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。
这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则可能带来危险。
sql注入攻击通常过程:
1.判断是否存在注入漏洞
2.收集信息、并判断数据库类型
2.根据注入参数类型,重构SQL语句
3.猜解表名、字段名(获取数据库信息)
4.获取有用的数据、为下一步攻击提供准备
Sql 注入带来的威胁主要有如下几点:
● 猜解后台数据库信息 盗取网站敏感信息
● 绕过认证,获得非法权限
● 盗取网站敏感信息
● 注入可以借助数据库的存储过程进行提权等操作
sql注入漏洞分析
- 构建特殊的数据库查询语句
- 获得数据库信息
- 动态查询数据库
- 返回数据库信息
- 利用sql语句猜测管理员信息,尝试登录管理员后台 (最后对其进行入侵和破坏等)
一般有GET、POST、COOKIE三种方式。
其中mysql注入
对用户提交的参数未进行过滤或过滤不严导致。
(Mysql5中新增加了一个信息表information_schema,可以通过查询得到相关重要信息)
cookices注入:
Cookie注入简单来说就是利用Cookie而发起的注入攻击。从本质上来讲,Cookie注入与传统的SQL注入并无不同,两者都是针对数据库的注入,只是表现形式上略有不同。(涉及浏览器端的JavaScript层或html层)
注入点一般呈现为:
http://www.xxxxx.com/xxx.asp?id=xx(asp注入)
http://www.xxxxx.com/xxx.php?id=xx(php注入)
http://www.xxxxx.com/xxx.jsp?id=xx(jsp注入)
http://www.xxxxx.com/xxx.aspx?id=xx(aspx注入)
http://www.xxxxx.com/index.asp?id=8&page=99(注意要确认id是参数还是page是参数,工具默认只对后面的page参数注入)
http://www.xxxx.com/index/new/id/8 伪静态
http://www.xxxx.com/index/new/php-8.html 伪静态
一些万能密码:
sql盲注
盲注与普通注入的区别:
- 普通注入有两个特征:一是会将数据库的内容查询并回显到页面上(这是最主要的),二是会返回原始的数据库错误信息(这是次要的)。数据会回显到页面上,那么我们可以从返回的页内中提取我们的数据库名等数据。
- 盲注对应的也有两个特征:一是不会将数据库内容回显到页面上(这是主要的),二是不会返回原始的数据库错误信息。不会将数据库内容回显到页面上(只告诉你存不存在)
由此我们可以把我们的猜测构造成一个布尔表达式。
如果返回的内容和原来一样那该表达式的猜测就是对的,如果返回的内容和原来不一样那该表达式的猜测就是错的。(比较和原来是否一样的形式即布尔型盲注,构造延时这种形式即时间型盲注。)
sql注入漏洞防御
- 构造的sql语句时使用参数化形式而不使用拼接方式能够可靠地避免sql注入;
- 拼接加对输入进行单引号和sql关键字过滤;
在此之前有一章简单的sql注入漏洞过程可以参考一下“SQL手工注入漏洞测试(MySQL数据库)”