注入中的数字型、字符型、搜索型的区别
时间:2010-12-28 来源:幻泉
在数据库注入中经常有人说这个注入点为字符型的,那个注入点位数字型的,那么到底什么是数字型什么是字符型呢?其实所有的类型都是根据数据库本身表的类型所产生的,在我们创建表的时候会发现其后总有个数据类型的限制,而不同的数据库又有不同的数据类型。例如mssql就有很多自己的数据类型,但是无论怎么分常用的查询数据类型总是以数字与字符来区分的,所以就会产生注入点为何种类型。
而在SQL查询语句中,数据类型的语法有三种,也就是我们上面所说的数字型,字符型,搜索型。语法如下:
数字型: SELECT 列 FROM 表 WHERE 数字型列=值
字符型: SELECT 列 FROM 表 WHERE 字符型列=’值’
搜索型: SELECT * FROM 表 WHERE where 被搜索的列 like ‘%值%’
从语法中大家就可以看到其实类型之间的不同是很微小的,虽然有这微小的区别但是查询语句就会各有不同。
打开我们编写的sql.asp漏洞文件我们会看到sql="select * from admin where id="& id 这样的查询语句,其为典型的数字型注入。这时我们就可以利用and 1=1和and 1=2判断方法来判断是否存在漏洞。
修改sql.asp代码如下:
<!--#include FILE="conn.asp"--> <% id=request("id") set rs=server.CreateObject("adodb.recordset") sql="select * from admin where id='"& id &"'" response.write "sql语句为:"&sql rs.open sql,conn,1,3 if rs.eof or rs.bof then response.write "<br>暂无记录" else response.write "<br>返回信息是:"&rs("username") end if rs.close set rs=nothing set conn=nothing %>这里修改了sql.asp中的查询语句为字符型语句,我们再来试试and 1=1和and 1=2会发现都会返回错误信息。
我们会发现查询语句中我们输入的信息被单引号包含起来导致成为一个整体字符串,所以查询语句会查询一个为“1 and 1=1”和 “1 and 1=2”的id,这个id当然不会存在了就导致出现错误。所以针对字符型注入我们需要对单引号进行匹配,就产生了“' and '1'='1”和“'and '1'='2”这样的闭合字符型注入的判断语句。我们输入这样的判断语句就会发现跟数字型注入一样的返回。
标签分类: